<?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>146929</bug_id>
          
          <creation_ts>2015-07-13 23:28:21 -0700</creation_ts>
          <short_desc>DFG should have adaptive structure watchpoints</short_desc>
          <delta_ts>2015-08-04 10:56:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>147030</dependson>
    
    <dependson>147034</dependson>
    
    <dependson>147218</dependson>
    
    <dependson>147250</dependson>
          <blocked>147271</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1109330</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-13 23:28:21 -0700</bug_when>
    <thetext>If we want a singleton object to have, or not have, some property then we shouldn&apos;t deoptimize just because some other unrelated property was added (or removed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109331</commentid>
    <comment_count>1</comment_count>
      <attachid>256760</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-13 23:28:58 -0700</bug_when>
    <thetext>Created attachment 256760
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109431</commentid>
    <comment_count>2</comment_count>
      <attachid>256789</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-14 13:23:41 -0700</bug_when>
    <thetext>Created attachment 256789
it is written

Of course it fails to build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109644</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-15 10:14:06 -0700</bug_when>
    <thetext>Attachment 256789 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:694:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:64:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:65:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:66:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:67:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:131:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 7 in 11 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>1109758</commentid>
    <comment_count>4</comment_count>
      <attachid>256875</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-15 16:04:53 -0700</bug_when>
    <thetext>Created attachment 256875
start of a better approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109763</commentid>
    <comment_count>5</comment_count>
      <attachid>256876</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-15 16:20:09 -0700</bug_when>
    <thetext>Created attachment 256876
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109764</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-15 16:27:50 -0700</bug_when>
    <thetext>Here&apos;s the plan for what I&apos;ll do: This work will replace StructureChain with the concept of an ObjectPropertyConditionSet.  Each of the ObjectPropertyConditions in the set can either be validated using a structure check, or they can be turned into a transition watchpoint.  The transition watchpoint can then revalidate the ObjectPropertyCondition when it fires, to see if a new transition watchpoint could be set.

This will eliminate StructureChain and the &quot;normalizeStructureChain&quot; code, and replace it with new code that reasons about ObjectPropertyConditions.  It&apos;s not a small change.  But I realized when running simple tests that we need our inline caches to also use adaptive watchpoints, or else the profiling feedback to the DFG/FTL will be bogus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109818</commentid>
    <comment_count>7</comment_count>
      <attachid>256889</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-15 20:16:19 -0700</bug_when>
    <thetext>Created attachment 256889
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109823</commentid>
    <comment_count>8</comment_count>
      <attachid>256891</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-15 21:28:47 -0700</bug_when>
    <thetext>Created attachment 256891
more carnage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109838</commentid>
    <comment_count>9</comment_count>
      <attachid>256894</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-16 00:47:39 -0700</bug_when>
    <thetext>Created attachment 256894
moar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109942</commentid>
    <comment_count>10</comment_count>
      <attachid>256919</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-16 13:37:06 -0700</bug_when>
    <thetext>Created attachment 256919
some more progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110065</commentid>
    <comment_count>11</comment_count>
      <attachid>256952</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-16 19:54:33 -0700</bug_when>
    <thetext>Created attachment 256952
this isn&apos;t going to be a tiny incremental change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110347</commentid>
    <comment_count>12</comment_count>
      <attachid>257024</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-17 23:33:57 -0700</bug_when>
    <thetext>Created attachment 257024
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110377</commentid>
    <comment_count>13</comment_count>
      <attachid>257031</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-18 13:40:03 -0700</bug_when>
    <thetext>Created attachment 257031
a little more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110438</commentid>
    <comment_count>14</comment_count>
      <attachid>257048</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-18 21:02:51 -0700</bug_when>
    <thetext>Created attachment 257048
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110543</commentid>
    <comment_count>15</comment_count>
      <attachid>257068</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-19 16:14:07 -0700</bug_when>
    <thetext>Created attachment 257068
slowly figuring out the best way to handle conditions in the DFG frontend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110753</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-20 14:13:11 -0700</bug_when>
    <thetext>Attachment 257068 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:30:  Missing spaces around /  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:155:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:157:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:159:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:163:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:163:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:44:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 22 in 40 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>1111739</commentid>
    <comment_count>17</comment_count>
      <attachid>257376</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 14:10:41 -0700</bug_when>
    <thetext>Created attachment 257376
a little more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111790</commentid>
    <comment_count>18</comment_count>
      <attachid>257395</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 15:43:05 -0700</bug_when>
    <thetext>Created attachment 257395
so small patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111886</commentid>
    <comment_count>19</comment_count>
      <attachid>257422</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 19:34:09 -0700</bug_when>
    <thetext>Created attachment 257422
some tweaking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111916</commentid>
    <comment_count>20</comment_count>
      <attachid>257432</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 21:27:47 -0700</bug_when>
    <thetext>Created attachment 257432
more

I&apos;ve gotten closer to figuring out how to make MultiGetByOffset work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112069</commentid>
    <comment_count>21</comment_count>
      <attachid>257472</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-24 13:13:38 -0700</bug_when>
    <thetext>Created attachment 257472
starting to look like a complete picture</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112111</commentid>
    <comment_count>22</comment_count>
      <attachid>257484</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-24 15:16:11 -0700</bug_when>
    <thetext>Created attachment 257484
a bit more

Still not compiling, but I believe that the code is written.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112511</commentid>
    <comment_count>23</comment_count>
      <attachid>257594</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-27 14:46:22 -0700</bug_when>
    <thetext>Created attachment 257594
more

It&apos;s getting closer to compiling.  Still a lot of work left though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112682</commentid>
    <comment_count>24</comment_count>
      <attachid>257635</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-27 22:56:37 -0700</bug_when>
    <thetext>Created attachment 257635
even more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112899</commentid>
    <comment_count>25</comment_count>
      <attachid>257694</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-28 15:30:08 -0700</bug_when>
    <thetext>Created attachment 257694
OMG it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112966</commentid>
    <comment_count>26</comment_count>
      <attachid>257713</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-28 17:32:42 -0700</bug_when>
    <thetext>Created attachment 257713
OMG it&apos;s a 58x speed-up

It&apos;s a 58x speed-up on this test:

 function foo(o) {
    var result = 0;
    for (var i = 0; i &lt; 100; ++i)
        result += o.f;
    return result;
}

noInline(foo);

var p = {f:42};
var o = Object.create(p);

for (var i = 0; i &lt; 10000; ++i) {
    //print(&quot;test: i = &quot; + i);
    //print(&quot;Adding property.&quot;);
    p[&quot;i&quot; + i] = i;
    //print(&quot;Calling foo().&quot;);
    var result = foo(o);
    if (result != 42 * 100)
        throw &quot;Error: bad result: &quot; + result;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112967</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-28 17:35:18 -0700</bug_when>
    <thetext>Attachment 257713 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:156:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:158:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:160:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:212:  The parameter name &quot;variant&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 22 in 49 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>1112968</commentid>
    <comment_count>28</comment_count>
      <attachid>257713</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-28 17:36:35 -0700</bug_when>
    <thetext>Comment on attachment 257713
OMG it&apos;s a 58x speed-up

I didn&apos;t mean to mark this r? yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112984</commentid>
    <comment_count>29</comment_count>
      <attachid>257713</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-07-28 18:23:45 -0700</bug_when>
    <thetext>Comment on attachment 257713
OMG it&apos;s a 58x speed-up

Attachment 257713 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/4577683656671232

Number of test failures exceeded the failure limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112985</commentid>
    <comment_count>30</comment_count>
      <attachid>257715</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-07-28 18:23:50 -0700</bug_when>
    <thetext>Created attachment 257715
Archive of layout-test-results from ews103 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112990</commentid>
    <comment_count>31</comment_count>
      <attachid>257713</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-07-28 18:35:02 -0700</bug_when>
    <thetext>Comment on attachment 257713
OMG it&apos;s a 58x speed-up

Attachment 257713 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/6266533516935168

Number of test failures exceeded the failure limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112991</commentid>
    <comment_count>32</comment_count>
      <attachid>257717</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-07-28 18:35:07 -0700</bug_when>
    <thetext>Created attachment 257717
Archive of layout-test-results from ews105 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews105  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113170</commentid>
    <comment_count>33</comment_count>
      <attachid>257768</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-29 14:26:09 -0700</bug_when>
    <thetext>Created attachment 257768
passing more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113196</commentid>
    <comment_count>34</comment_count>
      <attachid>257778</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-29 15:37:10 -0700</bug_when>
    <thetext>Created attachment 257778
fix absence condition validation

And remove more dead code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113202</commentid>
    <comment_count>35</comment_count>
      <attachid>257781</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-29 16:15:53 -0700</bug_when>
    <thetext>Created attachment 257781
passing so many tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113286</commentid>
    <comment_count>36</comment_count>
      <attachid>257812</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-29 21:30:25 -0700</bug_when>
    <thetext>Created attachment 257812
fixed more bugs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113485</commentid>
    <comment_count>37</comment_count>
      <attachid>257851</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-30 14:07:56 -0700</bug_when>
    <thetext>Created attachment 257851
passing JSC tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113525</commentid>
    <comment_count>38</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-30 15:40:03 -0700</bug_when>
    <thetext>Performance so far.  Note that I have some microbenchmark regressions to look at.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r187605)
&quot;Adaptive&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r187605)

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.

                                                        TipOfTree                  Adaptive                                     
SunSpider:
   3d-cube                                            4.6193+-0.4241            4.6173+-0.3142        
   3d-morph                                           5.3265+-0.2625            5.1967+-0.1403          might be 1.0250x faster
   3d-raytrace                                        5.1626+-0.1744     ?      5.3983+-0.2012        ? might be 1.0457x slower
   access-binary-trees                                2.2131+-0.2604            2.0710+-0.0617          might be 1.0686x faster
   access-fannkuch                                    5.5886+-0.2619            5.4248+-0.1480          might be 1.0302x faster
   access-nbody                                       2.4626+-0.1168     ?      2.5122+-0.1906        ? might be 1.0201x slower
   access-nsieve                                      2.9914+-0.0537            2.9796+-0.0568        
   bitops-3bit-bits-in-byte                           1.4476+-0.0285     ?      1.4687+-0.0300        ? might be 1.0145x slower
   bitops-bits-in-byte                                3.2468+-0.0368     ?      3.2573+-0.1354        ?
   bitops-bitwise-and                                 2.0701+-0.0421            2.0426+-0.0496          might be 1.0135x faster
   bitops-nsieve-bits                                 2.9061+-0.0650     ?      3.1956+-0.8377        ? might be 1.0996x slower
   controlflow-recursive                              1.9943+-0.0312     ?      2.0454+-0.1181        ? might be 1.0256x slower
   crypto-aes                                         3.8182+-0.0499     ?      3.8812+-0.1234        ? might be 1.0165x slower
   crypto-md5                                         2.4956+-0.3584            2.4030+-0.0542          might be 1.0385x faster
   crypto-sha1                                        2.6584+-0.6234            2.3982+-0.1374          might be 1.1085x faster
   date-format-tofte                                  6.7519+-0.3216            6.3844+-0.1636          might be 1.0576x faster
   date-format-xparb                                  4.6660+-0.4783            4.4670+-0.2043          might be 1.0446x faster
   math-cordic                                        2.7815+-0.1494            2.7655+-0.0486        
   math-partial-sums                                  5.0549+-0.2882            4.8279+-0.1813          might be 1.0470x faster
   math-spectral-norm                                 1.8088+-0.0849     ?      1.8537+-0.0618        ? might be 1.0248x slower
   regexp-dna                                         6.1425+-0.1436            6.1330+-0.1995        
   string-base64                                      4.5883+-0.7176            4.4254+-0.3998          might be 1.0368x faster
   string-fasta                                       6.3585+-1.5756            5.7488+-0.2307          might be 1.1061x faster
   string-tagcloud                                    7.8803+-0.1241     ?      8.0861+-0.4959        ? might be 1.0261x slower
   string-unpack-code                                18.9592+-0.2673     ?     19.8291+-1.2568        ? might be 1.0459x slower
   string-validate-input                              4.6056+-0.2290            4.4280+-0.1447          might be 1.0401x faster

   &lt;arithmetic&gt;                                       4.5615+-0.0608            4.5323+-0.0580          might be 1.0064x faster

                                                        TipOfTree                  Adaptive                                     
LongSpider:
   3d-cube                                          781.1438+-12.1758    ?    788.0723+-21.3100       ?
   3d-morph                                        1487.4667+-5.3676     ?   1487.5267+-6.8380        ?
   3d-raytrace                                      621.7550+-2.2847          620.7495+-3.0772        
   access-binary-trees                              811.1824+-7.8156          806.2681+-5.5164        
   access-fannkuch                                  283.6971+-8.5959          279.0286+-3.3338          might be 1.0167x faster
   access-nbody                                     508.0830+-2.3538     ?    508.7104+-3.1607        ?
   access-nsieve                                    361.0101+-2.0913     ?    362.3283+-1.5993        ?
   bitops-3bit-bits-in-byte                          42.0715+-2.0793           41.1171+-1.6266          might be 1.0232x faster
   bitops-bits-in-byte                               81.6127+-3.2778           79.4235+-2.5846          might be 1.0276x faster
   bitops-nsieve-bits                               406.4989+-8.3946          402.4927+-5.2498        
   controlflow-recursive                            419.4960+-3.0812          416.8892+-1.5208        
   crypto-aes                                       582.9516+-4.5257          582.4740+-5.5528        
   crypto-md5                                       475.9110+-6.3881     ?    478.6185+-6.7434        ?
   crypto-sha1                                      624.0099+-9.9987          623.0769+-4.3869        
   date-format-tofte                                509.7210+-11.3070         493.4487+-8.5462          might be 1.0330x faster
   date-format-xparb                                626.0375+-2.2516     ?    648.7347+-73.1470       ? might be 1.0363x slower
   hash-map                                         151.4670+-1.1867     ?    153.6672+-3.4143        ? might be 1.0145x slower
   math-cordic                                      481.5949+-1.4584     ?    481.6936+-1.7854        ?
   math-partial-sums                                460.1578+-0.7810     ?    464.3350+-7.0472        ?
   math-spectral-norm                               545.2871+-0.9020     ?    545.3309+-1.0568        ?
   string-base64                                    350.5933+-5.3771          348.2313+-4.1255        
   string-fasta                                     355.6555+-3.6114          355.6117+-4.4138        
   string-tagcloud                                  176.1256+-1.3514     ?    181.8405+-6.7696        ? might be 1.0324x slower

   &lt;geometric&gt;                                      390.1004+-0.9735          389.6696+-2.2825          might be 1.0011x faster

                                                        TipOfTree                  Adaptive                                     
V8Spider:
   crypto                                            49.7838+-2.1920     ?     49.9388+-2.3672        ?
   deltablue                                         79.4367+-3.1490           78.8587+-1.8656        
   earley-boyer                                      39.5583+-0.9748     ?     40.4896+-1.3059        ? might be 1.0235x slower
   raytrace                                          29.0769+-0.5740           28.6049+-1.4495          might be 1.0165x faster
   regexp                                            62.3997+-2.8605     ?     70.5702+-20.7702       ? might be 1.1309x slower
   richards                                          69.1912+-2.0287     ?     69.4009+-1.6388        ?
   splay                                             35.4365+-1.8812           34.5102+-3.2850          might be 1.0268x faster

   &lt;geometric&gt;                                       49.1567+-0.6120     ?     49.7066+-1.9707        ? might be 1.0112x slower

                                                        TipOfTree                  Adaptive                                     
Octane:
   encrypt                                           0.19130+-0.00066    ?     0.19135+-0.00037       ?
   decrypt                                           3.34255+-0.06326          3.33672+-0.04680       
   deltablue                                x2       0.15256+-0.00157    ?     0.15328+-0.00270       ?
   earley                                            0.30207+-0.00348          0.30028+-0.00191       
   boyer                                             4.19236+-0.13866          4.14824+-0.14232         might be 1.0106x faster
   navier-stokes                            x2       4.90298+-0.00724    ?     4.91604+-0.01562       ?
   raytrace                                 x2       1.02128+-0.03372    ?     1.02830+-0.06121       ?
   richards                                 x2       0.09901+-0.00148          0.09880+-0.00087       
   splay                                    x2       0.33268+-0.00286    ?     0.33533+-0.00263       ?
   regexp                                   x2      25.38155+-0.64297    ?    25.75572+-0.85975       ? might be 1.0147x slower
   pdfjs                                    x2      37.77166+-0.37494         37.54305+-0.56389       
   mandreel                                 x2      44.30029+-0.65248         44.08082+-0.43609       
   gbemu                                    x2      33.70240+-0.61546    ?    33.86129+-0.60479       ?
   closure                                           0.55220+-0.00427    ?     0.55472+-0.00354       ?
   jquery                                            7.05821+-0.04746    ?     7.09195+-0.03579       ?
   box2d                                    x2       9.97939+-0.06772    ?    10.12206+-0.08841       ? might be 1.0143x slower
   zlib                                     x2     387.92212+-13.44063   ?   390.64252+-12.37582      ?
   typescript                               x2     657.91361+-10.37668       652.76383+-15.58996      

   &lt;geometric&gt;                                       5.59012+-0.02852    ?     5.60360+-0.02940       ? might be 1.0024x slower

                                                        TipOfTree                  Adaptive                                     
Kraken:
   ai-astar                                          237.830+-1.056            236.707+-1.919         
   audio-beat-detection                               83.230+-0.223      !      85.308+-0.472         ! definitely 1.0250x slower
   audio-dft                                          97.385+-2.209             95.866+-1.299           might be 1.0158x faster
   audio-fft                                          55.090+-1.154      ?      56.395+-1.822         ? might be 1.0237x slower
   audio-oscillator                                   61.028+-1.219      ?      61.854+-1.111         ? might be 1.0135x slower
   imaging-darkroom                                   96.855+-1.179      ^      95.205+-0.322         ^ definitely 1.0173x faster
   imaging-desaturate                                 53.821+-2.759             51.433+-3.653           might be 1.0464x faster
   imaging-gaussian-blur                              86.640+-5.443      ?      86.758+-5.012         ?
   json-parse-financial                               38.102+-0.989      ?      39.171+-1.470         ? might be 1.0281x slower
   json-stringify-tinderbox                           22.622+-0.714      ?      22.811+-0.684         ?
   stanford-crypto-aes                                42.634+-1.073      ?      43.362+-0.872         ? might be 1.0171x slower
   stanford-crypto-ccm                                39.468+-1.113      ?      40.134+-3.105         ? might be 1.0169x slower
   stanford-crypto-pbkdf2                             93.477+-0.346      ?      93.729+-0.203         ?
   stanford-crypto-sha256-iterative                   36.691+-0.965             35.727+-0.175           might be 1.0270x faster

   &lt;arithmetic&gt;                                       74.634+-0.629             74.604+-0.626           might be 1.0004x faster

                                                        TipOfTree                  Adaptive                                     
JSRegress:
   abc-forward-loop-equal                            28.6636+-0.3036     ?     28.7794+-0.3465        ?
   abc-postfix-backward-loop                         29.3296+-1.1625     ?     29.8837+-1.5305        ? might be 1.0189x slower
   abc-simple-backward-loop                          28.8717+-0.6681     ?     29.2138+-1.5135        ? might be 1.0118x slower
   abc-simple-forward-loop                           32.2845+-8.5735           28.7243+-0.6717          might be 1.1239x faster
   abc-skippy-loop                                   20.8477+-0.3880     ?     20.9388+-0.6212        ?
   abs-boolean                                        2.7128+-0.1218            2.6812+-0.1132          might be 1.0118x faster
   adapt-to-double-divide                            16.1355+-0.3257     ?     16.1674+-0.3093        ?
   aliased-arguments-getbyval                         1.1517+-0.0681     ?      1.2261+-0.1233        ? might be 1.0646x slower
   allocate-big-object                                2.4665+-0.2179     ?      2.6025+-0.3521        ? might be 1.0551x slower
   arguments-named-and-reflective                    11.1381+-0.5079           10.9393+-0.4219          might be 1.0182x faster
   arguments-out-of-bounds                            9.9111+-0.4737            9.7742+-0.4887          might be 1.0140x faster
   arguments-strict-mode                              9.9282+-0.8234     ?     10.0958+-0.9902        ? might be 1.0169x slower
   arguments                                          8.6400+-0.3460            8.4488+-0.2134          might be 1.0226x faster
   arity-mismatch-inlining                            0.8477+-0.0681            0.8160+-0.0385          might be 1.0388x faster
   array-access-polymorphic-structure                 6.1612+-0.4656            5.9999+-0.4811          might be 1.0269x faster
   array-nonarray-polymorhpic-access                 25.3004+-0.9484           24.7388+-0.6132          might be 1.0227x faster
   array-prototype-every                             73.8861+-0.8252     ?     75.9624+-1.4439        ? might be 1.0281x slower
   array-prototype-forEach                           73.0075+-1.6448     ?     74.3008+-1.0654        ? might be 1.0177x slower
   array-prototype-map                               82.2693+-3.3483     ?     82.6565+-0.3617        ?
   array-prototype-reduce                            70.6801+-0.6780     ?     71.0198+-0.8074        ?
   array-prototype-reduceRight                       70.4910+-1.2066     ?     70.6394+-2.0272        ?
   array-prototype-some                              74.2084+-1.5162     ?     75.0840+-0.5101        ? might be 1.0118x slower
   array-splice-contiguous                           21.6021+-0.8614           21.5867+-0.5021        
   array-with-double-add                              3.4509+-0.2769     ?      3.5318+-0.6326        ? might be 1.0234x slower
   array-with-double-increment                        3.0000+-0.0433     ?      3.0891+-0.1044        ? might be 1.0297x slower
   array-with-double-mul-add                          4.1120+-0.0590     ?      4.1296+-0.0898        ?
   array-with-double-sum                              3.1229+-0.0824     ?      3.1270+-0.0156        ?
   array-with-int32-add-sub                           5.7630+-0.1258     ?      6.1871+-1.0694        ? might be 1.0736x slower
   array-with-int32-or-double-sum                     3.1724+-0.0546     ?      3.1978+-0.0545        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     29.1735+-1.0479           29.0764+-1.0598        
   ArrayBuffer-DataView-alloc-long-lived             12.6346+-0.2917           12.5753+-0.4288        
   ArrayBuffer-Int32Array-byteOffset                  3.5267+-0.0635            3.5012+-0.0925        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     31.6101+-0.7920           31.5382+-0.7143        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.6685+-1.2740           20.1178+-0.5657          might be 1.0274x faster
   ArrayBuffer-Int8Array-alloc-long-lived            12.1139+-0.3044     ?     12.1307+-0.4383        ?
   ArrayBuffer-Int8Array-alloc                        9.5345+-0.3254     ?      9.7273+-0.3935        ? might be 1.0202x slower
   asmjs_bool_bug                                     7.4093+-0.2086     ?      7.8170+-1.5421        ? might be 1.0550x slower
   assign-custom-setter-polymorphic                   2.6746+-0.0642     !      9.8872+-0.8793        ! definitely 3.6966x slower
   assign-custom-setter                               3.3783+-0.0905     !     20.9528+-1.3798        ! definitely 6.2022x slower
   basic-set                                          7.9431+-0.5477            7.5143+-0.2902          might be 1.0571x faster
   big-int-mul                                        3.3890+-0.0364     ?      3.4617+-0.1074        ? might be 1.0214x slower
   boolean-test                                       2.8844+-0.0355            2.8014+-0.0503          might be 1.0296x faster
   branch-fold                                        3.5968+-0.1083            3.5393+-0.0640          might be 1.0163x faster
   branch-on-string-as-boolean                       16.2110+-0.6495     ?     16.5423+-0.6174        ? might be 1.0204x slower
   by-val-generic                                     7.3732+-0.4463            7.2927+-0.5928          might be 1.0110x faster
   call-spread-apply                                 28.2214+-2.0117           27.1017+-1.6464          might be 1.0413x faster
   call-spread-call                                  21.7940+-0.9045     ?     22.5137+-1.5370        ? might be 1.0330x slower
   captured-assignments                               0.4091+-0.0460            0.3982+-0.0173          might be 1.0274x faster
   cast-int-to-double                                 5.0380+-0.0449     ?      5.2513+-0.5848        ? might be 1.0424x slower
   cell-argument                                      6.4428+-0.4825     ?      6.5090+-0.5853        ? might be 1.0103x slower
   cfg-simplify                                       2.7734+-0.0785            2.7074+-0.0361          might be 1.0244x faster
   chain-getter-access                                7.9632+-0.1174     ?      8.0197+-0.1402        ?
   cmpeq-obj-to-obj-other                            11.9469+-0.3865           11.5911+-0.6865          might be 1.0307x faster
   constant-test                                      4.7156+-0.0850     ?      4.7857+-0.1101        ? might be 1.0149x slower
   create-lots-of-functions                          10.8433+-2.3303            9.2683+-0.3368          might be 1.1699x faster
   cse-new-array-buffer                               2.2327+-0.1186     ?      2.2410+-0.0596        ?
   cse-new-array                                      2.2989+-0.0542            2.2856+-0.1127        
   DataView-custom-properties                        34.8639+-0.8424     ?     35.2685+-1.1218        ? might be 1.0116x slower
   delay-tear-off-arguments-strictmode               12.4345+-0.2755     ?     12.5212+-0.3334        ?
   deltablue-varargs                                148.7791+-1.6170     ?    149.9564+-2.3082        ?
   destructuring-arguments                          162.7688+-2.4811     ?    166.9583+-10.1834       ? might be 1.0257x slower
   destructuring-parameters-overridden-by-function   
                                                      0.5118+-0.0809     ?      0.5374+-0.0711        ? might be 1.0500x slower
   destructuring-swap                                 4.7239+-0.2498            4.6018+-0.0292          might be 1.0265x faster
   direct-arguments-getbyval                          1.1790+-0.0532     ?      1.1942+-0.0814        ? might be 1.0128x slower
   div-boolean-double                                 5.3957+-0.2232            5.3085+-0.0694          might be 1.0164x faster
   div-boolean                                        8.0489+-0.0926     ?      8.0648+-0.0538        ?
   double-get-by-val-out-of-bounds                    3.9609+-0.0712     ?      4.0282+-0.1182        ? might be 1.0170x slower
   double-pollution-getbyval                          8.8355+-0.5354     ?      8.8590+-0.3778        ?
   double-pollution-putbyoffset                       3.7761+-0.1005     ?      3.8222+-0.0765        ? might be 1.0122x slower
   double-real-use                                   26.3426+-2.0368     ?     28.4450+-5.5679        ? might be 1.0798x slower
   double-to-int32-typed-array-no-inline              2.0411+-0.0378            2.0128+-0.0613          might be 1.0141x faster
   double-to-int32-typed-array                        1.7653+-0.0452     ?      1.7875+-0.1303        ? might be 1.0125x slower
   double-to-uint32-typed-array-no-inline             2.0815+-0.0498     ?      2.0863+-0.0480        ?
   double-to-uint32-typed-array                       1.8372+-0.0577            1.8198+-0.0366        
   elidable-new-object-dag                           33.5136+-0.5546     ?     34.3744+-1.7512        ? might be 1.0257x slower
   elidable-new-object-roflcopter                    33.2262+-1.1015     ?     33.9949+-1.3305        ? might be 1.0231x slower
   elidable-new-object-then-call                     31.4548+-1.1963     ?     31.5133+-1.1143        ?
   elidable-new-object-tree                          35.7080+-0.3374     ?     36.8626+-1.5649        ? might be 1.0323x slower
   empty-string-plus-int                              4.6251+-0.1094     ?      4.7104+-0.3808        ? might be 1.0184x slower
   emscripten-cube2hash                              25.4968+-1.0434     ?     28.7761+-5.8199        ? might be 1.1286x slower
   exit-length-on-plain-object                       13.0568+-0.8698           12.9199+-0.5493          might be 1.0106x faster
   external-arguments-getbyval                        1.2406+-0.0798            1.2172+-0.0436          might be 1.0192x faster
   external-arguments-putbyval                        2.1590+-0.0585     ?      2.2480+-0.1230        ? might be 1.0413x slower
   fixed-typed-array-storage-var-index                1.2295+-0.0982            1.1553+-0.0218          might be 1.0642x faster
   fixed-typed-array-storage                          0.8476+-0.0299     ?      0.8708+-0.0374        ? might be 1.0274x slower
   Float32Array-matrix-mult                           4.1297+-0.5240            4.1116+-0.4966        
   Float32Array-to-Float64Array-set                  46.3646+-0.8792     ?     48.2498+-1.7349        ? might be 1.0407x slower
   Float64Array-alloc-long-lived                     75.7845+-2.1264     ?     77.0388+-1.9262        ? might be 1.0166x slower
   Float64Array-to-Int16Array-set                    57.0330+-0.8686     ?     58.0069+-1.7486        ? might be 1.0171x slower
   fold-double-to-int                                12.9717+-0.6168           12.7483+-0.2409          might be 1.0175x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.6876+-0.7119           10.1901+-0.4543          might be 1.0488x faster
   fold-get-by-id-to-multi-get-by-offset              8.6353+-0.4710     ?      9.0087+-0.6952        ? might be 1.0432x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.4194+-0.4178            7.5130+-1.0939          might be 1.1207x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.9902+-0.5865            7.6838+-0.2292          might be 1.0399x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.7399+-0.5529            7.3689+-0.3610          might be 1.0503x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.5110+-0.1995     ?      4.5717+-0.5964        ? might be 1.0134x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.7987+-0.8476            8.3987+-0.4798          might be 1.0476x faster
   fold-put-by-id-to-multi-put-by-offset              8.2701+-0.4216     ?      8.4134+-0.7904        ? might be 1.0173x slower
   fold-put-structure                                 5.2879+-0.5057            4.7682+-0.6395          might be 1.1090x faster
   for-of-iterate-array-entries                      11.3014+-0.5616           11.0322+-0.2773          might be 1.0244x faster
   for-of-iterate-array-keys                          3.4248+-0.2417            3.3993+-0.2935        
   for-of-iterate-array-values                        3.4708+-0.3852            3.3016+-0.1481          might be 1.0513x faster
   fround                                            18.6487+-0.6299     ?     18.9576+-0.5793        ? might be 1.0166x slower
   ftl-library-inlining-dataview                     57.3069+-2.3456     ?     57.8158+-2.6357        ?
   ftl-library-inlining                             107.0020+-0.7762     ?    107.0547+-0.6294        ?
   function-dot-apply                                 2.0058+-0.1378            1.9820+-0.0628          might be 1.0120x faster
   function-test                                      2.6477+-0.1026     ?      2.7302+-0.2456        ? might be 1.0312x slower
   function-with-eval                                92.7821+-1.8527           92.2350+-2.0514        
   gcse-poly-get-less-obvious                        14.1954+-0.2703           14.0573+-0.3864        
   gcse-poly-get                                     14.7201+-0.9989           14.0186+-0.1734          might be 1.0500x faster
   gcse                                               3.7992+-0.1393            3.7917+-0.0650        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.5738+-0.0449     !      2.7875+-0.0494        ! definitely 1.0830x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7198+-0.2258     !     10.1746+-0.1487        ! definitely 1.7788x slower
   get-by-id-chain-from-try-block                     5.5675+-0.3424            5.4482+-0.1801          might be 1.0219x faster
   get-by-id-check-structure-elimination              4.6979+-0.8712            4.4482+-0.2554          might be 1.0561x faster
   get-by-id-proto-or-self                           15.7513+-0.8786     ?     16.2369+-3.6862        ? might be 1.0308x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0360+-0.1057     ?      3.3167+-0.1863        ? might be 1.0925x slower
   get-by-id-self-or-proto                           14.5896+-0.7252     ?     15.2358+-1.2726        ? might be 1.0443x slower
   get-by-val-out-of-bounds                           3.8134+-0.1397     ?      3.9787+-0.2795        ? might be 1.0434x slower
   get_callee_monomorphic                             2.2690+-0.1532            2.1674+-0.1334          might be 1.0469x faster
   get_callee_polymorphic                             3.4572+-0.4772            3.3247+-0.2253          might be 1.0398x faster
   getter-no-activation                               4.7446+-0.0684            4.7086+-0.1085        
   getter-prototype                                  10.5387+-1.9840            9.7930+-0.2846          might be 1.0761x faster
   getter-richards                                  123.4040+-4.0896     ^    102.8457+-9.9160        ^ definitely 1.1999x faster
   getter                                             5.2867+-0.2957     ?      5.5695+-0.4702        ? might be 1.0535x slower
   global-var-const-infer-fire-from-opt               0.9167+-0.0614     ?      0.9508+-0.0405        ? might be 1.0373x slower
   global-var-const-infer                             0.8296+-0.1782            0.7192+-0.0307          might be 1.1535x faster
   HashMap-put-get-iterate-keys                      26.9833+-0.5403     ?     31.3082+-8.8017        ? might be 1.1603x slower
   HashMap-put-get-iterate                           26.0661+-1.6239     ?     26.5822+-1.5198        ? might be 1.0198x slower
   HashMap-string-put-get-iterate                    24.2545+-0.9683           23.3170+-0.2971          might be 1.0402x faster
   hoist-make-rope                                    8.5766+-1.0242     ?      8.6717+-0.5620        ? might be 1.0111x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.7181+-1.3384            4.5857+-0.5993          might be 1.0289x faster
   hoist-poly-check-structure                         3.2655+-0.1223     ?      3.2935+-0.2204        ?
   imul-double-only                                   7.0196+-0.2924     ?      7.1530+-0.5063        ? might be 1.0190x slower
   imul-int-only                                      9.2288+-0.7766            9.0310+-0.8303          might be 1.0219x faster
   imul-mixed                                         7.4592+-1.4967            6.8933+-0.5591          might be 1.0821x faster
   in-four-cases                                     17.3451+-0.4732     ?     17.4107+-0.3440        ?
   in-one-case-false                                  9.2902+-0.3620     ?      9.4762+-0.4578        ? might be 1.0200x slower
   in-one-case-true                                   9.3185+-0.4161            9.0942+-0.1575          might be 1.0247x faster
   in-two-cases                                       9.6662+-0.3946            9.4649+-0.2789          might be 1.0213x faster
   indexed-properties-in-objects                      2.7593+-0.0332     ?      2.9369+-0.4877        ? might be 1.0644x slower
   infer-closure-const-then-mov-no-inline             3.1932+-0.0860     ?      3.2695+-0.2072        ? might be 1.0239x slower
   infer-closure-const-then-mov                      17.9458+-1.0063           16.9921+-0.7970          might be 1.0561x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.3404+-0.1362           10.3175+-0.1576        
   infer-closure-const-then-put-to-scope             21.1562+-0.7089           21.0119+-0.5560        
   infer-closure-const-then-reenter-no-inline   
                                                     49.2666+-0.3388     ?     49.6322+-0.9545        ?
   infer-closure-const-then-reenter                  22.3357+-1.8734           22.0723+-1.0267          might be 1.0119x faster
   infer-constant-global-property                     3.6177+-0.4743            3.3724+-0.0805          might be 1.0727x faster
   infer-constant-property                            2.6155+-0.0674            2.5680+-0.0204          might be 1.0185x faster
   infer-one-time-closure-ten-vars                    8.4598+-0.5966            8.2515+-0.5917          might be 1.0252x faster
   infer-one-time-closure-two-vars                    7.7204+-0.3239            7.6956+-0.2450        
   infer-one-time-closure                             7.9403+-0.6371            7.7902+-0.4518          might be 1.0193x faster
   infer-one-time-deep-closure                       13.9745+-2.7331           13.7100+-3.2597          might be 1.0193x faster
   inline-arguments-access                            3.7982+-0.4408            3.7479+-0.4462          might be 1.0134x faster
   inline-arguments-aliased-access                    3.8649+-0.7537            3.5381+-0.0686          might be 1.0924x faster
   inline-arguments-local-escape                      3.8758+-0.2076     ?      4.3405+-0.8123        ? might be 1.1199x slower
   inline-get-scoped-var                              4.5300+-0.0733     ?      4.7096+-0.2711        ? might be 1.0397x slower
   inlined-put-by-id-transition                      10.4407+-0.6997     ?     10.6057+-0.6302        ? might be 1.0158x slower
   int-or-other-abs-then-get-by-val                   4.9198+-0.4721     ?      5.4646+-1.5169        ? might be 1.1107x slower
   int-or-other-abs-zero-then-get-by-val             16.6591+-0.4899           15.9414+-0.3322          might be 1.0450x faster
   int-or-other-add-then-get-by-val                   4.2557+-0.3067            3.9673+-0.0569          might be 1.0727x faster
   int-or-other-add                                   4.9488+-0.2048            4.8189+-0.0504          might be 1.0269x faster
   int-or-other-div-then-get-by-val                   3.7061+-0.1693            3.6644+-0.0694          might be 1.0114x faster
   int-or-other-max-then-get-by-val                   4.0355+-0.1257     ?      4.3797+-0.4665        ? might be 1.0853x slower
   int-or-other-min-then-get-by-val                   4.1406+-0.0880     ?      4.1725+-0.0640        ?
   int-or-other-mod-then-get-by-val                   3.6225+-0.3372            3.4471+-0.1002          might be 1.0509x faster
   int-or-other-mul-then-get-by-val                   3.6038+-0.1600            3.5533+-0.0545          might be 1.0142x faster
   int-or-other-neg-then-get-by-val                   4.4337+-0.0907            4.4180+-0.1163        
   int-or-other-neg-zero-then-get-by-val             16.4442+-1.8142           15.9183+-0.7973          might be 1.0330x faster
   int-or-other-sub-then-get-by-val                   3.9532+-0.0782     ?      4.0205+-0.0479        ? might be 1.0170x slower
   int-or-other-sub                                   4.2274+-2.2646            3.3440+-0.0362          might be 1.2642x faster
   int-overflow-local                                 4.1909+-0.0682            4.1613+-0.0808        
   Int16Array-alloc-long-lived                       47.5739+-1.2675     ?     48.0203+-1.5671        ?
   Int16Array-bubble-sort-with-byteLength            19.0885+-0.7002           18.7055+-0.3747          might be 1.0205x faster
   Int16Array-bubble-sort                            20.0246+-1.3442           18.9355+-0.4286          might be 1.0575x faster
   Int16Array-load-int-mul                            1.4412+-0.0629            1.4021+-0.0198          might be 1.0279x faster
   Int16Array-to-Int32Array-set                      42.0087+-0.4799     ?     42.3774+-1.0217        ?
   Int32Array-alloc-large                            12.2949+-0.4945           11.8431+-0.5310          might be 1.0381x faster
   Int32Array-alloc-long-lived                       57.5802+-1.8002           57.5562+-1.8987        
   Int32Array-alloc                                   2.9159+-0.3476            2.8664+-0.1931          might be 1.0173x faster
   Int32Array-Int8Array-view-alloc                    6.1444+-0.3726            5.9382+-0.0976          might be 1.0347x faster
   int52-spill                                        4.6702+-0.5355            4.5351+-0.1797          might be 1.0298x faster
   Int8Array-alloc-long-lived                        43.7195+-1.7260     ?     43.7538+-2.1350        ?
   Int8Array-load-with-byteLength                     3.3568+-0.0417     ?      3.5455+-0.3102        ? might be 1.0562x slower
   Int8Array-load                                     3.3023+-0.0269     ?      3.3341+-0.0530        ?
   integer-divide                                    10.2420+-0.1753     ?     10.3115+-0.3249        ?
   integer-modulo                                     1.7951+-0.1741            1.6781+-0.0497          might be 1.0697x faster
   is-boolean-fold-tricky                             3.6845+-0.0492            3.6815+-0.0404        
   is-boolean-fold                                    2.6580+-0.1225            2.6220+-0.0354          might be 1.0137x faster
   is-function-fold-tricky-internal-function   
                                                      9.7993+-0.0442     ?      9.9168+-0.0814        ? might be 1.0120x slower
   is-function-fold-tricky                            4.2568+-0.3678            4.1094+-0.0770          might be 1.0359x faster
   is-function-fold                                   2.6664+-0.1395     ?      2.7624+-0.3528        ? might be 1.0360x slower
   is-number-fold-tricky                              4.0328+-0.1229            3.9942+-0.0865        
   is-number-fold                                     2.8178+-0.2678            2.6117+-0.0943          might be 1.0789x faster
   is-object-or-null-fold-functions                   2.6384+-0.0700            2.6020+-0.0360          might be 1.0140x faster
   is-object-or-null-fold-less-tricky                 4.1414+-0.1578            4.0220+-0.0509          might be 1.0297x faster
   is-object-or-null-fold-tricky                      5.1470+-0.2822            4.9774+-0.1345          might be 1.0341x faster
   is-object-or-null-fold                             2.6189+-0.0371     ?      3.0324+-0.6326        ? might be 1.1579x slower
   is-object-or-null-trickier-function                4.1136+-0.1315     ?      4.2384+-0.4801        ? might be 1.0303x slower
   is-object-or-null-trickier-internal-function   
                                                     10.0602+-0.0967           10.0282+-0.0365        
   is-object-or-null-tricky-function                  4.1246+-0.1262            4.0343+-0.0458          might be 1.0224x faster
   is-object-or-null-tricky-internal-function   
                                                      7.8245+-0.2830     ?      7.9946+-0.3071        ? might be 1.0217x slower
   is-string-fold-tricky                              3.9841+-0.1105            3.9786+-0.1023        
   is-string-fold                                     2.6787+-0.2078            2.6494+-0.0945          might be 1.0111x faster
   is-undefined-fold-tricky                           3.4807+-0.3486            3.3146+-0.0456          might be 1.0501x faster
   is-undefined-fold                                  2.5878+-0.0457     ?      2.7630+-0.5016        ? might be 1.0677x slower
   large-int-captured                                 3.8756+-0.0897     ?      3.9800+-0.2142        ? might be 1.0269x slower
   large-int-neg                                     13.6461+-0.3528           13.6065+-0.1688        
   large-int                                         13.2536+-0.2570     ?     13.3144+-0.4503        ?
   load-varargs-elimination                          21.0111+-0.8115     ?     21.0404+-0.2875        ?
   logical-not-weird-types                            2.9490+-0.3236            2.8607+-0.0798          might be 1.0309x faster
   logical-not                                        4.0573+-0.0644     ?      4.2365+-0.2867        ? might be 1.0442x slower
   lots-of-fields                                     9.4109+-0.2375     ?      9.5437+-0.7058        ? might be 1.0141x slower
   make-indexed-storage                               2.8715+-0.2325            2.7984+-0.3583          might be 1.0261x faster
   make-rope-cse                                      3.5838+-0.0861     ?      3.6282+-0.2434        ? might be 1.0124x slower
   marsaglia-larger-ints                             33.4193+-1.2192           32.8129+-1.3696          might be 1.0185x faster
   marsaglia-osr-entry                               21.2196+-1.0511     ?     21.4191+-0.7543        ?
   math-with-out-of-bounds-array-values              21.4572+-0.3421           20.9445+-0.3799          might be 1.0245x faster
   max-boolean                                        2.4596+-0.1427            2.4482+-0.0992        
   method-on-number                                  16.1738+-1.0358     ?     16.3706+-1.2619        ? might be 1.0122x slower
   min-boolean                                        2.4252+-0.0411     ?      2.4258+-0.0508        ?
   minus-boolean-double                               3.1005+-0.0991            3.0510+-0.0632          might be 1.0162x faster
   minus-boolean                                      2.3173+-0.0486     ?      2.3382+-0.1358        ?
   misc-strict-eq                                    31.2285+-1.6700     ?     31.6536+-2.1209        ? might be 1.0136x slower
   mod-boolean-double                                11.4886+-1.1582           11.1188+-0.2862          might be 1.0333x faster
   mod-boolean                                        8.1659+-0.0401     ?      8.1735+-0.0530        ?
   mul-boolean-double                                 3.6369+-0.1820            3.6188+-0.2153        
   mul-boolean                                        2.7400+-0.0518     ?      2.7466+-0.0425        ?
   neg-boolean                                        3.1353+-0.1398            3.0209+-0.0416          might be 1.0379x faster
   negative-zero-divide                               0.3473+-0.0572            0.3312+-0.0280          might be 1.0488x faster
   negative-zero-modulo                               0.3295+-0.0420     ?      0.3462+-0.0804        ? might be 1.0504x slower
   negative-zero-negate                               0.3065+-0.0255            0.2973+-0.0118          might be 1.0309x faster
   nested-function-parsing                           44.5765+-1.1270           44.0473+-1.1525          might be 1.0120x faster
   new-array-buffer-dead                             88.0514+-1.4205           87.8051+-0.4104        
   new-array-buffer-push                              6.3704+-0.4851            6.3697+-0.5664        
   new-array-dead                                    15.0146+-1.2015           14.3078+-1.1026          might be 1.0494x faster
   new-array-push                                     6.4416+-0.4921            6.0780+-0.1209          might be 1.0598x faster
   no-inline-constructor                             32.6570+-1.6503           32.0035+-0.8180          might be 1.0204x faster
   number-test                                        2.7985+-0.0397     ?      2.8446+-0.0648        ? might be 1.0165x slower
   object-closure-call                                4.8488+-0.1246     ?      4.9190+-0.1935        ? might be 1.0145x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.0564+-0.1747            3.9995+-0.2937          might be 1.0142x faster
   object-test                                        2.5784+-0.0376     ?      2.6183+-0.1793        ? might be 1.0155x slower
   obvious-sink-pathology-taken                      99.9159+-2.0988           99.5206+-1.3875        
   obvious-sink-pathology                            94.5744+-1.1330     ?     94.9219+-0.9332        ?
   obviously-elidable-new-object                     27.0456+-1.8210     ?     27.6380+-1.5904        ? might be 1.0219x slower
   plus-boolean-arith                                 2.5092+-0.3592            2.3519+-0.0803          might be 1.0669x faster
   plus-boolean-double                                3.0844+-0.1114     ?      3.1628+-0.1399        ? might be 1.0254x slower
   plus-boolean                                       2.5214+-0.0339     ?      2.5255+-0.0534        ?
   poly-chain-access-different-prototypes-simple   
                                                      2.7784+-0.0998     !      3.2971+-0.1213        ! definitely 1.1867x slower
   poly-chain-access-different-prototypes             2.4840+-0.0444     !      2.9540+-0.2052        ! definitely 1.1892x slower
   poly-chain-access-simpler                          2.8042+-0.2878     !      3.1774+-0.0660        ! definitely 1.1331x slower
   poly-chain-access                                  2.4746+-0.0396     !      3.2710+-0.1366        ! definitely 1.3218x slower
   poly-stricteq                                     49.8067+-0.6190     ?     50.1938+-0.7048        ?
   polymorphic-array-call                             1.2627+-0.0802            1.2412+-0.0602          might be 1.0174x faster
   polymorphic-get-by-id                              2.8521+-0.0945     ?      3.0221+-0.3755        ? might be 1.0596x slower
   polymorphic-put-by-id                             25.5405+-1.3840           24.3660+-0.7384          might be 1.0482x faster
   polymorphic-structure                             13.0146+-0.3310     ?     13.0847+-0.1325        ?
   polyvariant-monomorphic-get-by-id                  6.6203+-0.5675            6.3339+-0.7091          might be 1.0452x faster
   proto-getter-access                                7.9343+-0.1908     ?      8.1456+-0.3951        ? might be 1.0266x slower
   prototype-access-with-mutating-prototype         351.7904+-1.7535     ^      5.1399+-0.1730        ^ definitely 68.4437x faster
   put-by-id-replace-and-transition                   7.7849+-0.5053     ?      7.8482+-0.6954        ?
   put-by-id-slightly-polymorphic                     2.7456+-0.0613     ?      2.7489+-0.0620        ?
   put-by-id                                          9.9476+-0.6289     ?     10.1498+-1.0503        ? might be 1.0203x slower
   put-by-val-direct                                  0.3759+-0.1182            0.3151+-0.0029          might be 1.1932x faster
   put-by-val-large-index-blank-indexing-type   
                                                     11.8308+-0.3935     ?     12.6003+-0.8176        ? might be 1.0650x slower
   put-by-val-machine-int                             2.4815+-0.1233     ?      2.8072+-0.7685        ? might be 1.1312x slower
   rare-osr-exit-on-local                            14.4332+-0.3871           14.2678+-0.3395          might be 1.0116x faster
   register-pressure-from-osr                        16.0638+-0.2714     ?     16.2747+-0.6610        ? might be 1.0131x slower
   repeat-multi-get-by-offset                        20.6750+-0.2064     ?     20.7538+-0.5312        ?
   setter-prototype                                   7.6235+-0.2735     ?      7.6678+-0.5336        ?
   setter                                             5.6305+-0.4597            5.3180+-0.4525          might be 1.0588x faster
   simple-activation-demo                            24.4511+-0.5446           24.3002+-0.7269        
   simple-getter-access                              10.4116+-0.3918     ?     10.4442+-0.5801        ?
   simple-poly-call-nested                            8.9312+-0.5607            8.6057+-0.5026          might be 1.0378x faster
   simple-poly-call                                   1.2294+-0.0381            1.2177+-0.0350        
   sin-boolean                                       18.1641+-1.7614     ?     19.2746+-1.8698        ? might be 1.0611x slower
   singleton-scope                                   55.3509+-0.8763     ?     55.9382+-0.6020        ? might be 1.0106x slower
   sink-function                                      9.8286+-0.5301            9.7428+-0.6604        
   sink-huge-activation                              16.2479+-0.7669           15.7999+-0.3747          might be 1.0284x faster
   sinkable-new-object-dag                           55.9018+-2.1166           55.2126+-1.0371          might be 1.0125x faster
   sinkable-new-object-taken                         41.8918+-0.8264     ?     42.0367+-1.2116        ?
   sinkable-new-object                               29.1692+-0.2451     ?     29.4102+-1.0222        ?
   slow-array-profile-convergence                     2.5619+-0.0758     ?      2.6657+-0.4503        ? might be 1.0405x slower
   slow-convergence                                   2.3686+-0.0871            2.3660+-0.0307        
   slow-ternaries                                    16.3352+-0.4204           16.1968+-0.3219        
   sorting-benchmark                                 17.1375+-0.9135           16.7754+-0.3842          might be 1.0216x faster
   sparse-conditional                                 1.2215+-0.2774            1.1471+-0.0539          might be 1.0649x faster
   splice-to-remove                                  11.8257+-0.3158     ?     12.0729+-0.6339        ? might be 1.0209x slower
   string-char-code-at                               14.0776+-0.3377           14.0496+-0.3029        
   string-concat-object                               2.2905+-0.1411            2.2667+-0.0649          might be 1.0105x faster
   string-concat-pair-object                          2.1330+-0.2069            2.1235+-0.2186        
   string-concat-pair-simple                          9.6665+-0.8710            9.4567+-0.5402          might be 1.0222x faster
   string-concat-simple                               9.1582+-0.4230            8.9540+-0.1806          might be 1.0228x faster
   string-cons-repeat                                 6.6907+-0.5419            6.3697+-0.3520          might be 1.0504x faster
   string-cons-tower                                  6.9348+-0.4467            6.8894+-0.8117        
   string-equality                                   15.4838+-1.4412           15.0157+-0.3590          might be 1.0312x faster
   string-get-by-val-big-char                         6.4215+-0.0622     ?      6.5645+-0.3346        ? might be 1.0223x slower
   string-get-by-val-out-of-bounds-insane             3.2135+-0.0505     ?      3.2597+-0.0984        ? might be 1.0144x slower
   string-get-by-val-out-of-bounds                    4.0210+-0.1602     ?      4.0211+-0.1176        ?
   string-get-by-val                                  2.8532+-0.1435            2.7673+-0.0188          might be 1.0310x faster
   string-hash                                        1.8484+-0.0416     ?      1.9000+-0.1184        ? might be 1.0279x slower
   string-long-ident-equality                        12.7404+-0.5057           12.6399+-0.6240        
   string-out-of-bounds                              10.4863+-0.5185           10.4419+-0.2050        
   string-repeat-arith                               27.0098+-1.9095     ?     27.1653+-1.7619        ?
   string-sub                                        53.1845+-1.3861     ?     53.2865+-1.8306        ?
   string-test                                        2.6860+-0.0422     ?      2.7445+-0.0714        ? might be 1.0218x slower
   string-var-equality                               26.6074+-2.2339           25.8734+-0.5180          might be 1.0284x faster
   structure-hoist-over-transitions                   2.4499+-0.3098     ?      2.4540+-0.1526        ?
   substring-concat-weird                            36.0050+-1.4512           35.8964+-1.1817        
   substring-concat                                  38.7246+-0.7902     ?     39.2421+-1.6044        ? might be 1.0134x slower
   substring                                         45.2454+-1.2932           44.4405+-0.5824          might be 1.0181x faster
   switch-char-constant                               2.6363+-0.0508     ?      2.6445+-0.0626        ?
   switch-char                                        5.5087+-0.4611     ?      5.9192+-0.4909        ? might be 1.0745x slower
   switch-constant                                    8.2641+-0.4093     ?      9.0404+-0.8273        ? might be 1.0939x slower
   switch-string-basic-big-var                       15.4349+-0.4600     ?     15.6055+-0.4460        ? might be 1.0111x slower
   switch-string-basic-big                           14.5461+-0.2049     ?     15.0240+-0.4206        ? might be 1.0329x slower
   switch-string-basic-var                           13.3102+-0.4783           13.2080+-0.7068        
   switch-string-basic                               12.7876+-0.1794           12.7295+-0.2220        
   switch-string-big-length-tower-var                17.6442+-0.4205     ?     17.7734+-0.4886        ?
   switch-string-length-tower-var                    13.0135+-0.1692           12.8828+-0.1970          might be 1.0101x faster
   switch-string-length-tower                        11.6202+-0.2016     ?     11.6600+-0.2125        ?
   switch-string-short                               11.7506+-0.1958     ?     11.9377+-0.7186        ? might be 1.0159x slower
   switch                                            12.1676+-0.7959           12.0280+-0.6192          might be 1.0116x faster
   tear-off-arguments-simple                          2.9035+-0.0981     ?      2.9928+-0.1792        ? might be 1.0308x slower
   tear-off-arguments                                 4.1297+-0.1544            3.9821+-0.2878          might be 1.0371x faster
   temporal-structure                                13.2281+-0.6246           12.3163+-0.4357          might be 1.0740x faster
   to-int32-boolean                                  13.2150+-0.5114           12.9702+-0.1917          might be 1.0189x faster
   try-catch-get-by-val-cloned-arguments             14.5156+-1.0553           14.2218+-0.6460          might be 1.0207x faster
   try-catch-get-by-val-direct-arguments              6.3399+-0.0709            6.3264+-0.1071        
   try-catch-get-by-val-scoped-arguments              7.9604+-1.2546            7.4787+-0.4456          might be 1.0644x faster
   typed-array-get-set-by-val-profiling              27.1637+-1.0488     ?     27.6028+-0.2052        ? might be 1.0162x slower
   undefined-property-access                        233.7094+-10.0949    ^    220.4449+-0.6560        ^ definitely 1.0602x faster
   undefined-test                                     2.7587+-0.0386     ?      2.8605+-0.0729        ? might be 1.0369x slower
   unprofiled-licm                                   14.3959+-1.3724           13.8188+-0.2663          might be 1.0418x faster
   varargs-call                                      13.7848+-0.3728           13.7784+-0.1115        
   varargs-construct-inline                          22.9680+-1.0782           22.3769+-1.1650          might be 1.0264x faster
   varargs-construct                                 20.9712+-0.4106           20.1508+-0.7637          might be 1.0407x faster
   varargs-inline                                     8.4830+-0.3011     ?      8.5225+-0.3425        ?
   varargs-strict-mode                                8.8112+-0.0883     ?      9.1601+-0.6448        ? might be 1.0396x slower
   varargs                                            8.8678+-0.0621     ?      8.9950+-0.4031        ? might be 1.0143x slower
   weird-inlining-const-prop                          2.7414+-0.3864            2.7334+-0.1246        

   &lt;geometric&gt;                                        7.8987+-0.0188            7.8759+-0.0341          might be 1.0029x faster

                                                        TipOfTree                  Adaptive                                     
AsmBench:
   bigfib.cpp                                       451.6307+-2.4082     ?    454.1812+-4.1752        ?
   cray.c                                           440.1460+-101.8193        398.4875+-5.4730          might be 1.1045x faster
   dry.c                                            429.6557+-1.7161     ?    429.8030+-2.1985        ?
   FloatMM.c                                        682.1206+-3.0334          680.5926+-2.2657        
   gcc-loops.cpp                                   3398.7229+-4.7666     ?   3412.0628+-13.0031       ?
   n-body.c                                         821.1183+-1.0596     ?    822.3647+-4.4883        ?
   Quicksort.c                                      405.8761+-1.2643          403.5260+-4.0620        
   stepanov_container.cpp                          3559.1079+-54.0341    ?   3562.3343+-34.1752       ?
   Towers.c                                         232.3597+-1.2920     ?    242.8305+-12.1807       ? might be 1.0451x slower

   &lt;geometric&gt;                                      722.6528+-15.9040         719.6955+-3.8038          might be 1.0041x faster

                                                        TipOfTree                  Adaptive                                     
CompressionBench:
   huffman                                           59.3627+-1.6185     ?     59.5089+-1.8501        ?
   arithmetic-simple                                266.6227+-1.2777     ?    267.7437+-2.1781        ?
   arithmetic-precise                               244.5331+-1.9165          243.2857+-2.0613        
   arithmetic-complex-precise                       243.6890+-1.6756     ?    244.6880+-1.2672        ?
   arithmetic-precise-order-0                       276.8322+-2.0244          276.5964+-1.2721        
   arithmetic-precise-order-1                       305.6397+-0.8863          305.0024+-1.2424        
   arithmetic-precise-order-2                       350.0862+-1.5309     ?    353.1543+-5.7607        ?
   arithmetic-simple-order-1                        326.6050+-13.5172         320.2240+-1.0709          might be 1.0199x faster
   arithmetic-simple-order-2                        382.6626+-7.8548     ?    386.5146+-9.7357        ? might be 1.0101x slower
   lz-string                                        306.4259+-4.4282     !    322.0076+-10.8946       ! definitely 1.0508x slower

   &lt;geometric&gt;                                      252.8649+-1.5979     ?    254.1626+-0.7291        ? might be 1.0051x slower

                                                        TipOfTree                  Adaptive                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   51.9017+-0.1592     ?     51.9241+-0.2819        ? might be 1.0004x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113544</commentid>
    <comment_count>39</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-30 16:07:30 -0700</bug_when>
    <thetext>Looks like this change breaks custom setter/getter caching.  Should be easy to fix that.  Basically, a &quot;hit&quot; on a custom setter/getter actually requires a structure check, rather than an object property condition.  I think we just want an ObjectPropertyCondition that says &quot;ExactStructure&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113641</commentid>
    <comment_count>40</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-30 21:15:14 -0700</bug_when>
    <thetext>Latest performance numbers, after I fixed two bugs:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r187605)
&quot;Adaptive&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r187605)

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.

                                                        TipOfTree                  Adaptive                                     
SunSpider:
   3d-cube                                            4.3405+-0.1375     ?      4.4174+-0.4288        ? might be 1.0177x slower
   3d-morph                                           4.9715+-0.1731            4.9014+-0.1104          might be 1.0143x faster
   3d-raytrace                                        4.9716+-0.2378     ?      5.2073+-0.3705        ? might be 1.0474x slower
   access-binary-trees                                1.8412+-0.0525            1.8230+-0.1082        
   access-fannkuch                                    4.9543+-0.2183     ?      5.0070+-0.5812        ? might be 1.0106x slower
   access-nbody                                       2.3710+-0.0262     ?      2.3963+-0.0465        ? might be 1.0107x slower
   access-nsieve                                      2.8097+-0.0490     ?      2.9589+-0.4061        ? might be 1.0531x slower
   bitops-3bit-bits-in-byte                           1.4623+-0.1787            1.4102+-0.0431          might be 1.0370x faster
   bitops-bits-in-byte                                2.4177+-0.0791            2.3698+-0.0113          might be 1.0202x faster
   bitops-bitwise-and                                 2.2598+-0.5476            2.0284+-0.0365          might be 1.1141x faster
   bitops-nsieve-bits                                 2.7734+-0.2867            2.6802+-0.0958          might be 1.0348x faster
   controlflow-recursive                              1.8731+-0.1214            1.8047+-0.0209          might be 1.0379x faster
   crypto-aes                                         3.7638+-0.2152     ?      3.7698+-0.2866        ?
   crypto-md5                                         2.2712+-0.1132     ?      2.3574+-0.2109        ? might be 1.0379x slower
   crypto-sha1                                        2.1826+-0.2561            2.0297+-0.0241          might be 1.0754x faster
   date-format-tofte                                  6.2957+-0.3489     ?      6.3365+-0.2365        ?
   date-format-xparb                                  4.4730+-0.1230     ?      4.5116+-0.1620        ?
   math-cordic                                        2.7402+-0.1527            2.6666+-0.0929          might be 1.0276x faster
   math-partial-sums                                  5.0223+-0.1902            4.9394+-0.4522          might be 1.0168x faster
   math-spectral-norm                                 1.8878+-0.1876            1.6940+-0.0898          might be 1.1144x faster
   regexp-dna                                         6.0138+-0.1311     ?      6.2524+-0.2085        ? might be 1.0397x slower
   string-base64                                      4.6428+-0.8664            4.3226+-0.4220          might be 1.0741x faster
   string-fasta                                       5.5003+-0.0725            5.4376+-0.0602          might be 1.0115x faster
   string-tagcloud                                    9.3554+-2.8984            7.9436+-0.1146          might be 1.1777x faster
   string-unpack-code                                19.3846+-1.1821           18.4934+-0.4768          might be 1.0482x faster
   string-validate-input                              4.3625+-0.2767     ?      4.3854+-0.0500        ?

   &lt;arithmetic&gt;                                       4.4208+-0.1372            4.3132+-0.0344          might be 1.0249x faster

                                                        TipOfTree                  Adaptive                                     
LongSpider:
   3d-cube                                         1212.8121+-9.3397     ?   1213.3240+-6.7136        ?
   3d-morph                                        1496.3914+-2.9627     ?   1498.4756+-4.6954        ?
   3d-raytrace                                      622.5411+-8.4617          616.7606+-4.2106        
   access-binary-trees                              831.9980+-10.1137         830.8778+-6.7741        
   access-fannkuch                                  345.0103+-1.4532     ?    346.7039+-4.1750        ?
   access-nbody                                     672.7270+-2.1606     ?    674.3242+-3.2482        ?
   access-nsieve                                    580.3634+-9.6416     ?    587.7087+-12.8002       ? might be 1.0127x slower
   bitops-3bit-bits-in-byte                          84.0201+-1.1909     ?     84.4380+-2.4105        ?
   bitops-bits-in-byte                              145.0054+-2.0741          143.2141+-2.0737          might be 1.0125x faster
   bitops-nsieve-bits                               586.4235+-5.5586     ?    587.2652+-4.9645        ?
   controlflow-recursive                            400.7846+-1.3390          399.9923+-1.6578        
   crypto-aes                                       891.9073+-11.2728         885.7059+-4.2790        
   crypto-md5                                       529.1204+-1.7504     ?    530.9856+-0.8928        ?
   crypto-sha1                                      857.9565+-0.9171     ?    859.5070+-2.4165        ?
   date-format-tofte                                551.9672+-17.3763         539.3242+-5.5055          might be 1.0234x faster
   date-format-xparb                                641.7507+-28.9352         628.0892+-5.1942          might be 1.0218x faster
   hash-map                                         150.7532+-1.8200          149.9746+-0.6995        
   math-cordic                                      883.7861+-0.8105     ?    885.5474+-2.6253        ?
   math-partial-sums                                518.5377+-0.4819          518.4358+-0.8699        
   math-spectral-norm                               848.8582+-2.5595          847.0210+-1.2259        
   string-base64                                    336.9316+-3.8896          336.3076+-3.7293        
   string-fasta                                     410.3844+-5.2796          407.5646+-2.3949        
   string-tagcloud                                  176.5044+-3.5794          175.8569+-1.4238        

   &lt;geometric&gt;                                      489.8248+-1.9442          488.5416+-1.5532          might be 1.0026x faster

                                                        TipOfTree                  Adaptive                                     
V8Spider:
   crypto                                            41.3140+-0.4485     ?     42.3547+-0.8861        ? might be 1.0252x slower
   deltablue                                         59.3652+-1.3695     ?     61.5750+-1.6551        ? might be 1.0372x slower
   earley-boyer                                      37.5650+-1.4831     ?     37.6976+-1.3282        ?
   raytrace                                          20.2805+-0.7371     ?     20.8130+-0.9335        ? might be 1.0263x slower
   regexp                                            61.8472+-1.5250     ?     62.5482+-2.2520        ? might be 1.0113x slower
   richards                                          62.5890+-1.6368     ?     63.3208+-1.6085        ? might be 1.0117x slower
   splay                                             32.8887+-1.5602     ?     34.0994+-2.0680        ? might be 1.0368x slower

   &lt;geometric&gt;                                       42.1738+-0.3934     ?     43.0817+-0.6077        ? might be 1.0215x slower

                                                        TipOfTree                  Adaptive                                     
Octane:
   encrypt                                           0.23634+-0.00383          0.23608+-0.00352       
   decrypt                                           4.25456+-0.04384    ?     4.27078+-0.03430       ?
   deltablue                                x2       0.30511+-0.00322    ?     0.31014+-0.00725       ? might be 1.0165x slower
   earley                                            0.44003+-0.00351    ?     0.44151+-0.00612       ?
   boyer                                             5.27338+-0.01730    ?     5.40587+-0.19298       ? might be 1.0251x slower
   navier-stokes                            x2       6.35530+-0.11125          6.32848+-0.04141       
   raytrace                                 x2       1.85265+-0.05254    ?     1.87590+-0.04703       ? might be 1.0125x slower
   richards                                 x2       0.15851+-0.00133          0.15801+-0.00157       
   splay                                    x2       0.42254+-0.02149          0.40861+-0.02511         might be 1.0341x faster
   regexp                                   x2      25.57722+-0.49352    ^    24.64607+-0.37154       ^ definitely 1.0378x faster
   pdfjs                                    x2      37.93991+-0.19501         37.71138+-0.16264       
   mandreel                                 x2      79.47343+-0.42105    ?    80.11611+-1.02901       ?
   gbemu                                    x2      40.84271+-0.78898         40.53306+-0.38914       
   closure                                           0.55270+-0.00249    ?     0.55512+-0.00264       ?
   jquery                                            7.02711+-0.03806    ?     7.11471+-0.07767       ? might be 1.0125x slower
   box2d                                    x2      10.63699+-0.06486         10.59029+-0.04781       
   zlib                                     x2     493.39379+-14.96340   ?   510.51389+-8.41890       ? might be 1.0347x slower
   typescript                               x2     618.42306+-6.47855    ?   628.53499+-26.54682      ? might be 1.0164x slower

   &lt;geometric&gt;                                       7.20957+-0.05139    ?     7.21626+-0.04343       ? might be 1.0009x slower

                                                        TipOfTree                  Adaptive                                     
Kraken:
   ai-astar                                          274.780+-7.783            270.963+-6.730           might be 1.0141x faster
   audio-beat-detection                               91.525+-0.408      ?      91.708+-0.583         ?
   audio-dft                                         136.659+-2.606      ?     139.313+-4.013         ? might be 1.0194x slower
   audio-fft                                          62.165+-0.497             61.985+-0.375         
   audio-oscillator                                   70.353+-0.940      ?      70.539+-0.848         ?
   imaging-darkroom                                  121.820+-0.101      ?     123.824+-3.144         ? might be 1.0165x slower
   imaging-desaturate                                 91.702+-17.831            86.021+-3.153           might be 1.0660x faster
   imaging-gaussian-blur                             151.419+-1.679            150.812+-0.193         
   json-parse-financial                               37.268+-0.792      ?      38.195+-1.356         ? might be 1.0249x slower
   json-stringify-tinderbox                           21.863+-0.651      ?      22.122+-0.404         ? might be 1.0119x slower
   stanford-crypto-aes                                47.833+-1.601      ?      48.052+-0.902         ?
   stanford-crypto-ccm                                38.573+-3.010      ?      39.332+-2.978         ? might be 1.0197x slower
   stanford-crypto-pbkdf2                             98.924+-0.352      ?      98.978+-0.102         ?
   stanford-crypto-sha256-iterative                   39.577+-1.633             39.365+-0.923         

   &lt;arithmetic&gt;                                       91.747+-1.759             91.515+-0.537           might be 1.0025x faster

                                                        TipOfTree                  Adaptive                                     
JSRegress:
   abc-forward-loop-equal                            99.7306+-0.8030     ?     99.7383+-0.6684        ?
   abc-postfix-backward-loop                        103.7129+-0.7672          103.6982+-0.8487        
   abc-simple-backward-loop                         104.2098+-1.2946          103.7880+-0.6539        
   abc-simple-forward-loop                           96.7075+-0.9720           96.4468+-0.8519        
   abc-skippy-loop                                   50.5761+-0.7398     ?     50.5812+-0.7199        ?
   abs-boolean                                        2.3223+-0.0537     ?      2.3509+-0.2310        ? might be 1.0123x slower
   adapt-to-double-divide                            17.6049+-0.8285           17.3427+-0.5200          might be 1.0151x faster
   aliased-arguments-getbyval                         1.1599+-0.1951            1.1213+-0.1454          might be 1.0345x faster
   allocate-big-object                                2.2122+-0.1605     ?      2.3861+-0.1993        ? might be 1.0786x slower
   arguments-named-and-reflective                    27.1852+-0.6777           26.5341+-0.6668          might be 1.0245x faster
   arguments-out-of-bounds                           17.3575+-0.7414     ?     17.3663+-0.3389        ?
   arguments-strict-mode                             88.1617+-0.3648     !     90.9339+-1.8161        ! definitely 1.0314x slower
   arguments                                         24.8859+-1.6158           24.5900+-0.8418          might be 1.0120x faster
   arity-mismatch-inlining                            0.7667+-0.0463     ?      0.7832+-0.0528        ? might be 1.0216x slower
   array-access-polymorphic-structure                 6.0035+-0.2429     ?      6.0608+-0.4119        ?
   array-nonarray-polymorhpic-access                 24.5839+-0.2296           24.1494+-1.0836          might be 1.0180x faster
   array-prototype-every                             74.4476+-1.6440           73.7026+-1.8773          might be 1.0101x faster
   array-prototype-forEach                           72.6152+-1.1854     ?     73.1842+-2.6165        ?
   array-prototype-map                               81.0299+-1.7173           79.4760+-1.2707          might be 1.0196x faster
   array-prototype-reduce                            71.3740+-3.5399     ?     71.7377+-1.5387        ?
   array-prototype-reduceRight                       71.1108+-5.5331           68.5503+-0.9855          might be 1.0374x faster
   array-prototype-some                              75.5457+-2.5098           73.9687+-1.7826          might be 1.0213x faster
   array-splice-contiguous                           21.1529+-0.6096     ?     21.2787+-0.9916        ?
   array-with-double-add                              3.1166+-0.1984            2.9935+-0.0369          might be 1.0411x faster
   array-with-double-increment                        2.5196+-0.0640            2.5103+-0.0606        
   array-with-double-mul-add                          3.7470+-0.1671            3.6510+-0.0386          might be 1.0263x faster
   array-with-double-sum                              3.0482+-0.1197     ?      3.0496+-0.1382        ?
   array-with-int32-add-sub                           5.1873+-0.1592            5.0818+-0.0890          might be 1.0208x faster
   array-with-int32-or-double-sum                     3.1152+-0.1285            3.0908+-0.0755        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     29.2042+-0.9707           28.8742+-0.5435          might be 1.0114x faster
   ArrayBuffer-DataView-alloc-long-lived             12.7500+-0.3921           12.1316+-0.3625          might be 1.0510x faster
   ArrayBuffer-Int32Array-byteOffset                  3.6550+-0.3987            3.6240+-0.1871        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     30.6010+-0.3101     ?     31.8711+-1.1018        ? might be 1.0415x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.9788+-0.4883           19.8688+-0.4709        
   ArrayBuffer-Int8Array-alloc-long-lived            12.7780+-1.3379           12.3108+-0.5912          might be 1.0380x faster
   ArrayBuffer-Int8Array-alloc                        9.6894+-0.8633            9.5688+-0.5643          might be 1.0126x faster
   asmjs_bool_bug                                     7.0829+-0.1241     ?      7.2448+-0.1284        ? might be 1.0229x slower
   assign-custom-setter-polymorphic                   2.9312+-0.3831            2.4920+-0.1044          might be 1.1762x faster
   assign-custom-setter                               3.4733+-0.2068            3.2599+-0.0374          might be 1.0655x faster
   basic-set                                          6.9174+-0.0643            6.8970+-0.1545        
   big-int-mul                                        3.1725+-0.1177            3.1506+-0.0608        
   boolean-test                                       2.7893+-0.1085            2.7060+-0.0478          might be 1.0308x faster
   branch-fold                                        3.5696+-0.1481     ?      3.5819+-0.1787        ?
   branch-on-string-as-boolean                       33.1986+-0.4666     ?     33.7911+-2.0759        ? might be 1.0178x slower
   by-val-generic                                     7.0302+-0.0929     ?      7.0542+-0.1873        ?
   call-spread-apply                                 25.4904+-1.4125     ?     26.0495+-1.7348        ? might be 1.0219x slower
   call-spread-call                                  21.9901+-0.9124     ?     22.0092+-1.1284        ?
   captured-assignments                               0.3959+-0.0109     ?      0.4146+-0.0413        ? might be 1.0473x slower
   cast-int-to-double                                 4.7035+-0.0288     ?      4.7622+-0.1279        ? might be 1.0125x slower
   cell-argument                                     10.2004+-0.3806     ?     10.3606+-0.3636        ? might be 1.0157x slower
   cfg-simplify                                       2.6146+-0.0483     ?      2.6633+-0.0631        ? might be 1.0186x slower
   chain-getter-access                               11.3464+-0.2796     ?     11.6167+-0.4887        ? might be 1.0238x slower
   cmpeq-obj-to-obj-other                             7.4469+-0.2305     ?      7.5095+-0.1861        ?
   constant-test                                      4.7230+-0.3326            4.5959+-0.1710          might be 1.0276x faster
   create-lots-of-functions                           9.0721+-0.1862            8.9105+-0.3282          might be 1.0181x faster
   cse-new-array-buffer                               2.1112+-0.0647            2.0940+-0.1953        
   cse-new-array                                      2.1034+-0.1557     ?      2.2185+-0.1403        ? might be 1.0547x slower
   DataView-custom-properties                        35.1279+-0.4562           34.9171+-0.3656        
   delay-tear-off-arguments-strictmode               13.3616+-1.9274     ?     13.5189+-1.6929        ? might be 1.0118x slower
   deltablue-varargs                                156.8207+-7.5489          153.7687+-0.6881          might be 1.0198x faster
   destructuring-arguments                          168.8816+-1.7629     ?    169.2161+-0.6480        ?
   destructuring-parameters-overridden-by-function   
                                                      0.5030+-0.0470     ?      0.5036+-0.0577        ?
   destructuring-swap                                 4.4130+-0.1015     ?      4.4334+-0.0364        ?
   direct-arguments-getbyval                          1.2420+-0.5078            1.0230+-0.0865          might be 1.2141x faster
   div-boolean-double                                 5.0258+-0.5316            5.0228+-0.2047        
   div-boolean                                        7.8776+-0.1286            7.7378+-0.2281          might be 1.0181x faster
   double-get-by-val-out-of-bounds                    3.9550+-0.0843            3.9130+-0.1265          might be 1.0107x faster
   double-pollution-getbyval                          8.0963+-0.1983     ?      8.1951+-0.5124        ? might be 1.0122x slower
   double-pollution-putbyoffset                       3.7327+-0.4210            3.5760+-0.0634          might be 1.0438x faster
   double-real-use                                   33.0268+-3.1830           32.1383+-2.0046          might be 1.0276x faster
   double-to-int32-typed-array-no-inline              1.8458+-0.1242            1.7979+-0.0551          might be 1.0267x faster
   double-to-int32-typed-array                        1.7582+-0.3110            1.6048+-0.0563          might be 1.0956x faster
   double-to-uint32-typed-array-no-inline             1.8334+-0.0095     ?      1.8551+-0.0620        ? might be 1.0118x slower
   double-to-uint32-typed-array                       1.6995+-0.0631     ?      1.7175+-0.0418        ? might be 1.0106x slower
   elidable-new-object-dag                          209.1774+-1.0493     ?    209.5011+-0.6542        ?
   elidable-new-object-roflcopter                    97.1274+-0.7615     ?     97.3868+-1.3210        ?
   elidable-new-object-then-call                    110.3305+-0.8859     ?    110.8952+-0.6410        ?
   elidable-new-object-tree                         208.7938+-1.0991     ?    209.8851+-2.0359        ?
   empty-string-plus-int                              4.6119+-0.0852            4.5437+-0.0806          might be 1.0150x faster
   emscripten-cube2hash                              24.6801+-1.2931           24.0528+-0.7305          might be 1.0261x faster
   exit-length-on-plain-object                       13.1140+-1.1558           12.9058+-0.6707          might be 1.0161x faster
   external-arguments-getbyval                        1.1593+-0.1371            1.1429+-0.0634          might be 1.0144x faster
   external-arguments-putbyval                        2.0922+-0.0924            2.0358+-0.0457          might be 1.0277x faster
   fixed-typed-array-storage-var-index                1.1098+-0.0363            1.0913+-0.0505          might be 1.0169x faster
   fixed-typed-array-storage                          0.8137+-0.0210     ?      0.8312+-0.0535        ? might be 1.0215x slower
   Float32Array-matrix-mult                           3.8114+-0.0430     ?      3.8346+-0.0393        ?
   Float32Array-to-Float64Array-set                  46.2705+-1.0486     !     48.5458+-0.8211        ! definitely 1.0492x slower
   Float64Array-alloc-long-lived                     76.1982+-2.2498     ?     76.2630+-1.3128        ?
   Float64Array-to-Int16Array-set                    57.8716+-2.2513           55.8160+-0.8923          might be 1.0368x faster
   fold-double-to-int                                13.8660+-1.2231     ?     14.1093+-0.7351        ? might be 1.0176x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      6.4113+-0.1092     ?      6.4745+-0.2725        ?
   fold-get-by-id-to-multi-get-by-offset              5.3716+-0.0862     ?      5.4353+-0.2417        ? might be 1.0119x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      5.1993+-0.1661            5.1490+-0.1484        
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      5.0465+-0.0297            5.0325+-0.0609        
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      4.7739+-0.2893     ?      5.0501+-0.3037        ? might be 1.0579x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      3.5633+-0.1174     ?      3.6862+-0.3769        ? might be 1.0345x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      7.9737+-0.7375            7.7085+-0.1857          might be 1.0344x faster
   fold-put-by-id-to-multi-put-by-offset              5.7559+-0.3748            5.6482+-0.3232          might be 1.0191x faster
   fold-put-structure                                 3.3575+-0.0638     ?      3.4097+-0.0851        ? might be 1.0155x slower
   for-of-iterate-array-entries                      11.0412+-0.3976           10.7847+-0.3180          might be 1.0238x faster
   for-of-iterate-array-keys                          3.1090+-0.3920            3.0296+-0.1616          might be 1.0262x faster
   for-of-iterate-array-values                        2.9574+-0.0632     ?      3.0994+-0.4050        ? might be 1.0480x slower
   fround                                            27.5412+-0.8617           26.8476+-0.8991          might be 1.0258x faster
   ftl-library-inlining-dataview                     56.7054+-0.9360           56.4664+-0.7759        
   ftl-library-inlining                             107.7832+-1.0131          101.5253+-6.8516          might be 1.0616x faster
   function-dot-apply                                 1.8791+-0.0483            1.8709+-0.0602        
   function-test                                      2.5116+-0.0865     ?      2.5880+-0.0652        ? might be 1.0304x slower
   function-with-eval                                86.2063+-1.2692     ?     88.4937+-1.5743        ? might be 1.0265x slower
   gcse-poly-get-less-obvious                        13.4067+-0.7086           13.2747+-0.2944        
   gcse-poly-get                                     13.3514+-0.2682     ?     13.6718+-0.7756        ? might be 1.0240x slower
   gcse                                               3.4843+-0.0266            3.4807+-0.0284        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.3852+-0.0493     ?      2.6005+-0.3304        ? might be 1.0903x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.8270+-0.3409            5.6541+-0.1198          might be 1.0306x faster
   get-by-id-chain-from-try-block                     5.5727+-0.1839            5.3726+-0.0328          might be 1.0372x faster
   get-by-id-check-structure-elimination              3.9046+-0.0353            3.8024+-0.1019          might be 1.0269x faster
   get-by-id-proto-or-self                           12.5350+-0.4029     ?     12.5525+-0.9697        ?
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.7154+-0.0492            2.6802+-0.0592          might be 1.0131x faster
   get-by-id-self-or-proto                           13.1263+-0.9241     ?     13.3116+-1.8068        ? might be 1.0141x slower
   get-by-val-out-of-bounds                           3.8281+-0.0703            3.8067+-0.0948        
   get_callee_monomorphic                             2.1851+-0.1819            2.0904+-0.2318          might be 1.0453x faster
   get_callee_polymorphic                             3.2652+-0.0678            3.1205+-0.1697          might be 1.0464x faster
   getter-no-activation                               3.9896+-0.1101            3.9574+-0.1477        
   getter-prototype                                  20.3695+-0.7271           20.2153+-0.8254        
   getter-richards                                   86.7419+-1.4241     ^     72.5133+-0.8649        ^ definitely 1.1962x faster
   getter                                             4.5108+-0.1394            4.4481+-0.1704          might be 1.0141x faster
   global-var-const-infer-fire-from-opt               0.8531+-0.1281            0.8222+-0.1762          might be 1.0375x faster
   global-var-const-infer                             0.7178+-0.0348     ?      0.7390+-0.0453        ? might be 1.0295x slower
   HashMap-put-get-iterate-keys                      21.6976+-0.8835           21.6267+-0.9976        
   HashMap-put-get-iterate                           20.6789+-0.4637     ?     20.8563+-0.7159        ?
   HashMap-string-put-get-iterate                    22.8465+-0.7820     ?     22.9178+-1.2367        ?
   hoist-make-rope                                   40.1345+-0.7536           40.0602+-0.7432        
   hoist-poly-check-structure-effectful-loop   
                                                      3.8219+-0.2885            3.7315+-0.0645          might be 1.0242x faster
   hoist-poly-check-structure                         2.8035+-0.0441     ?      2.8120+-0.0421        ?
   imul-double-only                                   8.7875+-0.1410     !      9.6396+-0.2820        ! definitely 1.0970x slower
   imul-int-only                                      9.0890+-0.3948            9.0693+-0.3692        
   imul-mixed                                        11.1552+-0.3497     ?     11.3132+-0.1485        ? might be 1.0142x slower
   in-four-cases                                     13.3040+-0.1261     ?     13.3894+-0.2485        ?
   in-one-case-false                                  7.3535+-0.0674     ?      7.5468+-0.5360        ? might be 1.0263x slower
   in-one-case-true                                   7.9445+-0.7562            7.4647+-0.3328          might be 1.0643x faster
   in-two-cases                                       7.8799+-0.3147            7.8236+-0.3648        
   indexed-properties-in-objects                      2.5678+-0.0584     ?      2.6033+-0.1060        ? might be 1.0138x slower
   infer-closure-const-then-mov-no-inline             2.4642+-0.0648     ?      2.4776+-0.0921        ?
   infer-closure-const-then-mov                      17.1192+-0.4309     ?     17.1651+-0.3336        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.5882+-0.3827           10.5207+-0.3714        
   infer-closure-const-then-put-to-scope             20.6727+-0.5482     ?     20.8421+-0.4678        ?
   infer-closure-const-then-reenter-no-inline   
                                                     49.6717+-1.0418           49.5778+-0.7843        
   infer-closure-const-then-reenter                  21.7500+-0.7848           21.4784+-0.5878          might be 1.0126x faster
   infer-constant-global-property                     3.3687+-0.2963     ?      3.3988+-0.4030        ?
   infer-constant-property                            2.2252+-0.1244            2.2176+-0.0832        
   infer-one-time-closure-ten-vars                   17.0707+-0.0634     ?     17.3020+-0.3314        ? might be 1.0136x slower
   infer-one-time-closure-two-vars                   17.0333+-0.2592     ?     17.3961+-0.9603        ? might be 1.0213x slower
   infer-one-time-closure                            17.5594+-0.5138     ?     18.2177+-1.3194        ? might be 1.0375x slower
   infer-one-time-deep-closure                       35.5244+-0.5936     ?     35.6965+-3.3424        ?
   inline-arguments-access                            3.7843+-0.6967     ?      3.8443+-0.3193        ? might be 1.0158x slower
   inline-arguments-aliased-access                    3.8191+-0.4790            3.7847+-0.1876        
   inline-arguments-local-escape                      3.6863+-0.1258     ?      3.7586+-0.1018        ? might be 1.0196x slower
   inline-get-scoped-var                              3.7845+-0.0708     ?      3.9287+-0.2447        ? might be 1.0381x slower
   inlined-put-by-id-transition                      10.1510+-0.2723     ?     10.5146+-0.5011        ? might be 1.0358x slower
   int-or-other-abs-then-get-by-val                   4.4528+-0.0886     ?      4.9704+-0.6805        ? might be 1.1162x slower
   int-or-other-abs-zero-then-get-by-val             16.3686+-2.1059           16.3387+-0.7415        
   int-or-other-add-then-get-by-val                   3.7640+-0.0193     ?      3.7965+-0.0824        ?
   int-or-other-add                                   4.5559+-0.0452     ?      4.6305+-0.1048        ? might be 1.0164x slower
   int-or-other-div-then-get-by-val                   3.6270+-0.1179            3.6171+-0.1781        
   int-or-other-max-then-get-by-val                   3.8460+-0.0448     ?      4.0586+-0.5324        ? might be 1.0553x slower
   int-or-other-min-then-get-by-val                   4.2425+-0.4345            4.2321+-0.2097        
   int-or-other-mod-then-get-by-val                   3.3685+-0.0922     ?      3.3693+-0.0968        ?
   int-or-other-mul-then-get-by-val                   3.4484+-0.0518     ?      3.4599+-0.0839        ?
   int-or-other-neg-then-get-by-val                   4.3010+-0.2523            4.2037+-0.0804          might be 1.0232x faster
   int-or-other-neg-zero-then-get-by-val             16.3313+-1.3332           15.7497+-0.4977          might be 1.0369x faster
   int-or-other-sub-then-get-by-val                   3.8669+-0.0908     ?      3.9324+-0.3667        ? might be 1.0169x slower
   int-or-other-sub                                   3.2053+-0.0335     ?      3.2435+-0.0647        ? might be 1.0119x slower
   int-overflow-local                                 4.0275+-0.1110     ?      4.2179+-0.4066        ? might be 1.0473x slower
   Int16Array-alloc-long-lived                       48.6661+-2.0557     ?     48.7664+-1.6658        ?
   Int16Array-bubble-sort-with-byteLength            16.7570+-1.0284           16.7527+-0.5168        
   Int16Array-bubble-sort                            16.1519+-0.4475     ?     16.3800+-0.3904        ? might be 1.0141x slower
   Int16Array-load-int-mul                            1.3368+-0.0538            1.3265+-0.1078        
   Int16Array-to-Int32Array-set                      43.2535+-1.5132     ?     44.4189+-0.8598        ? might be 1.0269x slower
   Int32Array-alloc-large                            12.8055+-0.8881           11.8575+-0.3547          might be 1.0799x faster
   Int32Array-alloc-long-lived                       58.0938+-1.5560     ?     59.7528+-0.5617        ? might be 1.0286x slower
   Int32Array-alloc                                   2.8979+-0.2817     ?      3.0966+-0.1154        ? might be 1.0686x slower
   Int32Array-Int8Array-view-alloc                    6.0151+-0.3191            5.9817+-0.3221        
   int52-spill                                        4.3510+-0.0837     ?      4.4869+-0.2476        ? might be 1.0312x slower
   Int8Array-alloc-long-lived                        42.4501+-0.5834     ?     43.4964+-1.2481        ? might be 1.0246x slower
   Int8Array-load-with-byteLength                     3.2351+-0.0828     ?      3.2421+-0.0843        ?
   Int8Array-load                                     3.2175+-0.0399     ?      3.3103+-0.0742        ? might be 1.0288x slower
   integer-divide                                     9.9785+-0.1711     ?     10.1988+-0.5698        ? might be 1.0221x slower
   integer-modulo                                     1.4656+-0.0623     ?      1.5032+-0.1019        ? might be 1.0257x slower
   is-boolean-fold-tricky                             3.1632+-0.1282            3.1215+-0.1263          might be 1.0133x faster
   is-boolean-fold                                    2.6504+-0.0194     ?      2.6610+-0.0821        ?
   is-function-fold-tricky-internal-function   
                                                      9.2040+-0.1681     ?      9.4558+-0.3076        ? might be 1.0274x slower
   is-function-fold-tricky                            3.3378+-0.0313     ?      3.5618+-0.4398        ? might be 1.0671x slower
   is-function-fold                                   2.6579+-0.0902     ?      2.6980+-0.1099        ? might be 1.0151x slower
   is-number-fold-tricky                              3.5181+-0.1444     ^      3.3092+-0.0459        ^ definitely 1.0631x faster
   is-number-fold                                     2.6937+-0.1320            2.6877+-0.0454        
   is-object-or-null-fold-functions                   2.8019+-0.3339            2.6978+-0.1149          might be 1.0386x faster
   is-object-or-null-fold-less-tricky                 3.4099+-0.1285            3.3941+-0.1502        
   is-object-or-null-fold-tricky                      4.5406+-0.2604            4.4068+-0.1768          might be 1.0304x faster
   is-object-or-null-fold                             2.6749+-0.0976     ?      2.7555+-0.1716        ? might be 1.0301x slower
   is-object-or-null-trickier-function                3.4389+-0.0758     ?      3.4623+-0.1382        ?
   is-object-or-null-trickier-internal-function   
                                                      9.4215+-0.1748     ?      9.7417+-0.4049        ? might be 1.0340x slower
   is-object-or-null-tricky-function                  3.4255+-0.0998     ?      3.4717+-0.1990        ? might be 1.0135x slower
   is-object-or-null-tricky-internal-function   
                                                      6.9891+-0.2929     ?      7.2497+-0.5707        ? might be 1.0373x slower
   is-string-fold-tricky                              3.3159+-0.1179     ?      3.3473+-0.0905        ?
   is-string-fold                                     2.6338+-0.1561     ?      2.7241+-0.2708        ? might be 1.0343x slower
   is-undefined-fold-tricky                           2.8237+-0.1170            2.7749+-0.0850          might be 1.0176x faster
   is-undefined-fold                                  2.6324+-0.0686     ?      2.7529+-0.3900        ? might be 1.0458x slower
   large-int-captured                                 3.7042+-0.3020            3.6562+-0.2551          might be 1.0131x faster
   large-int-neg                                     14.2061+-0.3046           14.1581+-0.2880        
   large-int                                         13.3129+-0.6209     ?     13.4707+-0.6382        ? might be 1.0119x slower
   load-varargs-elimination                          47.9227+-2.7193     ?     49.0135+-1.7750        ? might be 1.0228x slower
   logical-not-weird-types                            2.6812+-0.1830            2.6628+-0.0845        
   logical-not                                        4.0303+-0.5587     ?      4.0715+-0.5176        ? might be 1.0102x slower
   lots-of-fields                                     9.9257+-1.3355            9.1014+-0.3350          might be 1.0906x faster
   make-indexed-storage                               2.6544+-0.0395     ?      2.7302+-0.2903        ? might be 1.0285x slower
   make-rope-cse                                      3.6813+-0.3397     ?      3.6871+-0.3160        ?
   marsaglia-larger-ints                             69.9743+-0.8309           69.2394+-1.1649          might be 1.0106x faster
   marsaglia-osr-entry                               28.9804+-0.4898           28.5734+-0.3045          might be 1.0142x faster
   math-with-out-of-bounds-array-values              21.9584+-1.7157     ?     21.9633+-0.8162        ?
   max-boolean                                        2.1907+-0.0858     ?      2.3344+-0.3182        ? might be 1.0656x slower
   method-on-number                                  15.1962+-0.6990     ?     15.6505+-0.8418        ? might be 1.0299x slower
   min-boolean                                        2.2487+-0.1535     ?      2.3108+-0.2645        ? might be 1.0276x slower
   minus-boolean-double                               2.9926+-0.1774     ?      3.1161+-0.4595        ? might be 1.0413x slower
   minus-boolean                                      2.2248+-0.1199            2.1397+-0.1111          might be 1.0398x faster
   misc-strict-eq                                    36.0246+-0.4779     ?     37.0701+-1.9246        ? might be 1.0290x slower
   mod-boolean-double                                10.5075+-0.3468     ?     10.6806+-0.1642        ? might be 1.0165x slower
   mod-boolean                                        7.9781+-0.6694     ?      8.1728+-0.5064        ? might be 1.0244x slower
   mul-boolean-double                                 3.5446+-0.2426            3.4863+-0.1119          might be 1.0167x faster
   mul-boolean                                        2.7362+-0.2498            2.7192+-0.1496        
   neg-boolean                                        2.9285+-0.0681            2.8996+-0.0398        
   negative-zero-divide                               0.3297+-0.0259            0.3235+-0.0080          might be 1.0192x faster
   negative-zero-modulo                               0.3170+-0.0143     ?      0.3193+-0.0103        ?
   negative-zero-negate                               0.3191+-0.0490            0.2983+-0.0231          might be 1.0698x faster
   nested-function-parsing                           44.8020+-1.1916           43.7590+-1.2472          might be 1.0238x faster
   new-array-buffer-dead                             92.8015+-0.6518     ?     92.9358+-1.2804        ?
   new-array-buffer-push                              6.1507+-0.4658     ?      6.3782+-0.4581        ? might be 1.0370x slower
   new-array-dead                                    96.6737+-0.3442     ?     96.8649+-0.5511        ?
   new-array-push                                     6.1962+-0.4927     ?      6.3299+-0.2314        ? might be 1.0216x slower
   no-inline-constructor                             82.6478+-0.9366     ?     83.2417+-1.4254        ?
   number-test                                        2.7916+-0.2600            2.7103+-0.1155          might be 1.0300x faster
   object-closure-call                                4.5350+-0.0501     ?      4.6789+-0.2932        ? might be 1.0317x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.1220+-0.3078     ?      4.3387+-0.2052        ? might be 1.0526x slower
   object-test                                        2.4308+-0.0227     ?      2.4645+-0.0671        ? might be 1.0139x slower
   obvious-sink-pathology-taken                     125.8352+-0.7630     ?    137.0503+-27.6256       ? might be 1.0891x slower
   obvious-sink-pathology                           109.6307+-0.7650     ?    113.6355+-8.5455        ? might be 1.0365x slower
   obviously-elidable-new-object                    105.7632+-1.2984          105.0171+-0.6213        
   plus-boolean-arith                                 2.2165+-0.1153            2.1447+-0.1113          might be 1.0335x faster
   plus-boolean-double                                2.9473+-0.0515            2.9111+-0.0506          might be 1.0125x faster
   plus-boolean                                       2.1495+-0.0972     ?      2.2216+-0.1362        ? might be 1.0336x slower
   poly-chain-access-different-prototypes-simple   
                                                      2.3079+-0.1556     ?      2.5357+-0.0738        ? might be 1.0987x slower
   poly-chain-access-different-prototypes             2.4231+-0.1378     ?      2.5421+-0.0503        ? might be 1.0491x slower
   poly-chain-access-simpler                          2.2622+-0.0481     !      2.5522+-0.0474        ! definitely 1.1282x slower
   poly-chain-access                                  2.5029+-0.2125     ?      2.6156+-0.1068        ? might be 1.0450x slower
   poly-stricteq                                     49.6668+-0.5925     ?     50.4120+-1.6563        ? might be 1.0150x slower
   polymorphic-array-call                             1.1760+-0.0850     ?      1.2163+-0.1513        ? might be 1.0343x slower
   polymorphic-get-by-id                              2.8329+-0.2917            2.7417+-0.0976          might be 1.0333x faster
   polymorphic-put-by-id                             26.6209+-0.9823     ?     26.9917+-2.8188        ? might be 1.0139x slower
   polymorphic-structure                             12.9253+-0.4773           12.7559+-0.2905          might be 1.0133x faster
   polyvariant-monomorphic-get-by-id                  5.1167+-0.0831     ?      5.1592+-0.1285        ?
   proto-getter-access                               11.6356+-0.8575           11.3725+-0.1637          might be 1.0231x faster
   prototype-access-with-mutating-prototype         356.9255+-7.4976     ^      5.1820+-0.4876        ^ definitely 68.8784x faster
   put-by-id-replace-and-transition                   7.2360+-0.2671     ?      7.4335+-0.4441        ? might be 1.0273x slower
   put-by-id-slightly-polymorphic                     2.7153+-0.1194            2.6375+-0.0699          might be 1.0295x faster
   put-by-id                                          9.5641+-0.5806            9.3055+-0.4360          might be 1.0278x faster
   put-by-val-direct                                  0.3553+-0.1055            0.3153+-0.0086          might be 1.1270x faster
   put-by-val-large-index-blank-indexing-type   
                                                     12.1101+-0.5449     ?     12.3950+-1.2838        ? might be 1.0235x slower
   put-by-val-machine-int                             2.1932+-0.0806     ?      2.2212+-0.0955        ? might be 1.0128x slower
   rare-osr-exit-on-local                            13.1262+-0.5646     ?     13.1277+-0.3632        ?
   register-pressure-from-osr                        15.1930+-0.3329           15.1668+-0.6347        
   repeat-multi-get-by-offset                        21.1700+-0.7269           20.1706+-0.3552          might be 1.0495x faster
   setter-prototype                                  17.6530+-0.4557           17.3315+-0.3829          might be 1.0185x faster
   setter                                             4.7592+-0.3477            4.6274+-0.1935          might be 1.0285x faster
   simple-activation-demo                            23.5460+-0.8060     ?     25.7164+-5.7379        ? might be 1.0922x slower
   simple-getter-access                              17.9011+-0.4074     ?     18.5424+-0.6640        ? might be 1.0358x slower
   simple-poly-call-nested                            5.8394+-0.1160     ?      6.0624+-0.3380        ? might be 1.0382x slower
   simple-poly-call                                   1.0806+-0.0609     ?      1.1058+-0.0539        ? might be 1.0233x slower
   sin-boolean                                       28.7475+-0.4925     ?     29.9402+-3.7825        ? might be 1.0415x slower
   singleton-scope                                   54.2515+-0.8349     ?     55.4218+-2.2904        ? might be 1.0216x slower
   sink-function                                     14.6993+-0.6946     ?     14.7812+-0.4921        ?
   sink-huge-activation                              36.6010+-0.9767     ?     36.8706+-1.3778        ?
   sinkable-new-object-dag                          211.9999+-2.0439     ?    212.1885+-1.7499        ?
   sinkable-new-object-taken                        124.6370+-1.4034          124.0683+-0.5360        
   sinkable-new-object                              109.5222+-0.7396     ?    110.8204+-1.0415        ? might be 1.0119x slower
   slow-array-profile-convergence                     2.6105+-0.1996            2.5219+-0.0495          might be 1.0351x faster
   slow-convergence                                   2.4138+-0.2786            2.3056+-0.0472          might be 1.0469x faster
   slow-ternaries                                    30.2658+-0.4731           30.1412+-0.4025        
   sorting-benchmark                                 16.5682+-0.8765           16.2738+-0.7378          might be 1.0181x faster
   sparse-conditional                                 1.0993+-0.0516            1.0813+-0.0391          might be 1.0166x faster
   splice-to-remove                                  11.9867+-0.2782     ?     13.2209+-1.7076        ? might be 1.1030x slower
   string-char-code-at                               13.7805+-0.0418     ?     14.1652+-0.6953        ? might be 1.0279x slower
   string-concat-object                               2.3007+-0.1756            2.1915+-0.0998          might be 1.0498x faster
   string-concat-pair-object                          2.0253+-0.1267     ?      2.1393+-0.1441        ? might be 1.0563x slower
   string-concat-pair-simple                          9.2528+-0.4671            8.8160+-0.1175          might be 1.0496x faster
   string-concat-simple                               9.1462+-0.6424     ?      9.5130+-0.2633        ? might be 1.0401x slower
   string-cons-repeat                                 6.4023+-0.2482     ?      6.6958+-0.7371        ? might be 1.0458x slower
   string-cons-tower                                  6.4102+-0.0791     ?      6.8009+-0.6933        ? might be 1.0610x slower
   string-equality                                   14.7437+-0.3977           14.6506+-0.3691        
   string-get-by-val-big-char                         6.1937+-0.1135            6.0992+-0.1506          might be 1.0155x faster
   string-get-by-val-out-of-bounds-insane             3.1049+-0.0756     ?      3.3209+-0.2696        ? might be 1.0696x slower
   string-get-by-val-out-of-bounds                    3.7952+-0.9375            3.4028+-0.0267          might be 1.1153x faster
   string-get-by-val                                  2.5911+-0.1496            2.5590+-0.0829          might be 1.0126x faster
   string-hash                                        1.7406+-0.1205     ?      1.7410+-0.0839        ?
   string-long-ident-equality                        12.6304+-0.7010           12.2123+-0.2936          might be 1.0342x faster
   string-out-of-bounds                              17.2630+-0.5140           17.0765+-0.5017          might be 1.0109x faster
   string-repeat-arith                               26.3799+-0.6733     ?     26.9161+-0.4460        ? might be 1.0203x slower
   string-sub                                        53.8107+-1.7851           52.0907+-0.9369          might be 1.0330x faster
   string-test                                        2.7994+-0.3869            2.5788+-0.0721          might be 1.0855x faster
   string-var-equality                               25.6971+-0.3659           25.5155+-0.2749        
   structure-hoist-over-transitions                   2.4694+-0.5516            2.2416+-0.0933          might be 1.1016x faster
   substring-concat-weird                            35.7520+-1.6741     ?     36.1580+-1.0835        ? might be 1.0114x slower
   substring-concat                                  39.2165+-1.5832     ?     39.5662+-1.2145        ?
   substring                                         45.3551+-2.8482           45.1451+-1.1234        
   switch-char-constant                               2.3036+-0.2228            2.1825+-0.0477          might be 1.0555x faster
   switch-char                                        4.7552+-0.2468            4.7027+-0.1430          might be 1.0112x faster
   switch-constant                                    6.8533+-0.3366     ?      7.0160+-0.4220        ? might be 1.0237x slower
   switch-string-basic-big-var                       12.5696+-0.4172     ?     12.7087+-0.4224        ? might be 1.0111x slower
   switch-string-basic-big                           12.9447+-0.8430     ?     13.1544+-1.2532        ? might be 1.0162x slower
   switch-string-basic-var                           12.4618+-0.3006           12.3996+-0.4574        
   switch-string-basic                               12.1426+-0.7937           11.9205+-0.2787          might be 1.0186x faster
   switch-string-big-length-tower-var                18.5413+-1.2149     ?     18.8861+-1.2517        ? might be 1.0186x slower
   switch-string-length-tower-var                    12.9937+-0.7404           12.9550+-0.5489        
   switch-string-length-tower                        11.3564+-0.1774     ?     11.6091+-0.3387        ? might be 1.0223x slower
   switch-string-short                               11.4726+-0.4311           11.3023+-0.4035          might be 1.0151x faster
   switch                                            10.1627+-0.4441     ?     10.7825+-0.8837        ? might be 1.0610x slower
   tear-off-arguments-simple                          2.9274+-0.1565            2.8502+-0.1640          might be 1.0271x faster
   tear-off-arguments                                 3.8965+-0.1704     ?      3.9198+-0.4600        ?
   temporal-structure                                12.6459+-0.2838     ?     12.6751+-0.3651        ?
   to-int32-boolean                                  12.7039+-0.0815     ?     14.0315+-2.7201        ? might be 1.1045x slower
   try-catch-get-by-val-cloned-arguments             14.3306+-0.8927     ?     14.6135+-1.3817        ? might be 1.0197x slower
   try-catch-get-by-val-direct-arguments              6.6620+-0.6730            6.4211+-0.2406          might be 1.0375x faster
   try-catch-get-by-val-scoped-arguments              7.5050+-0.4363     ?      7.8643+-0.7650        ? might be 1.0479x slower
   typed-array-get-set-by-val-profiling              46.0825+-0.8925           45.7719+-0.5131        
   undefined-property-access                        394.3942+-7.3547          389.2532+-1.0704          might be 1.0132x faster
   undefined-test                                     2.7523+-0.1509            2.6624+-0.0758          might be 1.0337x faster
   unprofiled-licm                                   33.4836+-1.1180           33.0085+-0.2924          might be 1.0144x faster
   varargs-call                                      11.7970+-0.3454     ?     11.9053+-0.3110        ?
   varargs-construct-inline                          52.1591+-9.9052           48.6206+-1.5140          might be 1.0728x faster
   varargs-construct                                 20.2098+-0.9686           18.9304+-0.7578          might be 1.0676x faster
   varargs-inline                                     8.5925+-0.3300     ?      8.6802+-0.2772        ? might be 1.0102x slower
   varargs-strict-mode                                8.3530+-0.8871            8.0628+-0.1970          might be 1.0360x faster
   varargs                                            8.2650+-0.5339            8.2381+-0.2991        
   weird-inlining-const-prop                          1.8328+-0.0295     ?      1.9291+-0.0931        ? might be 1.0525x slower

   &lt;geometric&gt;                                        8.4239+-0.0266     ^      8.3260+-0.0195        ^ definitely 1.0117x faster

                                                        TipOfTree                  Adaptive                                     
AsmBench:
   bigfib.cpp                                       902.1175+-7.5630          900.7946+-3.8811        
   cray.c                                           484.0159+-1.7466     ?    484.4693+-0.8212        ?
   dry.c                                            861.0726+-4.8081     ?    863.7561+-11.6565       ?
   FloatMM.c                                       1408.3727+-7.6376         1406.6547+-4.3801        
   gcc-loops.cpp                                   8306.0623+-8.8850     ?   8310.3242+-14.3090       ?
   n-body.c                                        1299.9292+-2.8831     ?   1300.6829+-4.3360        ?
   Quicksort.c                                      714.2642+-2.2441     ?    715.9430+-1.8287        ?
   stepanov_container.cpp                          4673.4735+-11.6130    ?   4690.9571+-16.9341       ?
   Towers.c                                         375.6405+-2.5700          374.7922+-1.5921        

   &lt;geometric&gt;                                     1244.6530+-1.8513     ?   1245.5179+-1.5462        ? might be 1.0007x slower

                                                        TipOfTree                  Adaptive                                     
CompressionBench:
   huffman                                           59.1600+-1.2506           58.2310+-1.4503          might be 1.0160x faster
   arithmetic-simple                                433.7349+-1.9637     ?    433.8332+-0.5912        ?
   arithmetic-precise                               323.5143+-0.7452     ?    324.0337+-2.8154        ?
   arithmetic-complex-precise                       321.5895+-0.9835          320.8944+-0.6361        
   arithmetic-precise-order-0                       466.6235+-2.1515     ?    466.7831+-2.2326        ?
   arithmetic-precise-order-1                       360.2902+-7.0763          358.5236+-2.9588        
   arithmetic-precise-order-2                       385.7147+-3.8825     ?    389.1160+-5.3588        ?
   arithmetic-simple-order-1                        479.9261+-1.2106     ?    480.0532+-2.3004        ?
   arithmetic-simple-order-2                        532.2827+-0.4182     ?    532.3566+-0.9782        ?
   lz-string                                        308.8856+-4.3885     ?    311.4160+-9.1086        ?

   &lt;geometric&gt;                                      326.2328+-1.2997          326.1139+-1.2197          might be 1.0004x faster

                                                        TipOfTree                  Adaptive                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   61.5703+-0.3371           61.4276+-0.1416          might be 1.0023x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113659</commentid>
    <comment_count>41</comment_count>
      <attachid>257903</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-30 23:03:03 -0700</bug_when>
    <thetext>Created attachment 257903
more improvements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113680</commentid>
    <comment_count>42</comment_count>
      <attachid>257913</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-31 00:41:58 -0700</bug_when>
    <thetext>Created attachment 257913
almost ready

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r187605)
&quot;Adaptive&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r187605)

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.

                                                        TipOfTree                  Adaptive                                     
SunSpider:
   3d-cube                                            4.3808+-0.0541            4.3348+-0.1515          might be 1.0106x faster
   3d-morph                                           5.2231+-0.1460            5.1908+-0.1357        
   3d-raytrace                                        5.1523+-0.1026     ?      5.1960+-0.1363        ?
   access-binary-trees                                2.1122+-0.1311     ?      2.2259+-0.3614        ? might be 1.0538x slower
   access-fannkuch                                    5.5609+-0.2634            5.5455+-0.3071        
   access-nbody                                       2.4947+-0.1149     ?      2.5649+-0.2315        ? might be 1.0282x slower
   access-nsieve                                      3.0360+-0.1429            2.9742+-0.0265          might be 1.0208x faster
   bitops-3bit-bits-in-byte                           1.5018+-0.0925     ?      1.5290+-0.1590        ? might be 1.0181x slower
   bitops-bits-in-byte                                3.2546+-0.0701            3.1991+-0.0698          might be 1.0173x faster
   bitops-bitwise-and                                 2.0789+-0.1009     ?      2.1160+-0.3609        ? might be 1.0179x slower
   bitops-nsieve-bits                                 3.1007+-0.4141            2.9259+-0.0448          might be 1.0598x faster
   controlflow-recursive                              2.0495+-0.1283     ?      2.0497+-0.0860        ?
   crypto-aes                                         3.8739+-0.2369     ?      4.0400+-0.4830        ? might be 1.0429x slower
   crypto-md5                                         2.4109+-0.0852     ?      2.5465+-0.2717        ? might be 1.0563x slower
   crypto-sha1                                        2.3606+-0.1375     ?      2.4039+-0.0509        ? might be 1.0183x slower
   date-format-tofte                                  6.6738+-0.3949            6.6235+-0.1567        
   date-format-xparb                                  4.7190+-0.3976            4.6390+-0.2260          might be 1.0172x faster
   math-cordic                                        2.7303+-0.0425     ?      2.7817+-0.0817        ? might be 1.0188x slower
   math-partial-sums                                  5.0845+-0.2282     ?      5.2395+-0.1741        ? might be 1.0305x slower
   math-spectral-norm                                 1.9245+-0.2674     ?      2.0255+-0.5299        ? might be 1.0525x slower
   regexp-dna                                         6.1375+-0.1076     ?      6.2199+-0.4507        ? might be 1.0134x slower
   string-base64                                      4.2776+-0.1519            4.2572+-0.0602        
   string-fasta                                       5.7949+-0.4467            5.6986+-0.1502          might be 1.0169x faster
   string-tagcloud                                    8.3992+-0.8544            7.9413+-0.1787          might be 1.0577x faster
   string-unpack-code                                19.9737+-0.6904           19.7535+-1.0210          might be 1.0111x faster
   string-validate-input                              4.7013+-0.4286            4.5157+-0.1308          might be 1.0411x faster

   &lt;arithmetic&gt;                                       4.5772+-0.0694            4.5591+-0.0609          might be 1.0040x faster

                                                        TipOfTree                  Adaptive                                     
LongSpider:
   3d-cube                                          803.7170+-24.3443         779.3566+-17.4079         might be 1.0313x faster
   3d-morph                                        1567.5937+-56.2775        1542.6006+-46.7901         might be 1.0162x faster
   3d-raytrace                                      630.8180+-14.4795    ?    634.7878+-10.9843       ?
   access-binary-trees                              817.9562+-11.4179         813.7315+-14.0955       
   access-fannkuch                                  289.2943+-22.5959         285.4314+-8.6433          might be 1.0135x faster
   access-nbody                                     519.7572+-16.5092    ?    525.1617+-15.7677       ? might be 1.0104x slower
   access-nsieve                                    370.3897+-17.4074    ?    377.3108+-13.3382       ? might be 1.0187x slower
   bitops-3bit-bits-in-byte                          40.4178+-0.7968           40.4106+-1.0800        
   bitops-bits-in-byte                               82.0891+-3.6826     ?     82.2629+-2.2885        ?
   bitops-nsieve-bits                               410.4486+-13.0691    ?    420.3239+-11.8102       ? might be 1.0241x slower
   controlflow-recursive                            423.6414+-11.2773         418.5774+-4.5291          might be 1.0121x faster
   crypto-aes                                       591.7925+-12.5923         584.8023+-6.7298          might be 1.0120x faster
   crypto-md5                                       487.2883+-9.5790     ?    494.9983+-11.0244       ? might be 1.0158x slower
   crypto-sha1                                      636.2426+-14.3537    ?    646.1092+-5.3654        ? might be 1.0155x slower
   date-format-tofte                                505.3443+-10.3532         500.6196+-11.9117       
   date-format-xparb                                643.1280+-21.5852         634.1040+-14.8622         might be 1.0142x faster
   hash-map                                         153.2674+-3.1081          153.0030+-2.6024        
   math-cordic                                      490.2847+-12.7404    ?    490.7933+-12.0414       ?
   math-partial-sums                                478.9452+-11.8328         472.5522+-10.9981         might be 1.0135x faster
   math-spectral-norm                               561.9684+-14.5219    ?    563.0226+-16.4336       ?
   string-base64                                    355.6660+-6.6426          355.4392+-11.4278       
   string-fasta                                     363.0310+-9.9931          355.9754+-5.4096          might be 1.0198x faster
   string-tagcloud                                  177.2513+-1.5271     ?    183.9623+-18.3941       ? might be 1.0379x slower

   &lt;geometric&gt;                                      396.4147+-3.4597          396.1344+-3.2333          might be 1.0007x faster

                                                        TipOfTree                  Adaptive                                     
V8Spider:
   crypto                                            50.4405+-1.9502           49.2869+-1.3041          might be 1.0234x faster
   deltablue                                         77.7799+-2.4983           77.7612+-4.8694        
   earley-boyer                                      39.5403+-0.6068     ?     40.5252+-1.2512        ? might be 1.0249x slower
   raytrace                                          29.0553+-0.5178     ?     29.5962+-1.0872        ? might be 1.0186x slower
   regexp                                            62.5495+-2.2011     ?     67.1951+-3.5012        ? might be 1.0743x slower
   richards                                          68.0607+-2.8353     ?     70.4647+-2.8670        ? might be 1.0353x slower
   splay                                             34.9312+-2.4132           34.6285+-1.9660        

   &lt;geometric&gt;                                       48.8941+-0.8426     ?     49.7069+-0.5289        ? might be 1.0166x slower

                                                        TipOfTree                  Adaptive                                     
Octane:
   encrypt                                           0.19679+-0.00570    !     0.21259+-0.00559       ! definitely 1.0803x slower
   decrypt                                           3.45219+-0.08727    ?     3.47831+-0.20722       ?
   deltablue                                x2       0.15455+-0.00294    ?     0.15613+-0.00290       ? might be 1.0102x slower
   earley                                            0.30602+-0.00727    ?     0.30864+-0.00710       ?
   boyer                                             4.25825+-0.11755          4.13867+-0.08281         might be 1.0289x faster
   navier-stokes                            x2       5.00065+-0.12704    ?     5.09795+-0.15620       ? might be 1.0195x slower
   raytrace                                 x2       1.07395+-0.05847          1.05990+-0.06953         might be 1.0133x faster
   richards                                 x2       0.10161+-0.00243    ?     0.10289+-0.00353       ? might be 1.0126x slower
   splay                                    x2       0.33990+-0.01083    ?     0.34071+-0.00869       ?
   regexp                                   x2      25.57075+-0.81053         25.52920+-1.07648       
   pdfjs                                    x2      38.05185+-0.51413         37.45419+-0.61195         might be 1.0160x faster
   mandreel                                 x2      44.89250+-1.11826         44.83804+-1.14279       
   gbemu                                    x2      34.14590+-0.65217    ?    37.35606+-4.89970       ? might be 1.0940x slower
   closure                                           0.55964+-0.01056    ?     0.56299+-0.01148       ?
   jquery                                            7.16390+-0.15853    ?     7.21254+-0.13621       ?
   box2d                                    x2      10.06140+-0.17565    ?    10.36641+-0.24030       ? might be 1.0303x slower
   zlib                                     x2     383.89803+-15.74720   ?   392.38653+-6.63128       ? might be 1.0221x slower
   typescript                               x2     664.17651+-22.62491       662.25069+-14.35469      

   &lt;geometric&gt;                                       5.67828+-0.04381    ?     5.74818+-0.05393       ? might be 1.0123x slower

                                                        TipOfTree                  Adaptive                                     
Kraken:
   ai-astar                                          234.083+-8.682      ?     237.939+-3.921         ? might be 1.0165x slower
   audio-beat-detection                               84.142+-0.963      ^      58.653+-0.618         ^ definitely 1.4346x faster
   audio-dft                                          96.955+-2.592             95.035+-1.285           might be 1.0202x faster
   audio-fft                                          54.960+-0.441      ^      34.634+-0.134         ^ definitely 1.5869x faster
   audio-oscillator                                   60.427+-0.982      ?      61.506+-1.454         ? might be 1.0179x slower
   imaging-darkroom                                   96.735+-1.711      ^      60.290+-2.887         ^ definitely 1.6045x faster
   imaging-desaturate                                 56.548+-3.945             54.437+-3.931           might be 1.0388x faster
   imaging-gaussian-blur                              87.284+-5.180             83.618+-1.876           might be 1.0438x faster
   json-parse-financial                               38.516+-1.758             38.484+-1.530         
   json-stringify-tinderbox                           22.972+-1.377             21.893+-0.586           might be 1.0493x faster
   stanford-crypto-aes                                42.419+-0.544             42.104+-1.206         
   stanford-crypto-ccm                                39.397+-1.782             36.134+-2.019           might be 1.0903x faster
   stanford-crypto-pbkdf2                             95.075+-1.918             94.837+-1.613         
   stanford-crypto-sha256-iterative                   37.119+-1.707      ?      37.549+-2.664         ? might be 1.0116x slower

   &lt;arithmetic&gt;                                       74.759+-0.843      ^      68.365+-0.426         ^ definitely 1.0935x faster

                                                        TipOfTree                  Adaptive                                     
JSRegress:
   abc-forward-loop-equal                            29.9533+-1.5618     ?     30.0395+-0.9664        ?
   abc-postfix-backward-loop                         28.8273+-0.7667     ?     30.1623+-1.1413        ? might be 1.0463x slower
   abc-simple-backward-loop                          28.9465+-0.9426     ?     29.1605+-1.6676        ?
   abc-simple-forward-loop                           28.9453+-0.5782     ?     29.5963+-1.1073        ? might be 1.0225x slower
   abc-skippy-loop                                   21.4128+-1.1058           21.3022+-0.5183        
   abs-boolean                                        2.6968+-0.0731     ^      2.4237+-0.1077        ^ definitely 1.1127x faster
   adapt-to-double-divide                            16.7083+-0.7247           16.1913+-0.4797          might be 1.0319x faster
   aliased-arguments-getbyval                         1.1338+-0.0732     ?      1.2519+-0.1783        ? might be 1.1041x slower
   allocate-big-object                                2.5403+-0.4778     ?      2.5848+-0.3288        ? might be 1.0175x slower
   arguments-named-and-reflective                    10.7911+-0.4272     ?     11.1093+-0.4884        ? might be 1.0295x slower
   arguments-out-of-bounds                            9.8658+-0.2562            9.7773+-0.4098        
   arguments-strict-mode                              9.7797+-0.4040            9.3405+-0.1334          might be 1.0470x faster
   arguments                                          8.4497+-0.2137            8.3222+-0.1264          might be 1.0153x faster
   arity-mismatch-inlining                            0.8063+-0.0399            0.7996+-0.0323        
   array-access-polymorphic-structure                 5.9147+-0.0990     ?      6.0408+-0.1838        ? might be 1.0213x slower
   array-nonarray-polymorhpic-access                 24.9294+-0.7564     ?     25.1637+-0.8762        ?
   array-prototype-every                             74.1306+-1.1045     ?     76.6635+-2.2490        ? might be 1.0342x slower
   array-prototype-forEach                           75.0664+-3.4269           73.7537+-1.7482          might be 1.0178x faster
   array-prototype-map                               82.3730+-2.0901           81.9724+-0.8412        
   array-prototype-reduce                            70.6294+-1.1634     ?     72.3911+-1.1298        ? might be 1.0249x slower
   array-prototype-reduceRight                       71.0896+-2.2964           70.6728+-1.6609        
   array-prototype-some                              77.1927+-3.1637           76.4907+-1.7948        
   array-splice-contiguous                           21.8806+-1.1705           21.4031+-0.3987          might be 1.0223x faster
   array-with-double-add                              3.3587+-0.1142            3.3282+-0.0625        
   array-with-double-increment                        3.0773+-0.1726            3.0606+-0.2196        
   array-with-double-mul-add                          4.1171+-0.0674     ?      4.1551+-0.1330        ?
   array-with-double-sum                              3.1588+-0.1357     ?      3.2028+-0.1049        ? might be 1.0139x slower
   array-with-int32-add-sub                           5.8914+-0.1179            5.8209+-0.1132          might be 1.0121x faster
   array-with-int32-or-double-sum                     3.1655+-0.1096     ?      3.2023+-0.1645        ? might be 1.0116x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     29.1977+-0.8773     ?     29.6823+-0.9331        ? might be 1.0166x slower
   ArrayBuffer-DataView-alloc-long-lived             12.7096+-0.6667           12.3996+-0.4516          might be 1.0250x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5382+-0.0477     ?      3.6072+-0.1312        ? might be 1.0195x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     31.7179+-1.2394     ?     31.9955+-0.7332        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.1419+-0.3780     ?     20.7037+-1.8235        ? might be 1.0279x slower
   ArrayBuffer-Int8Array-alloc-long-lived            12.3564+-0.7003     ?     12.6117+-1.8143        ? might be 1.0207x slower
   ArrayBuffer-Int8Array-alloc                       10.1704+-1.2773            9.6978+-0.4935          might be 1.0487x faster
   asmjs_bool_bug                                     7.2979+-0.1020     ^      7.0506+-0.0557        ^ definitely 1.0351x faster
   assign-custom-setter-polymorphic                   2.7047+-0.1342     ^      2.4815+-0.0720        ^ definitely 1.0899x faster
   assign-custom-setter                               3.6995+-0.3617     ^      3.2646+-0.0698        ^ definitely 1.1332x faster
   basic-set                                          7.8832+-0.3671            7.7109+-0.1508          might be 1.0223x faster
   big-int-mul                                        3.3965+-0.0451     ?      3.5552+-0.4290        ? might be 1.0467x slower
   boolean-test                                       2.9032+-0.1488            2.8153+-0.1097          might be 1.0312x faster
   branch-fold                                        3.5577+-0.0504     ?      3.7073+-0.2325        ? might be 1.0421x slower
   branch-on-string-as-boolean                       16.1375+-0.8029     ?     16.2752+-0.5672        ?
   by-val-generic                                     7.2155+-0.2017            7.1386+-0.2953          might be 1.0108x faster
   call-spread-apply                                 27.9989+-1.2705           26.4787+-0.8432          might be 1.0574x faster
   call-spread-call                                  22.2526+-0.8994     ^     20.6533+-0.3223        ^ definitely 1.0774x faster
   captured-assignments                               0.3914+-0.0149     ?      0.4248+-0.0426        ? might be 1.0856x slower
   cast-int-to-double                                 5.0895+-0.0708     ?      5.1045+-0.2623        ?
   cell-argument                                      6.3292+-0.2713            6.2017+-0.3440          might be 1.0205x faster
   cfg-simplify                                       2.6884+-0.0361     ?      2.9207+-0.4324        ? might be 1.0864x slower
   chain-getter-access                                8.0675+-0.3353     ?      8.0733+-0.3160        ?
   cmpeq-obj-to-obj-other                            11.4651+-0.2738           11.2384+-0.8602          might be 1.0202x faster
   constant-test                                      4.7946+-0.0888            4.7659+-0.0411        
   create-lots-of-functions                           9.4802+-0.4497     ?      9.5278+-0.4479        ?
   cse-new-array-buffer                               2.2858+-0.0947            2.2765+-0.1062        
   cse-new-array                                      2.3459+-0.1227     ?      2.5636+-0.6333        ? might be 1.0928x slower
   DataView-custom-properties                        35.1452+-0.6898     ?     37.5854+-4.4306        ? might be 1.0694x slower
   delay-tear-off-arguments-strictmode               12.8369+-0.5993           12.6293+-1.0041          might be 1.0164x faster
   deltablue-varargs                                149.5232+-2.9283     ?    150.8802+-3.4729        ?
   destructuring-arguments                          162.4556+-2.5887          161.6713+-1.4254        
   destructuring-parameters-overridden-by-function   
                                                      0.5179+-0.0288            0.4940+-0.0263          might be 1.0484x faster
   destructuring-swap                                 4.7166+-0.1314            4.6800+-0.1419        
   direct-arguments-getbyval                          1.2145+-0.0518            1.1512+-0.0551          might be 1.0549x faster
   div-boolean-double                                 5.2732+-0.0783     ?      5.3327+-0.0700        ? might be 1.0113x slower
   div-boolean                                        8.1508+-0.2797            8.0939+-0.0672        
   double-get-by-val-out-of-bounds                    3.9027+-0.1283     ?      4.0395+-0.2654        ? might be 1.0350x slower
   double-pollution-getbyval                          8.5128+-0.0293     ?      8.8269+-0.3457        ? might be 1.0369x slower
   double-pollution-putbyoffset                       3.9209+-0.3910     ?      4.0286+-0.4875        ? might be 1.0275x slower
   double-real-use                                   27.9683+-1.0260           25.6420+-1.8172          might be 1.0907x faster
   double-to-int32-typed-array-no-inline              2.2340+-0.3869            2.2275+-0.3473        
   double-to-int32-typed-array                        1.7837+-0.0795            1.7334+-0.0572          might be 1.0290x faster
   double-to-uint32-typed-array-no-inline             2.1446+-0.1062            2.0913+-0.0372          might be 1.0255x faster
   double-to-uint32-typed-array                       1.8699+-0.1521     ?      1.8745+-0.1016        ?
   elidable-new-object-dag                           34.4497+-0.9047     ?     34.6320+-1.0848        ?
   elidable-new-object-roflcopter                    33.6725+-1.0597     ?     33.9674+-1.0491        ?
   elidable-new-object-then-call                     31.7717+-0.4983     ?     32.3498+-1.1901        ? might be 1.0182x slower
   elidable-new-object-tree                          36.1918+-0.7656           35.8836+-0.3143        
   empty-string-plus-int                              4.6593+-0.2649            4.6134+-0.2261        
   emscripten-cube2hash                              25.4928+-1.5150           25.4413+-1.3861        
   exit-length-on-plain-object                       12.6088+-0.4639     ?     13.2688+-0.8799        ? might be 1.0524x slower
   external-arguments-getbyval                        1.4044+-0.5421            1.1868+-0.0457          might be 1.1834x faster
   external-arguments-putbyval                        2.2110+-0.0512     ?      2.2183+-0.0581        ?
   fixed-typed-array-storage-var-index                1.1706+-0.0224            1.1419+-0.0619          might be 1.0251x faster
   fixed-typed-array-storage                          0.9187+-0.0589            0.8889+-0.1033          might be 1.0336x faster
   Float32Array-matrix-mult                           4.0061+-0.2617            3.8658+-0.0750          might be 1.0363x faster
   Float32Array-to-Float64Array-set                  46.2232+-1.9344     ?     47.7610+-1.7033        ? might be 1.0333x slower
   Float64Array-alloc-long-lived                     76.9366+-2.4105           75.5374+-1.2653          might be 1.0185x faster
   Float64Array-to-Int16Array-set                    58.0400+-1.3890           57.0935+-2.0424          might be 1.0166x faster
   fold-double-to-int                                13.0910+-0.5604           12.4568+-0.0843          might be 1.0509x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.3255+-0.8005            9.8193+-0.4988          might be 1.0516x faster
   fold-get-by-id-to-multi-get-by-offset              9.0087+-0.3956            8.8951+-0.2644          might be 1.0128x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.5755+-0.6053            8.3871+-0.7363          might be 1.0225x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.4878+-0.6475     ?      8.0677+-0.6173        ? might be 1.0775x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.4707+-0.4707     ?      7.6645+-0.6488        ? might be 1.0259x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.2248+-0.7467     ?      5.4498+-0.8796        ? might be 1.0431x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.7574+-0.5145     ?      9.4012+-0.6594        ? might be 1.0735x slower
   fold-put-by-id-to-multi-put-by-offset              8.4089+-0.3711     ?      8.7390+-0.5272        ? might be 1.0393x slower
   fold-put-structure                                 5.5827+-0.5086            5.4604+-0.1989          might be 1.0224x faster
   for-of-iterate-array-entries                      11.4097+-0.5165           10.9970+-0.1795          might be 1.0375x faster
   for-of-iterate-array-keys                          3.5728+-0.4516            3.3790+-0.2424          might be 1.0573x faster
   for-of-iterate-array-values                        3.3691+-0.2179     ?      3.8209+-0.6154        ? might be 1.1341x slower
   fround                                            19.2325+-0.6478     ?     19.3276+-1.4977        ?
   ftl-library-inlining-dataview                     57.3999+-0.6396           57.3056+-1.7202        
   ftl-library-inlining                             109.4663+-5.1507          107.7667+-1.1111          might be 1.0158x faster
   function-dot-apply                                 2.0778+-0.1288            2.0332+-0.1758          might be 1.0219x faster
   function-test                                      2.5981+-0.0543     ?      2.7951+-0.2810        ? might be 1.0758x slower
   function-with-eval                                95.6740+-2.9631     ?     96.2906+-3.0358        ?
   gcse-poly-get-less-obvious                        15.4349+-1.2486           14.1000+-0.3844          might be 1.0947x faster
   gcse-poly-get                                     13.9506+-0.4341     ?     14.1950+-1.0085        ? might be 1.0175x slower
   gcse                                               3.7239+-0.0415     ?      3.7280+-0.0417        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6040+-0.1213            2.5515+-0.1115          might be 1.0206x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.8088+-0.2588            5.7045+-0.2109          might be 1.0183x faster
   get-by-id-chain-from-try-block                     5.4697+-0.0955     ?      5.8308+-0.5233        ? might be 1.0660x slower
   get-by-id-check-structure-elimination              4.9384+-1.7315            4.3477+-0.1472          might be 1.1359x faster
   get-by-id-proto-or-self                           14.7067+-0.2983     ?     14.8065+-0.9734        ?
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0445+-0.0931     ?      3.1675+-0.4585        ? might be 1.0404x slower
   get-by-id-self-or-proto                           14.4115+-0.9800     ?     14.8477+-1.3652        ? might be 1.0303x slower
   get-by-val-out-of-bounds                           4.0557+-0.3032            3.9336+-0.0745          might be 1.0310x faster
   get_callee_monomorphic                             2.2613+-0.1512            2.2041+-0.1578          might be 1.0260x faster
   get_callee_polymorphic                             3.2883+-0.3207            3.2354+-0.0577          might be 1.0163x faster
   getter-no-activation                               4.7741+-0.1690            4.6890+-0.0757          might be 1.0182x faster
   getter-prototype                                   9.6720+-0.2233     ?      9.7686+-0.3078        ?
   getter-richards                                  121.6606+-5.5812     ^    108.4585+-2.6731        ^ definitely 1.1217x faster
   getter                                             5.4702+-0.4381     ?      5.6983+-0.5849        ? might be 1.0417x slower
   global-var-const-infer-fire-from-opt               0.8951+-0.1361     ?      0.9704+-0.1130        ? might be 1.0841x slower
   global-var-const-infer                             0.7671+-0.1111     ?      0.8982+-0.1820        ? might be 1.1708x slower
   HashMap-put-get-iterate-keys                      25.7770+-2.4458     ?     25.9889+-2.4021        ?
   HashMap-put-get-iterate                           27.3074+-2.9691           25.9138+-1.2632          might be 1.0538x faster
   HashMap-string-put-get-iterate                    24.3748+-1.2647           23.7717+-0.6408          might be 1.0254x faster
   hoist-make-rope                                    8.2589+-0.8362     ?      8.7115+-1.4909        ? might be 1.0548x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.3829+-0.2199     ?      4.6675+-0.5819        ? might be 1.0649x slower
   hoist-poly-check-structure                         3.2512+-0.0299     ?      3.3952+-0.4768        ? might be 1.0443x slower
   imul-double-only                                   6.8748+-0.1198            6.7501+-0.3581          might be 1.0185x faster
   imul-int-only                                      8.7832+-0.8408            7.9295+-0.4194          might be 1.1077x faster
   imul-mixed                                         6.7037+-0.3091            6.5373+-0.6125          might be 1.0255x faster
   in-four-cases                                     17.1239+-0.2918           16.9402+-0.2575          might be 1.0108x faster
   in-one-case-false                                  9.5426+-0.6550            9.2255+-0.3862          might be 1.0344x faster
   in-one-case-true                                   9.3114+-0.6697     ?      9.4871+-0.4950        ? might be 1.0189x slower
   in-two-cases                                       9.7678+-0.7416            9.5288+-0.0632          might be 1.0251x faster
   indexed-properties-in-objects                      2.8603+-0.1680     ?      2.9626+-0.2390        ? might be 1.0358x slower
   infer-closure-const-then-mov-no-inline             3.4325+-0.4528            3.0192+-0.0746          might be 1.1369x faster
   infer-closure-const-then-mov                      17.3653+-0.5472           17.0131+-0.9230          might be 1.0207x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.3619+-0.1393     !     11.8155+-0.5223        ! definitely 1.1403x slower
   infer-closure-const-then-put-to-scope             21.7806+-1.4871           21.3357+-1.0274          might be 1.0209x faster
   infer-closure-const-then-reenter-no-inline   
                                                     50.2296+-1.2350     ?     50.2685+-0.8848        ?
   infer-closure-const-then-reenter                  22.2054+-0.5384           21.5876+-0.6614          might be 1.0286x faster
   infer-constant-global-property                     3.3403+-0.0932     ?      3.4735+-0.1958        ? might be 1.0399x slower
   infer-constant-property                            2.5667+-0.0553     ?      2.6070+-0.1110        ? might be 1.0157x slower
   infer-one-time-closure-ten-vars                    8.3876+-0.2695     ?      8.7447+-0.5919        ? might be 1.0426x slower
   infer-one-time-closure-two-vars                    8.2207+-0.7575     ?      8.4150+-1.3821        ? might be 1.0236x slower
   infer-one-time-closure                             7.7687+-0.2518     ?      7.8310+-0.1104        ?
   infer-one-time-deep-closure                       12.6114+-0.3735     ?     12.8195+-0.3580        ? might be 1.0165x slower
   inline-arguments-access                            3.6556+-0.3297     ?      3.7280+-0.1435        ? might be 1.0198x slower
   inline-arguments-aliased-access                    3.9902+-0.4420            3.8265+-0.5166          might be 1.0428x faster
   inline-arguments-local-escape                      3.7666+-0.3740     ?      3.7769+-0.2658        ?
   inline-get-scoped-var                              4.5167+-0.1391     ?      4.5987+-0.1334        ? might be 1.0182x slower
   inlined-put-by-id-transition                      10.6174+-0.3400           10.5057+-0.4490          might be 1.0106x faster
   int-or-other-abs-then-get-by-val                   4.7525+-0.0751            4.7442+-0.0903        
   int-or-other-abs-zero-then-get-by-val             16.6692+-0.9506           16.1431+-1.0308          might be 1.0326x faster
   int-or-other-add-then-get-by-val                   4.1168+-0.1381     ?      4.1197+-0.2907        ?
   int-or-other-add                                   4.7632+-0.0316     ?      4.9630+-0.3973        ? might be 1.0420x slower
   int-or-other-div-then-get-by-val                   3.6811+-0.0704     ?      3.8024+-0.4164        ? might be 1.0330x slower
   int-or-other-max-then-get-by-val                   4.0999+-0.2328            3.9314+-0.1088          might be 1.0429x faster
   int-or-other-min-then-get-by-val                   4.1856+-0.0590     ^      3.9475+-0.0976        ^ definitely 1.0603x faster
   int-or-other-mod-then-get-by-val                   3.4741+-0.1092     ?      3.7694+-0.6516        ? might be 1.0850x slower
   int-or-other-mul-then-get-by-val                   3.5874+-0.1176     ?      3.7163+-0.2714        ? might be 1.0359x slower
   int-or-other-neg-then-get-by-val                   4.4858+-0.1361     ?      4.5140+-0.2901        ?
   int-or-other-neg-zero-then-get-by-val             16.0488+-0.7617     ?     16.2743+-0.5360        ? might be 1.0141x slower
   int-or-other-sub-then-get-by-val                   4.4818+-0.8995            3.9841+-0.0770          might be 1.1249x faster
   int-or-other-sub                                   3.4517+-0.1264            3.4019+-0.1171          might be 1.0146x faster
   int-overflow-local                                 4.5232+-0.4381            4.2815+-0.1094          might be 1.0565x faster
   Int16Array-alloc-long-lived                       48.7933+-2.1583           46.7486+-1.2480          might be 1.0437x faster
   Int16Array-bubble-sort-with-byteLength            19.5681+-1.4659           19.2232+-0.7309          might be 1.0179x faster
   Int16Array-bubble-sort                            18.8297+-0.3602     ?     18.9949+-0.7964        ?
   Int16Array-load-int-mul                            1.4692+-0.1054     ?      1.5001+-0.2060        ? might be 1.0210x slower
   Int16Array-to-Int32Array-set                      43.0809+-1.7245     ?     43.1316+-1.3360        ?
   Int32Array-alloc-large                            12.4592+-0.5421     ?     12.8643+-0.5461        ? might be 1.0325x slower
   Int32Array-alloc-long-lived                       58.5166+-1.7366           57.1085+-2.0835          might be 1.0247x faster
   Int32Array-alloc                                   3.0257+-0.3006            2.8929+-0.1872          might be 1.0459x faster
   Int32Array-Int8Array-view-alloc                    6.4521+-0.8155            6.0512+-0.4227          might be 1.0663x faster
   int52-spill                                        4.5883+-0.1729            4.5492+-0.1326        
   Int8Array-alloc-long-lived                        43.1229+-1.1108     ^     40.8302+-1.0073        ^ definitely 1.0562x faster
   Int8Array-load-with-byteLength                     3.4722+-0.4070            3.4171+-0.1169          might be 1.0161x faster
   Int8Array-load                                     3.4688+-0.2068     ?      3.5817+-0.4780        ? might be 1.0325x slower
   integer-divide                                    10.5687+-0.2866           10.3235+-0.1465          might be 1.0238x faster
   integer-modulo                                     1.8357+-0.4339            1.6291+-0.0575          might be 1.1268x faster
   is-boolean-fold-tricky                             3.7202+-0.1199            3.7020+-0.0880        
   is-boolean-fold                                    3.0473+-0.7858            2.7883+-0.1989          might be 1.0929x faster
   is-function-fold-tricky-internal-function   
                                                     10.0159+-0.3160     ?     10.0494+-0.2990        ?
   is-function-fold-tricky                            4.0413+-0.1490            3.9819+-0.0538          might be 1.0149x faster
   is-function-fold                                   2.6522+-0.0903     ?      2.7468+-0.2875        ? might be 1.0357x slower
   is-number-fold-tricky                              3.9361+-0.0749     ?      3.9752+-0.0727        ?
   is-number-fold                                     2.6271+-0.0976     ?      2.6687+-0.2149        ? might be 1.0158x slower
   is-object-or-null-fold-functions                   2.6101+-0.0466     ?      2.6666+-0.1041        ? might be 1.0217x slower
   is-object-or-null-fold-less-tricky                 4.0832+-0.1733     ?      4.1239+-0.1840        ?
   is-object-or-null-fold-tricky                      5.2099+-0.1785            5.1267+-0.1382          might be 1.0162x faster
   is-object-or-null-fold                             2.6438+-0.0918            2.6103+-0.0566          might be 1.0128x faster
   is-object-or-null-trickier-function                4.0369+-0.0449     ?      4.0485+-0.1137        ?
   is-object-or-null-trickier-internal-function   
                                                     10.1735+-0.1545     ?     10.2763+-0.2121        ? might be 1.0101x slower
   is-object-or-null-tricky-function                  4.1169+-0.1868            4.0385+-0.1558          might be 1.0194x faster
   is-object-or-null-tricky-internal-function   
                                                      7.6611+-0.0311     ?      7.8531+-0.3531        ? might be 1.0251x slower
   is-string-fold-tricky                              3.9788+-0.0782            3.9364+-0.0490          might be 1.0108x faster
   is-string-fold                                     2.6204+-0.1259            2.5597+-0.0141          might be 1.0237x faster
   is-undefined-fold-tricky                           3.4995+-0.2796            3.3385+-0.1506          might be 1.0482x faster
   is-undefined-fold                                  2.5855+-0.0371     ?      2.6532+-0.2291        ? might be 1.0262x slower
   large-int-captured                                 3.9810+-0.1572            3.8426+-0.2169          might be 1.0360x faster
   large-int-neg                                     13.7724+-0.3683     ?     14.2799+-0.9650        ? might be 1.0369x slower
   large-int                                         13.2743+-0.5399     ?     13.4562+-0.5171        ? might be 1.0137x slower
   load-varargs-elimination                          22.1274+-1.6301     ?     22.1958+-1.2241        ?
   logical-not-weird-types                            2.8069+-0.0521     ?      2.8623+-0.0633        ? might be 1.0198x slower
   logical-not                                        4.1926+-0.2854     ?      4.2919+-0.1504        ? might be 1.0237x slower
   lots-of-fields                                     9.5002+-0.5543     ?      9.5563+-0.3975        ?
   make-indexed-storage                               2.9961+-0.3953            2.8064+-0.5729          might be 1.0676x faster
   make-rope-cse                                      3.7767+-0.3986            3.6912+-0.3261          might be 1.0232x faster
   marsaglia-larger-ints                             33.1632+-1.2142     ?     33.3218+-1.1142        ?
   marsaglia-osr-entry                               21.3612+-1.0048           20.7170+-0.5880          might be 1.0311x faster
   math-with-out-of-bounds-array-values              21.5814+-0.6134     ?     21.7050+-0.5617        ?
   max-boolean                                        2.4059+-0.0655     !      2.6428+-0.0735        ! definitely 1.0985x slower
   method-on-number                                  16.5717+-0.9345           15.6495+-0.3469          might be 1.0589x faster
   min-boolean                                        2.4071+-0.0262     !      2.6473+-0.0522        ! definitely 1.0998x slower
   minus-boolean-double                               3.0680+-0.1318     ?      3.0894+-0.1431        ?
   minus-boolean                                      2.2933+-0.0425     ?      2.3872+-0.1491        ? might be 1.0409x slower
   misc-strict-eq                                    31.3042+-1.0451     ?     32.9912+-3.3371        ? might be 1.0539x slower
   mod-boolean-double                                11.2128+-0.2951     ?     11.2234+-0.3479        ?
   mod-boolean                                        8.6985+-0.6319            8.2577+-0.0906          might be 1.0534x faster
   mul-boolean-double                                 3.5304+-0.0840            3.5272+-0.0975        
   mul-boolean                                        2.7742+-0.0468     ?      2.9202+-0.2727        ? might be 1.0526x slower
   neg-boolean                                        3.1455+-0.1817            3.0054+-0.0266          might be 1.0466x faster
   negative-zero-divide                               0.3256+-0.0248     ?      0.3464+-0.0488        ? might be 1.0636x slower
   negative-zero-modulo                               0.3341+-0.0274            0.3298+-0.0296          might be 1.0132x faster
   negative-zero-negate                               0.3970+-0.1937            0.3064+-0.0270          might be 1.2958x faster
   nested-function-parsing                           44.8615+-1.3507           43.9156+-0.7265          might be 1.0215x faster
   new-array-buffer-dead                             88.1292+-0.7450     ?     88.5398+-1.0202        ?
   new-array-buffer-push                              6.2259+-0.4488            6.1713+-0.4776        
   new-array-dead                                    15.5071+-1.4325           13.7075+-0.6565          might be 1.1313x faster
   new-array-push                                     6.1503+-0.2175     ?      6.2677+-0.2863        ? might be 1.0191x slower
   no-inline-constructor                             32.0150+-0.7123           31.2878+-1.1253          might be 1.0232x faster
   number-test                                        2.7606+-0.0390     ?      2.7937+-0.1027        ? might be 1.0120x slower
   object-closure-call                                5.0124+-0.3472            4.9697+-0.2456        
   object-get-own-property-symbols-on-large-array   
                                                      4.1591+-0.3334            4.0273+-0.3942          might be 1.0327x faster
   object-test                                        2.5743+-0.0810            2.5733+-0.0560        
   obvious-sink-pathology-taken                      99.3015+-0.8506           98.4384+-1.1496        
   obvious-sink-pathology                            94.6192+-0.9922     ?     94.9547+-1.3280        ?
   obviously-elidable-new-object                     27.4631+-1.9170     ?     28.5603+-2.0957        ? might be 1.0400x slower
   plus-boolean-arith                                 2.3505+-0.1005     ?      2.4349+-0.1655        ? might be 1.0359x slower
   plus-boolean-double                                3.0942+-0.0874     ?      3.1860+-0.3053        ? might be 1.0297x slower
   plus-boolean                                       2.6807+-0.3400            2.5990+-0.0917          might be 1.0314x faster
   poly-chain-access-different-prototypes-simple   
                                                      2.7130+-0.0948     !      3.2443+-0.1234        ! definitely 1.1959x slower
   poly-chain-access-different-prototypes             2.5262+-0.1086     !      2.8069+-0.0630        ! definitely 1.1111x slower
   poly-chain-access-simpler                          2.7487+-0.0830     !      3.4218+-0.3136        ! definitely 1.2449x slower
   poly-chain-access                                  2.5243+-0.1196     !      3.1824+-0.0494        ! definitely 1.2607x slower
   poly-stricteq                                     50.8727+-1.0194     ?     51.5450+-2.1397        ? might be 1.0132x slower
   polymorphic-array-call                             1.5614+-0.3520            1.2225+-0.0715          might be 1.2772x faster
   polymorphic-get-by-id                              2.8639+-0.0521            2.8293+-0.0498          might be 1.0122x faster
   polymorphic-put-by-id                             25.0852+-1.7815     ?     25.4855+-1.8363        ? might be 1.0160x slower
   polymorphic-structure                             13.0402+-0.3242     ?     13.1248+-0.4445        ?
   polyvariant-monomorphic-get-by-id                  6.6565+-0.5710            6.5219+-0.5844          might be 1.0206x faster
   proto-getter-access                                7.9254+-0.1436     ?      7.9270+-0.1637        ?
   prototype-access-with-mutating-prototype         380.8736+-10.3559    ^      5.4162+-0.3696        ^ definitely 70.3215x faster
   put-by-id-replace-and-transition                   8.0024+-0.6192     ?      8.3071+-1.3396        ? might be 1.0381x slower
   put-by-id-slightly-polymorphic                     2.8199+-0.2106            2.7956+-0.1133        
   put-by-id                                         10.2795+-0.5146           10.2212+-0.7569        
   put-by-val-direct                                  0.3433+-0.0338            0.3061+-0.0069          might be 1.1216x faster
   put-by-val-large-index-blank-indexing-type   
                                                     11.5602+-0.5107     ?     12.1145+-0.5170        ? might be 1.0480x slower
   put-by-val-machine-int                             2.4121+-0.1233     ?      2.4880+-0.0810        ? might be 1.0315x slower
   rare-osr-exit-on-local                            14.4660+-0.3129     ?     14.7155+-0.3710        ? might be 1.0172x slower
   register-pressure-from-osr                        16.5262+-0.6673           16.1825+-0.3748          might be 1.0212x faster
   repeat-multi-get-by-offset                        20.9219+-1.4006     ?     22.0367+-0.7254        ? might be 1.0533x slower
   setter-prototype                                   7.5168+-0.1226     ^      7.2111+-0.1109        ^ definitely 1.0424x faster
   setter                                             5.6762+-0.2732            5.5865+-0.3880          might be 1.0161x faster
   simple-activation-demo                            24.2705+-0.5987     ?     24.6012+-0.6930        ? might be 1.0136x slower
   simple-getter-access                              10.7292+-0.7009           10.4356+-0.2739          might be 1.0281x faster
   simple-poly-call-nested                            8.3717+-0.4182     ?      8.8915+-0.5933        ? might be 1.0621x slower
   simple-poly-call                                   1.2573+-0.0656     ?      1.3884+-0.3881        ? might be 1.1043x slower
   sin-boolean                                       20.2922+-1.9243           19.6864+-2.3026          might be 1.0308x faster
   singleton-scope                                   57.3733+-1.5699     ?     58.4947+-1.3036        ? might be 1.0195x slower
   sink-function                                      9.8610+-1.2168            9.4331+-1.1735          might be 1.0454x faster
   sink-huge-activation                              16.8662+-0.9414           16.3344+-1.1433          might be 1.0326x faster
   sinkable-new-object-dag                           54.6995+-1.5307     ?     56.3906+-1.5581        ? might be 1.0309x slower
   sinkable-new-object-taken                         42.7915+-1.2996           42.6075+-1.5082        
   sinkable-new-object                               29.5848+-0.3611           29.2573+-0.3416          might be 1.0112x faster
   slow-array-profile-convergence                     2.8155+-0.5442            2.4823+-0.0777          might be 1.1342x faster
   slow-convergence                                   2.5142+-0.3224            2.3573+-0.0300          might be 1.0666x faster
   slow-ternaries                                    16.5932+-0.3397           16.4958+-0.6351        
   sorting-benchmark                                 17.5098+-2.1213           16.7588+-0.7821          might be 1.0448x faster
   sparse-conditional                                 1.1180+-0.0564     ?      1.2055+-0.1042        ? might be 1.0783x slower
   splice-to-remove                                  11.9097+-0.3758     ?     12.2822+-0.4091        ? might be 1.0313x slower
   string-char-code-at                               14.2538+-0.3509           14.0598+-0.2897          might be 1.0138x faster
   string-concat-object                               2.2810+-0.2209            2.0813+-0.2356          might be 1.0960x faster
   string-concat-pair-object                          2.0044+-0.0952     ?      2.1702+-0.1100        ? might be 1.0827x slower
   string-concat-pair-simple                          9.1767+-0.2324     ?      9.5616+-0.4892        ? might be 1.0419x slower
   string-concat-simple                               9.6600+-1.0453            9.6234+-0.6484        
   string-cons-repeat                                 6.6637+-0.5960            6.4730+-0.1868          might be 1.0295x faster
   string-cons-tower                                  6.6557+-0.4211     ?      6.6698+-0.2554        ?
   string-equality                                   15.7223+-1.2345           15.1822+-0.3442          might be 1.0356x faster
   string-get-by-val-big-char                         6.5250+-0.4070            6.5171+-0.2871        
   string-get-by-val-out-of-bounds-insane             3.3345+-0.2304            3.2049+-0.1638          might be 1.0404x faster
   string-get-by-val-out-of-bounds                    3.9859+-0.0585     ?      4.1449+-0.2366        ? might be 1.0399x slower
   string-get-by-val                                  2.7761+-0.0924     ?      2.7806+-0.0355        ?
   string-hash                                        1.8879+-0.0946            1.8510+-0.0247          might be 1.0199x faster
   string-long-ident-equality                        12.4799+-0.3167     ?     12.5362+-0.4241        ?
   string-out-of-bounds                              10.9229+-1.2142           10.4532+-0.0824          might be 1.0449x faster
   string-repeat-arith                               27.7753+-1.6226           26.4429+-0.9114          might be 1.0504x faster
   string-sub                                        53.0905+-1.0755           52.7675+-0.8678        
   string-test                                        2.6882+-0.0551     ?      2.7697+-0.2142        ? might be 1.0303x slower
   string-var-equality                               25.7693+-0.3015     ?     26.1897+-1.1495        ? might be 1.0163x slower
   structure-hoist-over-transitions                   2.4080+-0.1408            2.3909+-0.0636        
   substring-concat-weird                            35.9714+-1.3759           35.7002+-0.7909        
   substring-concat                                  40.2256+-1.5620           39.7886+-1.8225          might be 1.0110x faster
   substring                                         45.6614+-1.8401           45.4661+-1.1161        
   switch-char-constant                               2.6986+-0.1013            2.6727+-0.0317        
   switch-char                                        5.8380+-0.7417            5.7503+-0.4981          might be 1.0153x faster
   switch-constant                                    9.2950+-0.5108            8.9500+-0.8352          might be 1.0386x faster
   switch-string-basic-big-var                       15.4759+-0.4277           15.2460+-0.1769          might be 1.0151x faster
   switch-string-basic-big                           14.9459+-0.9990     ?     15.1398+-0.4725        ? might be 1.0130x slower
   switch-string-basic-var                           13.0261+-0.2959     ?     13.1676+-0.6149        ? might be 1.0109x slower
   switch-string-basic                               13.5876+-1.7048           12.7543+-0.0595          might be 1.0653x faster
   switch-string-big-length-tower-var                17.8434+-0.7809           17.5588+-0.3507          might be 1.0162x faster
   switch-string-length-tower-var                    13.5552+-1.1397           13.0967+-0.5717          might be 1.0350x faster
   switch-string-length-tower                        11.8094+-0.1857           11.7981+-0.3798        
   switch-string-short                               12.1018+-0.7386           11.9736+-0.4202          might be 1.0107x faster
   switch                                            13.4430+-1.9067           12.4515+-1.0377          might be 1.0796x faster
   tear-off-arguments-simple                          2.9766+-0.0374     ?      3.0770+-0.1121        ? might be 1.0337x slower
   tear-off-arguments                                 3.8459+-0.0987     ?      3.9828+-0.1517        ? might be 1.0356x slower
   temporal-structure                                13.1803+-0.3082     ^     11.9392+-0.2183        ^ definitely 1.1040x faster
   to-int32-boolean                                  13.0266+-0.3306           12.8890+-0.2126          might be 1.0107x faster
   try-catch-get-by-val-cloned-arguments             14.0913+-0.5651           13.8798+-0.6569          might be 1.0152x faster
   try-catch-get-by-val-direct-arguments              6.3417+-0.1290     ?      6.5613+-0.3880        ? might be 1.0346x slower
   try-catch-get-by-val-scoped-arguments              7.7463+-0.4597            7.5802+-0.4072          might be 1.0219x faster
   typed-array-get-set-by-val-profiling              27.8108+-0.9677           27.7780+-0.6545        
   undefined-property-access                        231.5044+-4.0487     ^    221.9122+-2.4025        ^ definitely 1.0432x faster
   undefined-test                                     2.8373+-0.0882            2.7677+-0.0693          might be 1.0251x faster
   unprofiled-licm                                   13.9479+-0.3830     ?     14.1136+-0.4306        ? might be 1.0119x slower
   varargs-call                                      13.8407+-0.2084     ?     13.8632+-0.1188        ?
   varargs-construct-inline                          22.5007+-0.8967     ?     22.9550+-0.9458        ? might be 1.0202x slower
   varargs-construct                                 20.7879+-0.5675           20.2267+-0.7886          might be 1.0277x faster
   varargs-inline                                     8.6116+-0.4245     ?      8.6120+-0.5216        ?
   varargs-strict-mode                                9.2815+-0.6367            8.9648+-0.1086          might be 1.0353x faster
   varargs                                            9.1453+-0.7593            9.0118+-0.2094          might be 1.0148x faster
   weird-inlining-const-prop                          2.6061+-0.3494     ?      2.8678+-0.3812        ? might be 1.1004x slower

   &lt;geometric&gt;                                        7.9343+-0.0242     ^      7.8166+-0.0230        ^ definitely 1.0151x faster

                                                        TipOfTree                  Adaptive                                     
AsmBench:
   bigfib.cpp                                       456.9175+-7.5134     ?    457.5968+-9.5786        ?
   cray.c                                           404.4007+-7.7082          403.9750+-10.4878       
   dry.c                                            437.2227+-24.4648    ?    439.6968+-32.5382       ?
   FloatMM.c                                        701.1412+-26.2006    ?    714.5997+-38.5202       ? might be 1.0192x slower
   gcc-loops.cpp                                   3439.8763+-91.1751    ?   3494.4896+-88.9460       ? might be 1.0159x slower
   n-body.c                                         857.3845+-23.8812         834.6784+-24.7890         might be 1.0272x faster
   Quicksort.c                                      411.7223+-4.6815          411.5973+-10.8366       
   stepanov_container.cpp                          3573.7439+-102.5283   ?   3622.1098+-90.1827       ? might be 1.0135x slower
   Towers.c                                         233.8201+-3.0816     ?    235.7799+-4.8157        ?

   &lt;geometric&gt;                                      727.8415+-6.9097     ?    730.5996+-10.4228       ? might be 1.0038x slower

                                                        TipOfTree                  Adaptive                                     
CompressionBench:
   huffman                                           59.1674+-1.1318     ?     59.2661+-1.1557        ?
   arithmetic-simple                                267.3619+-2.3030     ?    268.5656+-1.7103        ?
   arithmetic-precise                               244.0977+-1.8071     ?    244.1183+-2.5128        ?
   arithmetic-complex-precise                       245.2327+-2.9130     ?    250.2736+-12.5593       ? might be 1.0206x slower
   arithmetic-precise-order-0                       277.2734+-1.2194     ?    279.6467+-6.3904        ?
   arithmetic-precise-order-1                       313.2673+-11.1499         310.0146+-4.1135          might be 1.0105x faster
   arithmetic-precise-order-2                       375.9084+-41.6155         358.2793+-4.5639          might be 1.0492x faster
   arithmetic-simple-order-1                        327.3972+-9.4726          326.7085+-5.4727        
   arithmetic-simple-order-2                        391.1607+-8.8523     ?    397.2773+-12.3161       ? might be 1.0156x slower
   lz-string                                        311.6857+-7.1515     ?    315.3020+-14.0606       ? might be 1.0116x slower

   &lt;geometric&gt;                                      256.4098+-4.1995     ?    256.5143+-2.8343        ? might be 1.0004x slower

                                                        TipOfTree                  Adaptive                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   52.2729+-0.2741     ^     51.7784+-0.1053        ^ definitely 1.0096x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113681</commentid>
    <comment_count>43</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-31 00:42:43 -0700</bug_when>
    <thetext>I reran Octane and can&apos;t really repro the overall slow-down.  I&apos;ll investigate encrypt a bit, but it might be a fluke.


Benchmark report for Octane on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r187605)
&quot;Adaptive&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r187605)

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.

                           TipOfTree                  Adaptive                                     

encrypt                 0.19225+-0.00196    !     0.20304+-0.00056       ! definitely 1.0561x slower
decrypt                 3.34754+-0.04825    ?     3.36644+-0.07103       ?
deltablue      x2       0.15245+-0.00138    ?     0.15344+-0.00187       ?
earley                  0.30446+-0.00817          0.30071+-0.00457         might be 1.0125x faster
boyer                   4.12098+-0.02049    ?     4.12703+-0.03345       ?
navier-stokes  x2       4.89834+-0.00285    ?     4.91376+-0.01335       ?
raytrace       x2       1.06695+-0.03181    ?     1.07147+-0.06029       ?
richards       x2       0.09991+-0.00174          0.09932+-0.00107       
splay          x2       0.33151+-0.00462    ?     0.33435+-0.00217       ?
regexp         x2      25.48696+-0.22685         25.06877+-0.48825         might be 1.0167x faster
pdfjs          x2      37.78256+-0.20325         37.64970+-0.27023       
mandreel       x2      44.25848+-0.46610    ?    44.35944+-1.01543       ?
gbemu          x2      35.50935+-2.96924         33.92472+-0.36221         might be 1.0467x faster
closure                 0.55669+-0.01476          0.55231+-0.00250       
jquery                  7.10937+-0.06597          7.05487+-0.06496       
box2d          x2       9.95605+-0.05238    ?    10.02594+-0.11852       ?
zlib           x2     386.13934+-5.81303        378.55622+-16.10870        might be 1.0200x faster
typescript     x2     651.25728+-13.95119   ?   658.40365+-6.70744       ? might be 1.0110x slower

&lt;geometric&gt;             5.62398+-0.03182          5.61244+-0.03768         might be 1.0021x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113683</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-31 00:45:56 -0700</bug_when>
    <thetext>Attachment 257913 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:157:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:159:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:161:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 22 in 65 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>1113778</commentid>
    <comment_count>45</comment_count>
      <attachid>257940</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-31 12:16:59 -0700</bug_when>
    <thetext>Created attachment 257940
closer to done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113780</commentid>
    <comment_count>46</comment_count>
      <attachid>257941</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-31 12:25:09 -0700</bug_when>
    <thetext>Created attachment 257941
more fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113783</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-31 12:26:54 -0700</bug_when>
    <thetext>Attachment 257941 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PropertyCondition.h:286:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:157:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:159:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:161:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 23 in 69 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>1113785</commentid>
    <comment_count>48</comment_count>
      <attachid>257943</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-31 12:32:49 -0700</bug_when>
    <thetext>Created attachment 257943
more fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113788</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-31 12:36:40 -0700</bug_when>
    <thetext>Attachment 257943 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PropertyCondition.h:286:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:157:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:159:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:161:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 23 in 69 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>1113857</commentid>
    <comment_count>50</comment_count>
      <attachid>257960</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-31 14:23:28 -0700</bug_when>
    <thetext>Created attachment 257960
fix debug tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113859</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-31 14:26:29 -0700</bug_when>
    <thetext>Attachment 257960 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PropertyCondition.h:286:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 10 in 70 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>1113866</commentid>
    <comment_count>52</comment_count>
      <attachid>257943</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-07-31 14:44:20 -0700</bug_when>
    <thetext>Comment on attachment 257943
more fixes

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

I got halfway.

&gt; Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp:-43
&gt; -    if (isOnList())
&gt; -        remove();

Why don&apos;t we need this anymore? Who will remove us from the list?

&gt; Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
&gt; +    // The presence of a condition set means that this is a prototype load.
&gt; +    const ObjectPropertyConditionSet&amp; conditionSet() const { return m_conditionSet; }

I guess you mean if the condition set is not empty? It is always present, since it is a reference.

&gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:63
&gt; +bool ObjectPropertyConditionSet::hasOneSlotBaseCondition() const

Shouldn&apos;t this be called &quot;hasOnePresenceCondition&quot;? What did you mean by &quot;slot base&quot; here?

&gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:68
&gt; +ObjectPropertyCondition ObjectPropertyConditionSet::slotBaseCondition() const

Same here.

&gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:42
&gt; +// Empty: There are no special conditions that need to be met.
&gt; +// Invalid: The heap access is never valid.
&gt; +// Non-empty: There are some ObjectPropertyConditions that need to be valid.

Empty: The heap access is always valid.
Invalid: The heap access is never valid.
Non-empty: The heap access is valid if all the ObjectPropertyConditions in the set are valid.

&gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:58
&gt; +    static ObjectPropertyConditionSet nonEmpty(const Vector&lt;ObjectPropertyCondition&gt;&amp; vector)
&gt; +    {
&gt; +        if (vector.isEmpty())
&gt; +            return ObjectPropertyConditionSet();

It&apos;s kind of weird that nonEmpty() can return an empty set. I would either assert here or call this valid() or create().

&gt; Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.h:94
&gt; +    ObjectPropertyConditionSet m_conditionSet; // FIXME what about barriers?

Can has fix for this? Seems like somebody needs to mark this condition set since it points to some JSObjects.

&gt; Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.cpp:66
&gt;  bool PutByIdAccess::visitWeak(RepatchBuffer&amp; repatchBuffer) const

Do we need to mark m_conditionSet here, since it points to JSObjects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113872</commentid>
    <comment_count>53</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-31 14:51:21 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; Comment on attachment 257943 [details]
&gt; more fixes
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=257943&amp;action=review
&gt; 
&gt; I got halfway.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp:-43
&gt; &gt; -    if (isOnList())
&gt; &gt; -        remove();
&gt; 
&gt; Why don&apos;t we need this anymore? Who will remove us from the list?

The WatchpointSet will remove us before calling fire().  That change already landed in trunk.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
&gt; &gt; +    // The presence of a condition set means that this is a prototype load.
&gt; &gt; +    const ObjectPropertyConditionSet&amp; conditionSet() const { return m_conditionSet; }
&gt; 
&gt; I guess you mean if the condition set is not empty? It is always present,
&gt; since it is a reference.

Right.  Non-empty.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:63
&gt; &gt; +bool ObjectPropertyConditionSet::hasOneSlotBaseCondition() const
&gt; 
&gt; Shouldn&apos;t this be called &quot;hasOnePresenceCondition&quot;? What did you mean by
&gt; &quot;slot base&quot; here?

The convention for condition sets used by prototype accesses is that the &quot;slot base&quot; of the prototype access is the one and only presence in the set.  So, &quot;slot base&quot; and &quot;presence&quot; mean the same thing here.  I believe that &quot;slot base&quot; is accepted lingo within our inline caches (PropertySlot::slotBase() for example)

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:68
&gt; &gt; +ObjectPropertyCondition ObjectPropertyConditionSet::slotBaseCondition() const
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:42
&gt; &gt; +// Empty: There are no special conditions that need to be met.
&gt; &gt; +// Invalid: The heap access is never valid.
&gt; &gt; +// Non-empty: There are some ObjectPropertyConditions that need to be valid.
&gt; 
&gt; Empty: The heap access is always valid.
&gt; Invalid: The heap access is never valid.
&gt; Non-empty: The heap access is valid if all the ObjectPropertyConditions in
&gt; the set are valid.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:58
&gt; &gt; +    static ObjectPropertyConditionSet nonEmpty(const Vector&lt;ObjectPropertyCondition&gt;&amp; vector)
&gt; &gt; +    {
&gt; &gt; +        if (vector.isEmpty())
&gt; &gt; +            return ObjectPropertyConditionSet();
&gt; 
&gt; It&apos;s kind of weird that nonEmpty() can return an empty set. I would either
&gt; assert here or call this valid() or create().

I&apos;ll call it create().

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.h:94
&gt; &gt; +    ObjectPropertyConditionSet m_conditionSet; // FIXME what about barriers?
&gt; 
&gt; Can has fix for this? Seems like somebody needs to mark this condition set
&gt; since it points to some JSObjects.

Ooops, should have removed the FIXME.  PropertyCondition, ObjectPropertyCondition, and ObjectPropertyConditionSet do barriers properly and support weak semantics through isStillLive() and areStillLive().  When creating a condition in Repatch.cpp, we use methods like PropertyCondition::presence(vm, owner, ...) which triggers a barrier on owner.  In the case of PolymorphicGetByIdList, it has a visitWeak method that does:

    if (!m_conditionSet.areStillLive())
        return false;

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.cpp:66
&gt; &gt;  bool PutByIdAccess::visitWeak(RepatchBuffer&amp; repatchBuffer) const
&gt; 
&gt; Do we need to mark m_conditionSet here, since it points to JSObjects?

No, because:

    if (!m_conditionSet.areStillLive())
        return false;

That&apos;s right at the top of PutByIdAccess::visitWeak().  It will blow away the inline cache if any of the objects in the condition set are dead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113992</commentid>
    <comment_count>54</comment_count>
      <attachid>257998</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-31 23:12:20 -0700</bug_when>
    <thetext>Created attachment 257998
revised patch

Incorporates Geoff&apos;s feedback so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113993</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-31 23:16:13 -0700</bug_when>
    <thetext>Attachment 257998 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PropertyCondition.h:286:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 10 in 71 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>1114380</commentid>
    <comment_count>56</comment_count>
      <attachid>257998</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-03 14:45:16 -0700</bug_when>
    <thetext>Comment on attachment 257998
revised patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
&gt; +    // A non-empty condition set means that this is a prototype load.
&gt; +    const ObjectPropertyConditionSet&amp; conditionSet() const { return m_conditionSet; }

What guarantees that GetByIdVariant will not use a condition set to test for a constant (in a non-prototype load)?

&gt; Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
&gt; +        return WTF::PtrHash&lt;JSObject*&gt;::hash(m_object) + m_condition.hash();

I think that XOR is a better way to mix bits in a hash than ADD, since ADD will tend to make low bits zero. Another option is to WTF::pairIntHash the two hash codes.

&gt; Source/JavaScriptCore/bytecode/PropertyCondition.cpp:204
&gt; +    switch (m_kind) {
&gt; +    case Presence:
&gt; +    case Absence:
&gt; +    case Equivalence:
&gt; +        return structure-&gt;needImpurePropertyWatchpoint();
&gt; +    default:
&gt; +        return false;
&gt; +    }

I think what you&apos;re saying here is that objects that have impure getOwnPropertySlot implementations may start returning new properties and may stop returning old properties but must not start returning new setters (without a change in structure). Is that right?

As an empirical matter, I believe this observation is true.

Still, I think it&apos;s unnecessarily risky to turn this observation into an API. Is it a clear speedup to do this? &quot;My property accesses are impure&quot; is a pretty strong warning. I would forgive a programmer for not knowing that the warning did not cover (absence of) setters.

&gt; Source/JavaScriptCore/bytecode/PropertyCondition.cpp:214
&gt; +    // Currently we assume that an impure property can cause a property to appear, and can also
&gt; +    // &quot;shadow&quot; an existing JS property on the same object. Hence it affects both presence and
&gt; +    // absence. It doesn&apos;t affect AbsenceOfSetter because impure properties aren&apos;t ever setters.

Aha, yeah, I guess you say that here.

I think we should either remove this behavior or, if it&apos;s a necessary speedup, document it in JSTypeInfo.h next to the definition of HasImpureGetOwnPropertySlot.

&gt; Source/JavaScriptCore/bytecode/PropertyCondition.h:179
&gt; +        unsigned result = WTF::PtrHash&lt;UniquedStringImpl*&gt;::hash(m_uid) + static_cast&lt;unsigned&gt;(m_kind);
&gt; +        switch (m_kind) {
&gt; +        case Presence:
&gt; +            result += u.presence.offset;
&gt; +            result += u.presence.attributes;
&gt; +            break;
&gt; +        case Absence:
&gt; +        case AbsenceOfSetter:
&gt; +            result += WTF::PtrHash&lt;JSObject*&gt;::hash(u.absence.prototype);
&gt; +            break;
&gt; +        case Equivalence:
&gt; +            result += EncodedJSValueHash::hash(u.equivalence.value);
&gt; +            break;
&gt; +        }

I think that XOR is a better way to mix bits in a hash than ADD, since ADD will tend to make low bits zero. Another option is to WTF::pairIntHash the two hash codes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114393</commentid>
    <comment_count>57</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-03 15:08:17 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; Comment on attachment 257998 [details]
&gt; revised patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=257998&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
&gt; &gt; +    // A non-empty condition set means that this is a prototype load.
&gt; &gt; +    const ObjectPropertyConditionSet&amp; conditionSet() const { return m_conditionSet; }
&gt; 
&gt; What guarantees that GetByIdVariant will not use a condition set to test for
&gt; a constant (in a non-prototype load)?

Just the fact that Repatch does not such optimization.  We effectively assert as much because of our use of slotBaseCondition() all over the place.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
&gt; &gt; +        return WTF::PtrHash&lt;JSObject*&gt;::hash(m_object) + m_condition.hash();
&gt; 
&gt; I think that XOR is a better way to mix bits in a hash than ADD, since ADD
&gt; will tend to make low bits zero. 

Really?  The effect on the lowest bit of ADD is identical to XOR:

0 + 0 = 0    0 ^ 0 = 0
0 + 1 = 1    0 ^ 1 = 1
1 + 0 = 1    1 ^ 0 = 1
1 + 1 = 0    1 ^ 1 = 0

&gt; Another option is to WTF::pairIntHash the
&gt; two hash codes.

I changed it to XOR.  I don&apos;t currently have evidence that this hashtable needs to be very optimized.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PropertyCondition.cpp:204
&gt; &gt; +    switch (m_kind) {
&gt; &gt; +    case Presence:
&gt; &gt; +    case Absence:
&gt; &gt; +    case Equivalence:
&gt; &gt; +        return structure-&gt;needImpurePropertyWatchpoint();
&gt; &gt; +    default:
&gt; &gt; +        return false;
&gt; &gt; +    }
&gt; 
&gt; I think what you&apos;re saying here is that objects that have impure
&gt; getOwnPropertySlot implementations may start returning new properties and
&gt; may stop returning old properties but must not start returning new setters
&gt; (without a change in structure). Is that right?

Yes.

&gt; 
&gt; As an empirical matter, I believe this observation is true.
&gt; 
&gt; Still, I think it&apos;s unnecessarily risky to turn this observation into an
&gt; API. Is it a clear speedup to do this? &quot;My property accesses are impure&quot; is
&gt; a pretty strong warning. I would forgive a programmer for not knowing that
&gt; the warning did not cover (absence of) setters.

This code is just preserving what our old prototype chain normalization did for put_by_id transitions.

AbsenceOfSetter comes into play for the prototype chain during a put_by_id transition.  A getOwnPropertySlot on a prototype cannot intercept the put_by_id - only an actual JS setter can.  Hence why AbsenceOfSetter behaves this way.  More on this below...

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PropertyCondition.cpp:214
&gt; &gt; +    // Currently we assume that an impure property can cause a property to appear, and can also
&gt; &gt; +    // &quot;shadow&quot; an existing JS property on the same object. Hence it affects both presence and
&gt; &gt; +    // absence. It doesn&apos;t affect AbsenceOfSetter because impure properties aren&apos;t ever setters.
&gt; 
&gt; Aha, yeah, I guess you say that here.
&gt; 
&gt; I think we should either remove this behavior or, if it&apos;s a necessary
&gt; speedup, document it in JSTypeInfo.h next to the definition of
&gt; HasImpureGetOwnPropertySlot.

This isn&apos;t new behavior, we&apos;ve always done it this way.  In a way, I&apos;m just preserving what we used to do for put_by_id transitions.

But it&apos;s more than that.  The getOwnPropertySlot API cannot cause a setter to appear, because the way to add a property to an object is you do JSValue::put(), and that method doesn&apos;t call getOwnPropertySlot - it directly consults the structures of the prototype chain to find setters.  Hence, there is nothing you could do in getOwnPropertySlot to cause a setter to appear on a prototype.  Therefore, this has nothing to do with HasImpureGetOwnPropertySlot because no matter how impure you made your getOwnPropertySlot, it still wouldn&apos;t affect setters.

I realize that this is a somewhat surprising behavior of our system, but it doesn&apos;t have anything to do with our patch, and it also doesn&apos;t have anything to do with the HasImpureGetOwnPropertySlot flag.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PropertyCondition.h:179
&gt; &gt; +        unsigned result = WTF::PtrHash&lt;UniquedStringImpl*&gt;::hash(m_uid) + static_cast&lt;unsigned&gt;(m_kind);
&gt; &gt; +        switch (m_kind) {
&gt; &gt; +        case Presence:
&gt; &gt; +            result += u.presence.offset;
&gt; &gt; +            result += u.presence.attributes;
&gt; &gt; +            break;
&gt; &gt; +        case Absence:
&gt; &gt; +        case AbsenceOfSetter:
&gt; &gt; +            result += WTF::PtrHash&lt;JSObject*&gt;::hash(u.absence.prototype);
&gt; &gt; +            break;
&gt; &gt; +        case Equivalence:
&gt; &gt; +            result += EncodedJSValueHash::hash(u.equivalence.value);
&gt; &gt; +            break;
&gt; &gt; +        }
&gt; 
&gt; I think that XOR is a better way to mix bits in a hash than ADD, since ADD
&gt; will tend to make low bits zero. Another option is to WTF::pairIntHash the
&gt; two hash codes.

Changed to XOR, though I&apos;m curious what you mean by the low bits becoming zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114402</commentid>
    <comment_count>58</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-08-03 15:19:19 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (In reply to comment #56)
&gt; &gt; Comment on attachment 257998 [details]
&gt; &gt; revised patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=257998&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
&gt; &gt; &gt; +    // A non-empty condition set means that this is a prototype load.
&gt; &gt; &gt; +    const ObjectPropertyConditionSet&amp; conditionSet() const { return m_conditionSet; }
&gt; &gt; 
&gt; &gt; What guarantees that GetByIdVariant will not use a condition set to test for
&gt; &gt; a constant (in a non-prototype load)?
&gt; 
&gt; Just the fact that Repatch does not such optimization.  We effectively
&gt; assert as much because of our use of slotBaseCondition() all over the place.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
&gt; &gt; &gt; +        return WTF::PtrHash&lt;JSObject*&gt;::hash(m_object) + m_condition.hash();
&gt; &gt; 
&gt; &gt; I think that XOR is a better way to mix bits in a hash than ADD, since ADD
&gt; &gt; will tend to make low bits zero. 
&gt; 
&gt; Really?  The effect on the lowest bit of ADD is identical to XOR:
&gt; 
&gt; 0 + 0 = 0    0 ^ 0 = 0
&gt; 0 + 1 = 1    0 ^ 1 = 1
&gt; 1 + 0 = 1    1 ^ 0 = 1
&gt; 1 + 1 = 0    1 ^ 1 = 0
&gt; 
Presumably talking about more than the last bit? Last n bits become biased towards containing a 0 bit (with n &gt; 1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114404</commentid>
    <comment_count>59</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-08-03 15:20:22 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; (In reply to comment #57)
&gt; &gt; (In reply to comment #56)
&gt; &gt; &gt; Comment on attachment 257998 [details]
&gt; &gt; &gt; revised patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=257998&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; r=me
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
&gt; &gt; &gt; &gt; +    // A non-empty condition set means that this is a prototype load.
&gt; &gt; &gt; &gt; +    const ObjectPropertyConditionSet&amp; conditionSet() const { return m_conditionSet; }
&gt; &gt; &gt; 
&gt; &gt; &gt; What guarantees that GetByIdVariant will not use a condition set to test for
&gt; &gt; &gt; a constant (in a non-prototype load)?
&gt; &gt; 
&gt; &gt; Just the fact that Repatch does not such optimization.  We effectively
&gt; &gt; assert as much because of our use of slotBaseCondition() all over the place.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
&gt; &gt; &gt; &gt; +        return WTF::PtrHash&lt;JSObject*&gt;::hash(m_object) + m_condition.hash();
&gt; &gt; &gt; 
&gt; &gt; &gt; I think that XOR is a better way to mix bits in a hash than ADD, since ADD
&gt; &gt; &gt; will tend to make low bits zero. 
&gt; &gt; 
&gt; &gt; Really?  The effect on the lowest bit of ADD is identical to XOR:
&gt; &gt; 
&gt; &gt; 0 + 0 = 0    0 ^ 0 = 0
&gt; &gt; 0 + 1 = 1    0 ^ 1 = 1
&gt; &gt; 1 + 0 = 1    1 ^ 0 = 1
&gt; &gt; 1 + 1 = 0    1 ^ 1 = 0
&gt; &gt; 
&gt; Presumably talking about more than the last bit? Last n bits become biased
&gt; towards containing a 0 bit (with n &gt; 1)


Ignore me, it&apos;s for the best, i was thinking in terms of actual addition (too much manual adder implementation lately)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114427</commentid>
    <comment_count>60</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-03 16:14:56 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/187780</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114445</commentid>
    <comment_count>61</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-08-03 17:14:41 -0700</bug_when>
    <thetext>Windows build fix: https://trac.webkit.org/changeset/187783

Also, looks like this broke 32-bit: https://build.webkit.org/builders/Apple%20Yosemite%2032-bit%20JSC%20%28BuildAndTest%29/builds/5353/steps/webkit-32bit-jsc-test/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114449</commentid>
    <comment_count>62</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-03 17:19:34 -0700</bug_when>
    <thetext>&gt; &gt; As an empirical matter, I believe this observation is true.
&gt; &gt; 
&gt; &gt; Still, I think it&apos;s unnecessarily risky to turn this observation into an
&gt; &gt; API. Is it a clear speedup to do this? &quot;My property accesses are impure&quot; is
&gt; &gt; a pretty strong warning. I would forgive a programmer for not knowing that
&gt; &gt; the warning did not cover (absence of) setters.
&gt; 
&gt; This code is just preserving what our old prototype chain normalization did
&gt; for put_by_id transitions.

Oops. I forgot that setters are only relevant on the put path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114473</commentid>
    <comment_count>63</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-03 18:15:18 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; Windows build fix: https://trac.webkit.org/changeset/187783
&gt; 
&gt; Also, looks like this broke 32-bit:
&gt; https://build.webkit.org/builders/Apple%20Yosemite%2032-
&gt; bit%20JSC%20%28BuildAndTest%29/builds/5353/steps/webkit-32bit-jsc-test/logs/
&gt; stdio

Oh man, I didn&apos;t see that in my local 32-bit testing.  Probably because it&apos;s a nasty case of uninitialized memory.  Fixed here: http://trac.webkit.org/changeset/187794</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114504</commentid>
    <comment_count>64</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-08-03 20:44:41 -0700</bug_when>
    <thetext>12 JSC tests are failing on Windows now:
https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/67105/steps/jscore-test/logs/stdio

and canvas tests are crashing (not sure if that&apos;s related).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114553</commentid>
    <comment_count>65</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 00:16:17 -0700</bug_when>
    <thetext>(In reply to comment #64)
&gt; 12 JSC tests are failing on Windows now:
&gt; https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/
&gt; builds/67105/steps/jscore-test/logs/stdio
&gt; 
&gt; and canvas tests are crashing (not sure if that&apos;s related).

The Windows test regressions are gone after http://trac.webkit.org/changeset/187794.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114555</commentid>
    <comment_count>66</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 00:21:22 -0700</bug_when>
    <thetext>(In reply to comment #64)
&gt; 12 JSC tests are failing on Windows now:
&gt; https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/
&gt; builds/67105/steps/jscore-test/logs/stdio
&gt; 
&gt; and canvas tests are crashing (not sure if that&apos;s related).

I wasn&apos;t able to find the canvas failures.  Do you have a link?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114562</commentid>
    <comment_count>67</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 00:37:14 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; (In reply to comment #58)
&gt; &gt; (In reply to comment #57)
&gt; &gt; &gt; (In reply to comment #56)
&gt; &gt; &gt; &gt; Comment on attachment 257998 [details]
&gt; &gt; &gt; &gt; revised patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=257998&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; r=me
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
&gt; &gt; &gt; &gt; &gt; +    // A non-empty condition set means that this is a prototype load.
&gt; &gt; &gt; &gt; &gt; +    const ObjectPropertyConditionSet&amp; conditionSet() const { return m_conditionSet; }
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; What guarantees that GetByIdVariant will not use a condition set to test for
&gt; &gt; &gt; &gt; a constant (in a non-prototype load)?
&gt; &gt; &gt; 
&gt; &gt; &gt; Just the fact that Repatch does not such optimization.  We effectively
&gt; &gt; &gt; assert as much because of our use of slotBaseCondition() all over the place.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
&gt; &gt; &gt; &gt; &gt; +        return WTF::PtrHash&lt;JSObject*&gt;::hash(m_object) + m_condition.hash();
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I think that XOR is a better way to mix bits in a hash than ADD, since ADD
&gt; &gt; &gt; &gt; will tend to make low bits zero. 
&gt; &gt; &gt; 
&gt; &gt; &gt; Really?  The effect on the lowest bit of ADD is identical to XOR:
&gt; &gt; &gt; 
&gt; &gt; &gt; 0 + 0 = 0    0 ^ 0 = 0
&gt; &gt; &gt; 0 + 1 = 1    0 ^ 1 = 1
&gt; &gt; &gt; 1 + 0 = 1    1 ^ 0 = 1
&gt; &gt; &gt; 1 + 1 = 0    1 ^ 1 = 0
&gt; &gt; &gt; 
&gt; &gt; Presumably talking about more than the last bit? Last n bits become biased
&gt; &gt; towards containing a 0 bit (with n &gt; 1)
&gt; 
&gt; 
&gt; Ignore me, it&apos;s for the best, i was thinking in terms of actual addition
&gt; (too much manual adder implementation lately)

Can you explain, for my edification?

I often use + instead of ^ when constructing a hash function that is a combination of other hash functions, under the assumption that it just doesn&apos;t matter.  At the instruction set level, + is every-so-slightly cheaper since you can do a three-operand + on x86 but ^ only comes in two-operand forms.  Heck, you can even do a four-operand + on x86: a = b + c + d so long as d is an immediate.  If it&apos;s the case that ^ is fundamentally better, I&apos;d like to know!

Not that it matters in practice for a data structure such as this one.  We already have a bunch of data structures like this that combine the hash codes of the various fields using something naive like +, and we don&apos;t really have good evidence that improving those hash functions would improve the bottom line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114645</commentid>
    <comment_count>68</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-04 10:56:25 -0700</bug_when>
    <thetext>&gt; Can you explain, for my edification?

My thinking was simply that XOR has uniform distribution over all the bits, while ADD biases toward the top of the number line due to carry, therefore reducing uniformity. I think this might be extra true in the Presence hash, which adds raw integers (and not integer hashes). I think this might also be extra important in small tables, since we mask off the high bits of the hash code, making bias in the low bits more harmful.

For example, if it were common for attributes to be 0b11, the ADD hash would collide 100% of the time in a table with capacity four.

A bit of googling suggests that WTF::pairIntHash, which uses a multiplication method, best avoids the pitfalls of both ADD and XOR. But you have to pay for the multiplication.

I haven&apos;t done a lot of research on this. Perhaps I am mistaken.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256760</attachid>
            <date>2015-07-13 23:28:58 -0700</date>
            <delta_ts>2015-07-14 13:23:41 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19482</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY3OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3
YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4i
KTsKIAogICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1Vu
cHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAg
IGlmIChpc09uTGlzdCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KEpTVmFsdWUobV9vYmplY3QpLCAiOiAi
LCBjb25kaXRvbigpLCAiIG9mICIsIG1fdWlkKTsKKyAgICBpZiAoY29uZGl0aW9uKCkgPT0gUHJl
c2VuY2UpCisgICAgICAgIG91dC5wcmludCgiIGF0ICIsIG1fb2Zmc2V0LCAiIHdpdGggYXR0cmli
dXRlcyAiLCBtX2F0dHJpYnV0ZXMpOworfQorCitib29sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludFNldEtleTo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IG9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAobmV3U3RydWN0dXJlLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChjb25kaXRpb24oKSkgeworICAgIGNhc2UgUHJv
cGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1
cnJlbnRPZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSwgJmN1cnJl
bnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0KCkgfHwg
Y3VycmVudEF0dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2U6IHsKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZS0+aXNVbmNhY2hl
YWJsZURpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSkgIT0gaW52YWxp
ZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
fSB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAg
IGlmICghbV9rZXkuaXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgaWYgKERGRzo6c2hvdWxkU2hv
d0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAi
LCBSYXdQb2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAg
IAorICAgICAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9V
bnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgp
LT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCh0aGlzKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEpTQzo6REZHOjpQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAg
c3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIEpTQzo6REZHOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmludCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSlNDOjpERkc6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAg
ICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIGNsYXNzIFByb3BlcnR5Q29uZGl0
aW9uIHsKKyAgICBQcmVzZW5jZSwgLy8gV2UncmUgZmluZSBzbyBsb25nIGFzIHRoZSBwcm9wZXJ0
eSBpcyBwcmVzZW50LgorICAgIEFic2VuY2UgLy8gV2UncmUgZmluZSBzbyBsb25nIGFzIHRoZSBw
cm9wZXJ0eSBpcyBhYnNlbnQuCit9OworCitjbGFzcyBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRTZXRLZXkgeworcHVibGljOgorICAgIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNldEtl
eSgpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChudWxscHRy
KQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgICAgICwgbV9hdHRyaWJ1dGVzKDApCisgICAg
eworICAgIH0KKyAgICAKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRrZXkoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIp
CisgICAgICAgICwgbV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX29mZnNldCgxKQorICAgICAg
ICAsIG1fYXR0cmlidXRlcygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50U2V0S2V5KAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0
eUNvbmRpdGlvbiBjb25kaXRpb24sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsCisgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMgPSAwKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX3Vp
ZCh1aWQpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fYXR0cmlidXRl
cygwKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X29mZnNldCAhPSBpbnZhaWRPZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1f
b2JqZWN0ICYmICFtX29mZnNldCB9OworICAgIAorICAgIEpTT2JqZWN0KiBvYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQgPyBBYnNlbmNlIDogUHJl
c2VuY2U7IH0KKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91
aWQ7IH0KKyAgICBQcm9wZXJ0eW9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dDsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXM7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhh
c2g8SlNPYmplY3QqPihtX29iamVjdCkgKyBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwq
PihtX3VpZCkgKyBtX29mZnNldCArIG1fYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNldEtleSYgb3Ro
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAg
ICAgICAgICAgICYmIG1fdWlkID09IG90aGVyLm1fdWlkCisgICAgICAgICAgICAmJiBtX29mZnNl
dCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9hdHRyaWJ1dGVzID09IG90aGVy
Lm1fYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fb2Zmc2V0
ID09IDE7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgSlNPYmplY3QqIG1fb2JqZWN0OworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBt
X3VpZDsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOworfTsKKworY2xhc3MgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5SGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50U2V0S2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBl
cXVhbCgKKyAgICAgICAgY29uc3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5JiBh
LCBjb25zdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkmIGIpCisgICAgeworICAg
ICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCitjbGFzcyBBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRTZXRLZXkmIGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAg
ICAgIDogbV9rZXkoa2V5KQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICB7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25z
dCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50U2V0S2V5IG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6UHJvcGVydHlDb25kaXRpb24p
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
U2V0S2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50U2V0S2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhh
c2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6
REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXk+IHsgfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4Njc5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQo
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBXYXRj
aHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVm
ZmVyVmlldyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQogeworICAgIFdhdGNocG9pbnQqIHdh
dGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7CiAgICAgQXJyYXlC
dWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50KiBuZXV0ZXJpbmdXYXRjaHBvaW50ID0KICAgICAgICAg
QXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50OjpjcmVhdGUoKmNvZGVCbG9jay0+dm0oKSk7
CiAgICAgbmV1dGVyaW5nV2F0Y2hwb2ludC0+c2V0KCktPmFkZCh3YXRjaHBvaW50KTsKQEAgLTQ1
LDEwICs0NiwyOSBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphCiB9
CiAKIHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1
ZSwgQ29tbW9uRGF0YSYgY29tbW9uKQogewogICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQoaW5m
ZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRl
ciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3YXksIHdlIGdv
IGF3YXksIHRvby4KLSAgICBpbmZlcnJlZFZhbHVlLT5hZGQod2F0Y2hwb2ludCk7CisgICAgaW5m
ZXJyZWRWYWx1ZS0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Cit9CisK
K3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAorICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBjb25zdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkm
IGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgp
KSB7CisgICAgICAgIC8vIFRoZSBrZXkncyBvYmplY3QgbXVzdCBiZSBpbiB0aGUgd2VhayByZWZl
cmVuY2Ugc2V0LgorICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0
byYgd2VhayA6IGNvbW1vbi53ZWFrUmVmZXJlbmNlcykgeworICAgICAgICAgICAgaWYgKHdlYWsu
Z2V0KCkgPT0ga2V5Lm9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGZvdW5kKTsKKyAgICB9CisgICAgCisgICAga2V5Lm9iamVjdCgpLT5z
dHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCisgICAgICAgIGNvbW1vbi5hZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jaykpOwogfQogCiBEZXNp
cmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiArOTQsMTEg
QEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVmZmVy
Vmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRk
TGF6aWx5KGNvbnN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNldEtleSYga2V5KQorewor
ICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERl
c2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
aWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC04OCw2ICsxMTMsNyBAQCB2b2lk
IERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmxpbmVTZXRzLnJl
YWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1faW5mZXJyZWRWYWx1ZXMucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtOTUsNyArMTIxLDggQEAgYm9vbCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgIHJldHVybiBtX3NldHMuYXJlU3Rp
bGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAg
ICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9idWZm
ZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3Rp
bGxWYWxpZCgpCisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFs
aWQoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAx
ODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIklu
ZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgpAQCAtNDEsMTUg
KzQyLDE1IEBAIGNsYXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdl
bmVyaWNTZXRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgVCBzZXQs
IFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayos
IFQgc2V0LCBDb21tb25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5h
ZGQod2F0Y2hwb2ludCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2lu
dHMuYWRkKGNvZGVCbG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxp
ZGF0ZWQoVCBzZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KIH07CiAK
IHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVC
bG9jayosIEluZmVycmVkVmFsdWUqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGljIHZvaWQgYWRk
KENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJv
b2wgaGFzQmVlbkludmFsaWRhdGVkKEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUpCiAgICAg
ewogICAgICAgICByZXR1cm4gaW5mZXJyZWRWYWx1ZS0+aGFzQmVlbkludmFsaWRhdGVkKCk7CkBA
IC02MCw5ICs2MSwxNSBAQCBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3Ig
CiAgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgV2F0
Y2hwb2ludCopOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChKU0FycmF5QnVm
ZmVyVmlldyogdmlldykKICAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gIXZpZXctPmxlbmd0
aCgpOwotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuICF2aWV3LT5sZW5ndGgoKTsKKyAgICB9Cit9OworCitjbGFzcyBB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQo
Q29kZUJsb2NrKiwgY29uc3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5JiwgQ29t
bW9uRGF0YSYpOworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVy
biAha2V5LmlzU3RpbGxWYWxpZCgpOwogICAgIH0KIH07CiAKQEAgLTg3LDcgKzk0LDcgQEAgcHVi
bGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAog
ICAgICAgICBmb3IgKGF1dG8mIHNldCA6IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFk
ZChjb2RlQmxvY2ssIHNldCwgY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAg
ICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAg
CiAgICAgICAgIG1fcmVhbGx5QWRkZWQgPSB0cnVlOwogICAgIH0KQEAgLTEyMiw2ICsxMjksMTAg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAgICB2b2lk
IGFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0J3MgcmVjb21t
ZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UKKyAgICAvLyBHcmFw
aDo6YWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LCB3aGljaCBkb2VzIHRoZSByZXF1aXJl
ZCBHQyBtYWdpYyBhcyB3ZWxsLgorICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludFNldEtleSYpOworICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0
dXJlKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwgQ29tbW9uRGF0YSYp
OwpAQCAtMTQ0LDEyICsxNTUsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyVmlld3MuaXNXYXRjaGVkKHZpZXcpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hlZChj
b25zdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkmIGtleSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9
CiAgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2lu
dFNldCo+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElubGluZVdhdGNo
cG9pbnRTZXQqPiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJ
bmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAg
ICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVm
ZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOworICAgIEdlbmVyaWNEZXNp
cmVkV2F0Y2hwb2ludHM8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5LCBBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ4LDYgKzg0OCw0NSBAQCB2
b2lkIEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCitib29s
IEdyYXBoOjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50U2V0S2V5JiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNTdGlsbFZhbGlk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5j
ZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAgbV9wbGFuLndhdGNocG9pbnRzLmFkZExh
emlseShrZXkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjp3YXRjaFByZXNl
bmNlT2ZQcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit7CisgICAg
cmV0dXJuIGFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5KAorICAgICAgICAgICAgb2JqZWN0LCBQcm9wZXJ0eUNv
bmRpdGlvbjo6UHJlc2VuY2UsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKSk7Cit9CisKK2Jvb2wg
R3JhcGg6OndhdGNoQWJzZW5jZU9mUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gYWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50KAorICAgICAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkoCisgICAgICAg
ICAgICBvYmplY3QsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlLCB1aWQpKTsKK30KKwordm9p
ZCBHcmFwaDo6d2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIAor
ICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgJmF0dHJpYnV0ZXMp
OworICAgIAorICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgcmV0dXJu
IHdhdGNoQWJzZW5jZU9mUHJvcGVydHkob2JqZWN0LCB1aWQpOworICAgIAorICAgIHJldHVybiB3
YXRjaFByZXNlbmNlT2ZQcm9wZXJ0eShvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsK
K30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxG
dWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNz
LmZpbmQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSwyNCBAQCBwdWJsaWM6CiAgICAgRGVzaXJl
ZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsg
fQogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBtX3BsYW4u
d2F0Y2hwb2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBrZXkgaXMg
YWxyZWFkeSBpbnZhbGlkLgorICAgIGJvb2wgYWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
KGNvbnN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNldEtleSYpOworICAgIAorICAgIC8v
IEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRoaXMgY29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVj
dCBoYXZpbmcgdGhlIGdpdmVuIHByb3BlcnR5IHdpdGgKKyAgICAvLyB0aGUgZ2l2ZW4gb2Zmc2V0
IGFuZCBhdHRyaWJ1dGVzLiBSZXR1cm5zIGZhbHNlIGlmIHdhdGNoaW5nIGZvciB0aGlzIGlzIGlt
cG9zc2libGUuCisgICAgYm9vbCB3YXRjaFByZXNlbmNlT2ZQcm9wZXJ0eSgKKyAgICAgICAgSlNP
YmplY3QqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2YgdGhpcyBjb21w
aWxhdGlvbiBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGxhY2tpbmcgdGhlIGdpdmVuIHByb3BlcnR5Lgor
ICAgIC8vIFJldHVybnMgZmFsc2UgaWYgd2F0Y2hpbmcgZm9yIHRoaXMgaXMgaW1wb3NzaWJsZS4K
KyAgICBib29sIHdhdGNoQWJzZW5jZU9mUHJvcGVydHkoCisgICAgICAgIEpTT2JqZWN0KiwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2Yg
dGhpcyBjb21waWxhdGlvbiBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGVpdGhlciBoYXZpbmcsIG9yIGxh
Y2tpbmcsIHRoZQorICAgIC8vIHByb3BlcnR5IGluIHRoZSBzYW1lIHdheSBhcyB0aGUgZ2l2ZW4g
c3RydWN0dXJlIGNsYWltcyB0byBoYXZlIChvciBsYWNrKSB0aGUgcHJvcGVydHkuCisgICAgYm9v
bCB3YXRjaFByZXNlcnZhdGlvbk9mUHJvcGVydHkoCisgICAgICAgIEpTT2JqZWN0KiwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworCiAgICAgRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxp
dmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256789</attachid>
            <date>2015-07-14 13:23:41 -0700</date>
            <delta_ts>2015-07-15 16:04:53 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32077</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODUyLDYgKzQ4NTYsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
ZXQ7IH0KKworICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGNoZWNrcyBkb24ndCBh
Y3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBleGFjdGx5IHRoaXMKKyAgICAv
LyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVjdHVyZSwgc28gbG9uZyBhcyB0
aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBvbmUgYWJvdXQgdGhl
IHByb3BlcnR5IGJlaW5nIGxvYWRlZC4KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7
IH0KKyAgICAKICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWx0ZXJuYXRlQmFzZTsgfQogICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw5IEBAIHB1Ymxp
YzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXND
YWxscygpIGNvbnN0OwogICAgIAorICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGNo
ZWNrcyBkb24ndCBhY3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBleGFjdGx5
IHRoaXMKKyAgICAvLyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVjdHVyZSwg
c28gbG9uZyBhcyB0aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBv
bmUgYWJvdXQgdGhlIHByb3BlcnR5IGJlaW5nIHN0b3JlZC4KICAgICBjb25zdCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9jb25zdGFudENoZWNrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRTZXRLZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
SlNWYWx1ZShtX29iamVjdCksICI6ICIsIGNvbmRpdG9uKCksICIgb2YgIiwgbV91aWQpOworICAg
IGlmIChjb25kaXRpb24oKSA9PSBQcmVzZW5jZSkKKyAgICAgICAgb3V0LnByaW50KCIgYXQgIiwg
bV9vZmZzZXQsICIgd2l0aCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcyk7Cit9CisKK2Jvb2wg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5Ojppc1N0aWxsVmFsaWQoKSBjb25zdAor
eworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gb2JqZWN0KCktPnN0cnVjdHVyZSgpOwor
ICAgIGlmIChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbigpKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAg
ICAgaWYgKG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCgpLCAmY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVu
dE9mZnNldCAhPSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgCisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICBpZiAo
bmV3U3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJl
RGV0YWlsJiBkZXRhaWwpCit7CisgICAgaWYgKCFtX2tleS5pc1N0aWxsVmFsaWQoKSkgeworICAg
ICAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgICAgIGRhdGFM
b2coIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29k
ZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbihQ
cm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1p
emF0aW9uLCAmZGV0YWlsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tl
eS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpERkc6OlByb3BlcnR5Q29uZGl0
aW9uIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgIGNhc2UgSlND
OjpERkc6OlByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQ
cmVzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkRGRzo6UHJvcGVydHlD
b25kaXRpb246OkFic2VuY2U6CisgICAgICAgIG91dC5wcmludCgiQWJzZW5jZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Vu
dW0gY2xhc3MgUHJvcGVydHlDb25kaXRpb24geworICAgIFByZXNlbmNlLCAvLyBXZSdyZSBmaW5l
IHNvIGxvbmcgYXMgdGhlIHByb3BlcnR5IGlzIHByZXNlbnQuCisgICAgQWJzZW5jZSAvLyBXZSdy
ZSBmaW5lIHNvIGxvbmcgYXMgdGhlIHByb3BlcnR5IGlzIGFic2VudC4KK307CisKK2NsYXNzIEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNldEtleSB7CitwdWJsaWM6CisgICAgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5KCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQor
ICAgICAgICAsIG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICAgICAg
LCBtX2F0dHJpYnV0ZXMoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludFNldGtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAg
ICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChudWxscHRyKQorICAgICAg
ICAsIG1fb2Zmc2V0KDEpCisgICAgICAgICwgbV9hdHRyaWJ1dGVzKDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkoCisgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QsIFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNl
dCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApCisgICAgICAgIDogbV9vYmplY3Qo
b2JqZWN0KQorICAgICAgICAsIG1fdWlkKHVpZCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgICAgICwgbV9hdHRyaWJ1dGVzKDApCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb2Zmc2V0ICE9IGludmFpZE9mZnNldCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhbV9vYmplY3QgJiYgIW1fb2Zmc2V0IH07CisgICAgCisgICAg
SlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJvcGVy
dHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgPT0gaW52YWxp
ZE9mZnNldCA/IEFic2VuY2UgOiBQcmVzZW5jZTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIFByb3BlcnR5b2Zmc2V0IG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxKU09iamVjdCo+KG1fb2JqZWN0KSArIFdURjo6UHRy
SGFzaDxVbmlxdWVkU3RyaW5nSW1wbCo+KG1fdWlkKSArIG1fb2Zmc2V0ICsgbV9hdHRyaWJ1dGVz
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50U2V0S2V5JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVj
dCA9PSBvdGhlci5tX29iamVjdAorICAgICAgICAgICAgJiYgbV91aWQgPT0gb3RoZXIubV91aWQK
KyAgICAgICAgICAgICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAgICAgICAm
JiBtX2F0dHJpYnV0ZXMgPT0gb3RoZXIubV9hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhbV9vYmplY3QgJiYgbV9vZmZzZXQgPT0gMTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N0
aWxsVmFsaWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBKU09iamVjdCogbV9vYmplY3Q7Cisg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cit9OworCitjbGFzcyBBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRTZXRLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2go
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25zdCBBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRTZXRLZXkmIGEsIGNvbnN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dFNldEtleSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307
CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50
IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIGNv
bnN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNldEtleSYga2V5LAorICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICwgbV9jb2Rl
QmxvY2soY29kZUJsb2NrKQorICAgIHsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkgbV9rZXk7CisgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
bmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
REZHOjpQcm9wZXJ0eUNvbmRpdGlvbik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNldEtleT4gOiBTaW1w
bGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNl
dEtleT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAg
ICAgYm9vbCBpc0RpcmVjdCk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImKTsKKyAgICB2b2lkIGVtaXRQcm9wZXJ0eUNoZWNrcyhjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKIAogICAg
IHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJDYWNoZXMoKTsKQEAg
LTcwNSwxMyArNzA1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0K
ICAgICAKLSAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBv
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIE5vZGUqIGNlbGxDb25zdGFudFdpdGhQ
cm9wZXJ0eUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0ZSB0byBlbWl0UHJvcGVydHlDaGVj
aywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3VycmVudGx5LAorICAgICAgICAvLyB0
aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFByb3BlcnR5Q2hlY2soKSBzaW5jZSB3
ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKKyAgICAgICAgLy8gb2JqZWN0J3Mgc3RydWN0
dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nvc250YW50LgogICAgICAgICBOb2Rl
KiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgYWRkVG9HcmFw
aChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVy
ZSkpLCBvYmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CiAgICAgfQogICAg
IAorICAgIHZvaWQgZW1pdFByb3BlcnR5Q2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2dyYXBoLndhdGNoUHJlc2VydmF0aW9uT2ZQcm9wZXJ0eShvYmplY3QsIHVpZCwgc3RydWN0dXJl
KSkKKyAgICAgICAgICAgIGNlbGxDb25zdGFudFdpdGhQcm9wZXJ0eUNoZWNrKG9iamVjdCwgc3Ry
dWN0dXJlKTsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldp
dGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7CkBAIC0yMjkwLDEwICsyMjk5LDEwIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEJ5dGVDb2Rl
UGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZl
Y3RvcikKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQcm9wZXJ0eUNoZWNrcyhjb25zdCBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAg
ICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHZlY3RvcltpXS5jb25zdGFudCgp
LCB2ZWN0b3JbaV0uc3RydWN0dXJlKCkpOworICAgICAgICBlbWl0UHJvcGVydHlDaGVjayh2ZWN0
b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpLCB1aWQpOwogfQogCiB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMyMiw4ICsyMzMxLDExIEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgIC8vIDEpIEVtaXQgcHJv
dG90eXBlIHN0cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMuIFRoaXMgY291bGQgc29ydCBv
ZiBtYXliZSBub3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwgaWYgdGhlcmUgaXMgc29tZSBy
YXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCByZXF1aXJlcyBhIGxvdAogICAg
ICAgICAvLyAgICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBhcmUgbm90IHdhdGNocG9pbnRh
YmxlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5SWRTdGF0dXMu
bnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KQotICAgICAgICAgICAgZW1pdENoZWNrcyhn
ZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2
YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAg
ICAgICAgICAgICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSwK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0p
OworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyAyKSBFbWl0IGEgTXVsdGlHZXRCeU9m
ZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0
aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKQEAgLTIzNDQsNyArMjM1Niw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICAgICAgCiAgICAgYWRkVG9HcmFw
aChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7CiAgICAgCi0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNv
bnN0YW50Q2hlY2tzKCkpOworICAgIGVtaXRQcm9wZXJ0eUNoZWNrcyh2YXJpYW50LmNvbnN0YW50
Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAKICAg
ICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25z
dGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7CkBAIC0yNDM4LDcgKzI0NTAsOSBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRl
eC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0u
a2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFy
aWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHJvcGVy
dHlDaGVja3MoCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4
XS5jb25zdGFudENoZWNrcygpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZp
ZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIApAQCAtMjQ2Myw3ICsyNDc3LDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0
QnlJZCgKICAgICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tz
KHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcygK
KyAgICAgICAgICAgIHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAgICAgIG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAKICAgICAgICAgQVNTRVJUKHZh
cmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1MTksNyArMjUzNSw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAg
ICAgICAgICBDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZh
cmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIAotICAgICAgICBlbWl0Q2hlY2tz
KHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcyh2
YXJpYW50LmNvbnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVy
TnVtYmVyXSk7CiAgICAgICAgIAogICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
CiAgICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNl
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJl
dmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRl
ICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdKdW1wUmVw
bGFjZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJK
U0NlbGwuaCIKQEAgLTk4LDYgKzk5LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJp
ZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+PiB3ZWFrU3RydWN0dXJlUmVmZXJlbmNlczsKICAgICBCYWc8Q29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50PiB3YXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50PiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1w
UmVwbGFjZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7CiAgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVy
OjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODY3OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hw
b2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZl
clZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRj
aHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVm
ZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFy
cmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwog
ICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwx
MCArNDYsMjkgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQog
CiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQp
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUs
IENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVy
cmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIg
aWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBh
d2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVy
cmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2
b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5JiBr
ZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3sKKyAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkg
eworICAgICAgICAvLyBUaGUga2V5J3Mgb2JqZWN0IG11c3QgYmUgaW4gdGhlIHdlYWsgcmVmZXJl
bmNlIHNldC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8m
IHdlYWsgOiBjb21tb24ud2Vha1JlZmVyZW5jZXMpIHsKKyAgICAgICAgICAgIGlmICh3ZWFrLmdl
dCgpID09IGtleS5vYmplY3QoKSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVChmb3VuZCk7CisgICAgfQorICAgIAorICAgIGtleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAorICAgICAgICBjb21tb24uYWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spKTsKIH0KIAogRGVzaXJl
ZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KQEAgLTc0LDYgKzk0LDExIEBA
IHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSlNBcnIKICAgICBtX2J1ZmZlclZp
ZXdzLmFkZExhemlseSh2aWV3KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseShjb25zdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkmIGtleSkKK3sKKyAg
ICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlm
ICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtODgsNiArMTEzLDcgQEAgdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5saW5lU2V0cy5yZWFs
bHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRk
KGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9p
bnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTk1LDcgKzEyMSw4IEBAIGJvb2wgRGVzaXJl
ZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0aWxs
VmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAg
ICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYnVmZmVy
Vmlld3MuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxs
VmFsaWQoKQorICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlk
KCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg2
Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJJbmZl
cnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKQEAgLTQxLDE1ICs0
MiwxNSBAQCBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0cnVjdCBHZW5l
cmljU2V0QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIFQgc2V0LCBX
YXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBU
IHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNldC0+YWRk
KHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0LT5hZGQoY29tbW9uLndhdGNocG9pbnRz
LmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRh
dGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9CiB9OwogCiBz
dHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29s
IGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwpAQCAt
NjAsOSArNjEsMTUgQEAgc3RydWN0IEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yIAog
ICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNo
cG9pbnQqKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZl
clZpZXcqIHZpZXcpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9ICF2aWV3LT5sZW5ndGgo
KTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiAhdmlldy0+bGVuZ3RoKCk7CisgICAgfQorfTsKKworY2xhc3MgQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRkKENv
ZGVCbG9jayosIGNvbnN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNldEtleSYsIENvbW1v
bkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5JiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4g
IWtleS5pc1N0aWxsVmFsaWQoKTsKICAgICB9CiB9OwogCkBAIC04Nyw3ICs5NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVhbGx5QWRkZWQpOwogICAgICAgICAKICAg
ICAgICAgZm9yIChhdXRvJiBzZXQgOiBtX3NldHMpCi0gICAgICAgICAgICBBZGFwdG9yOjphZGQo
Y29kZUJsb2NrLCBzZXQsIGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CisgICAg
ICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbik7CiAgICAgICAgIAog
ICAgICAgICBtX3JlYWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CkBAIC0xMjIsNiArMTI5LDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIGFkZExhemlseShJbmZlcnJlZFZhbHVlKik7CiAgICAgdm9pZCBh
ZGRMYXppbHkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKICAgICAKKyAgICAvLyBJdCdzIHJlY29tbWVu
ZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlCisgICAgLy8gR3JhcGg6
OmFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCwgd2hpY2ggZG9lcyB0aGUgcmVxdWlyZWQg
R0MgbWFnaWMgYXMgd2VsbC4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRTZXRLZXkmKTsKKyAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVy
ZSopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEmKTsK
QEAgLTE0NCwxMiArMTU1LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1
ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29u
c3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5JiBrZXkpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAgfQog
ICAgIAogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPFdhdGNocG9pbnRT
ZXQqPiBtX3NldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmxpbmVXYXRjaHBv
aW50U2V0Kj4gbV9pbmxpbmVTZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5m
ZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFsdWVzOwogICAg
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZl
clZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKKyAgICBHZW5lcmljRGVzaXJl
ZFdhdGNocG9pbnRzPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludFNldEtleSwgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0OCw2ICs4NDgsNDUgQEAgdm9p
ZCBHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZUZsYQogICAgIH0KIH0KIAorYm9vbCBH
cmFwaDo6YWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KGNvbnN0IEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludFNldEtleSYga2V5KQoreworICAgIGlmICgha2V5LmlzU3RpbGxWYWxpZCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2Vz
LmFkZExhemlseShrZXkub2JqZWN0KCkpOworICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXpp
bHkoa2V5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaDo6d2F0Y2hQcmVzZW5j
ZU9mUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAgIHJl
dHVybiBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludFNldEtleSgKKyAgICAgICAgICAgIG9iamVjdCwgUHJvcGVydHlDb25k
aXRpb246OlByZXNlbmNlLCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcykpOworfQorCitib29sIEdy
YXBoOjp3YXRjaEFic2VuY2VPZlByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dCgKKyAgICAgICAgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50U2V0S2V5KAorICAgICAgICAg
ICAgb2JqZWN0LCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSwgdWlkKSk7Cit9CisKK3ZvaWQg
R3JhcGg6OndhdGNoUHJlc2VydmF0aW9uT2ZQcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAKKyAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsICZhdHRyaWJ1dGVzKTsK
KyAgICAKKyAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgICAgIHJldHVybiB3
YXRjaEFic2VuY2VPZlByb3BlcnR5KG9iamVjdCwgdWlkKTsKKyAgICAKKyAgICByZXR1cm4gd2F0
Y2hQcmVzZW5jZU9mUHJvcGVydHkob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7Cit9
CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5m
aW5kKGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShy
ZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY3NSw2ICs2NzUsMjQgQEAgcHVibGljOgogICAgIERlc2lyZWRJ
ZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0K
ICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndh
dGNocG9pbnRzOyB9CiAgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUga2V5IGlzIGFs
cmVhZHkgaW52YWxpZC4KKyAgICBib29sIGFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludChj
b25zdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRTZXRLZXkmKTsKKyAgICAKKyAgICAvLyBH
YXRlIHRoZSB2YWxpZGl0eSBvZiB0aGlzIGNvbXBpbGF0aW9uIG9uIHRoZSBnaXZlbiBvYmplY3Qg
aGF2aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSB3aXRoCisgICAgLy8gdGhlIGdpdmVuIG9mZnNldCBh
bmQgYXR0cmlidXRlcy4gUmV0dXJucyBmYWxzZSBpZiB3YXRjaGluZyBmb3IgdGhpcyBpcyBpbXBv
c3NpYmxlLgorICAgIGJvb2wgd2F0Y2hQcmVzZW5jZU9mUHJvcGVydHkoCisgICAgICAgIEpTT2Jq
ZWN0KiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpOworICAgIAorICAgIC8vIEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRoaXMgY29tcGls
YXRpb24gb24gdGhlIGdpdmVuIG9iamVjdCBsYWNraW5nIHRoZSBnaXZlbiBwcm9wZXJ0eS4KKyAg
ICAvLyBSZXR1cm5zIGZhbHNlIGlmIHdhdGNoaW5nIGZvciB0aGlzIGlzIGltcG9zc2libGUuCisg
ICAgYm9vbCB3YXRjaEFic2VuY2VPZlByb3BlcnR5KAorICAgICAgICBKU09iamVjdCosIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIAorICAgIC8vIEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRo
aXMgY29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVjdCBlaXRoZXIgaGF2aW5nLCBvciBsYWNr
aW5nLCB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGdpdmVuIHN0
cnVjdHVyZSBjbGFpbXMgdG8gaGF2ZSAob3IgbGFjaykgdGhlIHByb3BlcnR5LgorICAgIGJvb2wg
d2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAorICAgICAgICBKU09iamVjdCosIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKwogICAgIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256875</attachid>
            <date>2015-07-15 16:04:53 -0700</date>
            <delta_ts>2015-07-15 16:20:09 -0700</delta_ts>
            <desc>start of a better approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42815</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODUyLDYgKzQ4NTYsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
ZXQ7IH0KKworICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGNoZWNrcyBkb24ndCBh
Y3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBleGFjdGx5IHRoaXMKKyAgICAv
LyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVjdHVyZSwgc28gbG9uZyBhcyB0
aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBvbmUgYWJvdXQgdGhl
IHByb3BlcnR5IGJlaW5nIGxvYWRlZC4KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7
IH0KKyAgICAKICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWx0ZXJuYXRlQmFzZTsgfQogICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tl
ZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
SlNWYWx1ZShtX29iamVjdCksICI6ICIsIG1fY29uZGl0aW9uLCAiIG9mICIsIG1fdWlkKTsKKyAg
ICBzd2l0Y2ggKG1fY29uZGl0aW9uKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJl
c2VuY2U6CisgICAgICAgIG91dC5wcmludCgiIGF0ICIsIG1fb2Zmc2V0LCAiIHdpdGggYXR0cmli
dXRlcyAiLCBtX2F0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm9wZXJ0
eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5cGUg
IiwgSlNPYmplY3QocHJvdG90eXBlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjppc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbigpKSB7CisgICAgY2FzZSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVu
dE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmli
dXRlcyk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IG9mZnNldCgpIHx8IGN1cnJlbnRB
dHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpICE9IGludmFsaWRPZmZzZXQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfSB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFjY29yZGluZ1RvU3Ry
dWN0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1
Y3R1cmUobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAg
IGlmICghaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoc3RydWN0dXJlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChtX2NvbmRpdGlvbiA9PSBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLmhh
c0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlk
KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OmlzV2F0Y2hhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmIChz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKHN0cnVj
dHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNXYXRjaGFibGUobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAor
eworICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vYmplY3QpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgaWYgKG1fY29uZGl0aW9uID09IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRy
YWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIHRyYWNrZWQuY2hlY2sobV9v
YmplY3QpOworICAgIAorICAgIGlmIChtX2NvbmRpdGlvbiA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6
QWJzZW5jZSkKKyAgICAgICAgdHJhY2tlZC5jaGVjayhwcm90b3R5cGUoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKQoreworICAg
IHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpQ
cmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICBvdXQu
cHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitlbnVtIGNs
YXNzIFByb3BlcnR5Q29uZGl0aW9uIHsKKyAgICBQcmVzZW5jZSwgLy8gV2UncmUgZmluZSBzbyBs
b25nIGFzIHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50LgorICAgIEFic2VuY2UgLy8gV2UncmUgZmlu
ZSBzbyBsb25nIGFzIHRoZSBwcm9wZXJ0eSBpcyBhYnNlbnQuCit9OworCitjbGFzcyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24o
KQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV91aWQobnVsbHB0cikK
KyAgICAgICAgLCBtX2NvbmRpdGlvbihQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAg
LCBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fY29uZGl0aW9uKFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOwor
ICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U7
CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVz
dWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBh
YnNlbmNlKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAg
IHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVy
dHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBl
ID0gcHJvdG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX29iamVjdCAmJiBtX2NvbmRpdGlvbiA9
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U7IH07CisgICAgCisgICAgSlNPYmplY3QqIG9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJvcGVydHlDb25kaXRpb24g
Y29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0KKyAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAKKyAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9u
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgICAgIHJldHVybiB1LnByZXNl
bmNlLm9mZnNldDsKKyAgICB9CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9jb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNl
bmNlKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICB9CisgICAg
CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV9jb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworICAgICAgICByZXR1
cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCht
X29iamVjdCkgKyBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkg
KyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb25kaXRpb24pOworICAgICAgICBzd2l0Y2ggKG1f
Y29uZGl0aW9uKSB7CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgor
ICAgICAgICAgICAgcmVzdWx0ICs9IHUucHJlc2VuY2Uub2Zmc2V0OworICAgICAgICAgICAgcmVz
dWx0ICs9IHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9
IFdURjo6UHRySGFzaDxKU09iamVjdCo+OjpoYXNoKHUuYWJzZW5jZS5wcm90b3R5cGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX29iamVjdCAhPSBvdGhlci5tX29i
amVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fdWlkICE9IG90
aGVyLm1fdWlkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9jb25k
aXRpb24gIT0gb3RoZXIubV9jb25kaXRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHN3aXRjaCAobV9jb25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5vZmZzZXQgPT0g
b3RoZXIudS5wcmVzZW5jZS5vZmZzZXQKKyAgICAgICAgICAgICAgICAmJiB1LnByZXNlbmNlLmF0
dHJpYnV0ZXMgPT0gb3RoZXIudS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgICAgICBjYXNlIFBy
b3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5w
cm90b3R5cGUgPT0gb3RoZXIudS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2NvbmRpdGlvbiA9PSBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hl
Y2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2Yg
bG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3Jl
IGluIHRoZSBjb25jdXJyZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAg
Ly8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUg
Y29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQg
eW91IHZhbGlkYXRlZCAoaS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBD
aGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkg
d29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0
cnVjdHVyZShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZEFjY29yZGlu
Z1RvU3RydWN0dXJlKCkgY29uc3Q7CisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3Qg
ZGVmaW5pdGVseSBoYXMsIG9yIGRlZmluaXRlbHkgZG9lcyBub3QgaGF2ZSwgdGhlIHByb3BlcnR5
IHJpZ2h0IG5vdy4KKyAgICAvLyBJZiB0cnVlLCB0aGVuIHdlIGNvdWxkIGNvbnRpbnVlIHRvIHZl
cmlmeSB0aGUgdmFsaWRpdHkgYnkgY2hlY2tpbmcgaWYgdGhlIG9iamVjdCBoYXMgdGhlCisgICAg
Ly8gc3RydWN0dXJlLiBNYXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2Jq
ZWN0IGFuZCBzdHJ1Y3R1cmUgYWxvbmUgZG9uJ3QKKyAgICAvLyBndWFyYW50ZWUgdGhlIGNvbmRp
dGlvbi4gVGhpcyBoYXBwZW5zIGZvciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3Qg
dGhhdCBtYXkgaGF2ZQorICAgIC8vIGltcHVyZSBwcm9wZXJ0aWVzLgorICAgIGJvb2wgaXNTdGls
bFZhbGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7
CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNv
dWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRj
aHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZShTdHJ1Y3R1cmUq
KSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhp
cyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUu
CisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVS
ZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgSlNPYmplY3QqIG1fb2JqZWN0OworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKKyAg
ICBQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB9IHByZXNlbmNlOworICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgSlNPYmplY3QqIG1fcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7
CisgICAgfSB1OworfTsKKworc3RydWN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtl
eSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAorICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCitWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5TWlzcygKKyAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUp
OworVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eVNldHRlck1pc3MoCisgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0
dXJlKTsKK1ZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFk
U3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlByb3BlcnR5Q29uZGl0aW9uKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg2Nzk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw2ICsxMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCByZWFsbG9jYXRl
c1N0b3JhZ2UoKSBjb25zdDsKICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKKyAg
ICAvLyBJdCdzIHVuZGVyc3Rvb2QgdGhhdCB0aGVzZSBjaGVja3MgZG9uJ3QgYWN0dWFsbHkgcmVx
dWlyZSB0aGF0IHRoZSBvYmplY3Qga2VlcHMgZXhhY3RseSB0aGlzCisgICAgLy8gc3RydWN0dXJl
LiBJdCBjYW4gaGF2ZSB3aGF0ZXZlciBzdHJ1Y3R1cmUsIHNvIGxvbmcgYXMgdGhhdCBzdHJ1Y3R1
cmUgYWdyZWVzIHdpdGggdGhlIGdpdmVuCisgICAgLy8gb25lIGFib3V0IHRoZSBwcm9wZXJ0eSBi
ZWluZyBzdG9yZWQuCiAgICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29u
c3RhbnRDaGVja3MoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRDaGVj
a3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4Njc5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludF9oCiAjZGVmaW5lIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnRfaAogCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIK
ICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNDYsMTUgKzQ3
LDExIEBAIGNsYXNzIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQgOiAKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50KAotICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRl
cikKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYga2V5LAogICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm8mIGhvbGRlciwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQ+IG5leHQpCi0gICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQorICAgICAgICA6
IG1fa2V5KGtleSkKKyAgICAgICAgLCBtX2hvbGRlcihob2xkZXIpCiAgICAgICAgICwgbV9uZXh0
KFdURjo6bW92ZShuZXh0KSkKICAgICB7CiAgICAgfQpAQCAtNjksNiArNjYsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CiAg
ICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBtX2hvbGRlcjsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4gbV9uZXh0OwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lk
IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRh
aWwmIGRldGFpbCkKK3sKKyAgICBpZiAoIW1fa2V5LmlzV2F0Y2hhYmxlKCkpIHsKKyAgICAgICAg
aWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyks
ICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgIG91dC5wcmlu
dCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgICAg
IAorICAgICAgICBTdHJpbmdGaXJlRGV0YWlsIGRldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgp
KTsKKyAgICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgICAg
IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRp
bWl6YXRpb24sICZkZXRhaWwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1f
a2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRf
aAorI2RlZmluZSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7Citw
dWJsaWM6CisgICAgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKKyAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0
dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0KTsKLSAgICB2b2lkIGVtaXRDaGVja3MoY29uc3Qg
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYpOworICAgIHZvaWQgZW1pdFByb3BlcnR5Q2hl
Y2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImLCBVbmlxdWVkU3RyaW5nSW1w
bCopOwogCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVhckNh
Y2hlcygpOwpAQCAtNzA3LDExICs3MDcsMjAgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlKiBj
ZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJvdXRlIHRv
IGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIEJ1dCBjdXJyZW50
bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJvbSB1c2luZyBlbWl0UHJvcGVy
dHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRoZQorICAgICAgICAv
LyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEgd2Vha0pTQ29zbnRh
bnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25zdGFudChvYmplY3QpOwog
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAgICByZXR1cm4gb2JqZWN0
Tm9kZTsKICAgICB9CiAgICAgCisgICAgdm9pZCBlbWl0UHJvcGVydHlDaGVjayhKU0NlbGwqIG9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAg
eworICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KG9iamVj
dCwgdWlkLCBzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVy
ZUNoZWNrKG9iamVjdCwgc3RydWN0dXJlKTsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlZFR5
cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAg
ICAgewogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CkBAIC0yMjkwLDEwICsyMjk5LDEwIEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQcm9wZXJ0
eUNoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rv
ci5zaXplKCk7ICsraSkKLSAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHZl
Y3RvcltpXS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCkpOworICAgICAgICBlbWl0
UHJvcGVydHlDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgp
LCB1aWQpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMy
Miw4ICsyMzMxLDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAg
ICAgIC8vIDEpIEVtaXQgcHJvdG90eXBlIHN0cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMu
IFRoaXMgY291bGQgc29ydCBvZiBtYXliZSBub3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwg
aWYgdGhlcmUgaXMgc29tZSByYXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCBy
ZXF1aXJlcyBhIGxvdAogICAgICAgICAvLyAgICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBh
cmUgbm90IHdhdGNocG9pbnRhYmxlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRl
eCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KQotICAgICAg
ICAgICAgZW1pdENoZWNrcyhnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVj
a3MoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1
cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGVtaXRQcm9w
ZXJ0eUNoZWNrcygKKyAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0u
Y29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllck51bWJlcl0pOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyAyKSBF
bWl0IGEgTXVsdGlHZXRCeU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0
YSA9IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKQEAgLTIzNDQsNyArMjM1
Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICAg
ICAgCiAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7CiAgICAgCi0gICAgZW1p
dENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgIGVtaXRQcm9wZXJ0eUNoZWNr
cyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlm
aWVyTnVtYmVyXSk7CiAKICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAg
IGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7CkBAIC0yNDM4
LDcgKzI0NTAsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlh
bnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3Rh
dHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tz
KHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAg
ICAgICAgICBlbWl0UHJvcGVydHlDaGVja3MoCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRT
dGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpLAorICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIApAQCAtMjQ2Myw3ICsyNDc3LDkgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uOiB7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwot
ICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVt
aXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAgICAgIHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSwK
KyAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAK
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1MTks
NyArMjUzNSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAg
IGFkZFRvR3JhcGgoCiAgICAgICAgICAgICBDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIAot
ICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVt
aXRQcm9wZXJ0eUNoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAgICAgICAgIAogICAgICAgICBpZiAodmFyaWFu
dC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFy
aWFudC5hbHRlcm5hdGVCYXNlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw5
IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAg
ICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292
ZXJ5LmNvbnN0YW50KCkpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZvciAoQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRjaHBvaW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50cykKKyAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2VzKHRy
YWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4Njc5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIK
ICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAg
LTk4LDYgKzk5LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4g
d2Vha1JlZmVyZW5jZXM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFr
U3RydWN0dXJlUmVmZXJlbmNlczsKICAgICBCYWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50PiB3YXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBh
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+
IGp1bXBSZXBsYWNlbWVudHM7CiAgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlv
bj4gY29tcGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
dm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcs
IENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29t
bW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1
dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmlu
Z1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMTcgQEAg
dm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVy
cmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEm
IGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAv
LyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFr
IG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0g
ICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFk
ZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9u
KQoreworICAgIGtleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBv
aW50KAorICAgICAgICBjb21tb24uYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cy5hZGQoa2V5
LCBjb2RlQmxvY2spKTsKIH0KIAogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2lu
dHMoKSB7IH0KQEAgLTc0LDYgKzgyLDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRM
YXppbHkoSlNBcnIKICAgICBtX2J1ZmZlclZpZXdzLmFkZExhemlseSh2aWV3KTsKIH0KIAordm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KQoreworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkp
OworfQorCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC04OCw2
ICsxMDEsNyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAg
bV9pbmxpbmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1faW5m
ZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZm
ZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2FkYXB0aXZl
U3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9v
bCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtOTUsNyArMTA5
LDggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgIHJldHVy
biBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGls
bFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAg
ICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYnVm
ZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVT
ZXRzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5o
IgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmll
dy5oIgpAQCAtNDEsMTUgKzQyLDE1IEBAIGNsYXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogc3RydWN0IEdlbmVyaWNTZXRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29k
ZUJsb2NrKiwgVCBzZXQsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgc3RhdGljIHZvaWQg
YWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBUIHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIHNldC0+YWRkKHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4g
c2V0LT5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAg
c3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0Jl
ZW5JbnZhbGlkYXRlZCgpOyB9CiB9OwogCiBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3Igewot
ICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2lu
dCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29t
bW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZh
bHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUt
Pmhhc0JlZW5JbnZhbGlkYXRlZCgpOwpAQCAtNTcsMTIgKzU4LDE4IEBAIHN0cnVjdCBJbmZlcnJl
ZFZhbHVlQWRhcHRvciB7CiB9OwogCiBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFk
YXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmll
dyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJh
eUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFs
aWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1
bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAg
IH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAg
ICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4g
IWtleS5pc1N0aWxsVmFsaWQoKTsKICAgICB9CiB9OwogCkBAIC04Nyw3ICs5NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVhbGx5QWRkZWQpOwogICAgICAgICAKICAg
ICAgICAgZm9yIChhdXRvJiBzZXQgOiBtX3NldHMpCi0gICAgICAgICAgICBBZGFwdG9yOjphZGQo
Y29kZUJsb2NrLCBzZXQsIGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CisgICAg
ICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbik7CiAgICAgICAgIAog
ICAgICAgICBtX3JlYWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CkBAIC0xMjIsNiArMTI5LDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIGFkZExhemlseShJbmZlcnJlZFZhbHVlKik7CiAgICAgdm9pZCBh
ZGRMYXppbHkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKICAgICAKKyAgICAvLyBJdCdzIHJlY29tbWVu
ZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlCisgICAgLy8gR3JhcGg6
OmFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCwgd2hpY2ggZG9lcyB0aGUgcmVxdWlyZWQg
R0MgbWFnaWMgYXMgd2VsbC4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYpOworICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAg
CiAgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwgQ29tbW9uRGF0YSYpOwpAQCAtMTQ0LDEy
ICsxNTUsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3Mu
aXNXYXRjaGVkKHZpZXcpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVT
dHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAg
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAgIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5lU2V0
czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJl
ZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNo
cG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0
b3I+IG1fYnVmZmVyVmlld3M7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9h
ZGFwdGl2ZVN0cnVjdHVyZVNldHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg2Nzk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0OCw2ICs4NDgsNDkgQEAgdm9pZCBHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMo
Tm9kZUZsYQogICAgIH0KIH0KIAorYm9vbCBHcmFwaDo6YWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFr
ZXkuaXNXYXRjaGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxh
bi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5LmNv
bmRpdGlvbigpID09IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlKQorICAgICAgICBtX3BsYW4u
d2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5wcm90b3R5cGUoKSk7CisgICAgbV9wbGFuLndh
dGNocG9pbnRzLmFkZExhemlseShrZXkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdy
YXBoOjp3YXRjaFByZXNlbmNlT2ZQcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCit7CisgICAgcmV0dXJuIGFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlKG9iamVjdCwgdWlkLCBvZmZz
ZXQsIGF0dHJpYnV0ZXMpKTsKK30KKworYm9vbCBHcmFwaDo6d2F0Y2hBYnNlbmNlT2ZQcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQoreworICAgIHJldHVybiBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKG9iamVjdCwgdWlkLCBwcm90
b3R5cGUpKTsKK30KKworYm9vbCBHcmFwaDo6d2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAor
ICAgIEpTQ2VsbCogY2VsbCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3Qq
PihjZWxsKTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAg
IAorICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRl
cyk7CisgICAgCisgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICByZXR1
cm4gd2F0Y2hBYnNlbmNlT2ZQcm9wZXJ0eShvYmplY3QsIHVpZCwgc3RydWN0dXJlLT5zdG9yZWRQ
cm90b3R5cGUoKSk7CisgICAgCisgICAgcmV0dXJuIHdhdGNoUHJlc2VuY2VPZlByb3BlcnR5KG9i
amVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVz
cyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hN
YXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzUs
NiArNjc1LDI0IEBAIHB1YmxpYzoKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJz
KCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CiAgICAgRGVzaXJlZFdhdGNocG9pbnRz
JiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQogICAgIAorICAg
IC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGludmFsaWQuCisgICAgYm9v
bCBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mKTsKKyAgICAKKyAgICAvLyBHYXRlIHRoZSB2YWxpZGl0eSBvZiB0aGlzIGNvbXBpbGF0
aW9uIG9uIHRoZSBnaXZlbiBvYmplY3QgaGF2aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSB3aXRoCisg
ICAgLy8gdGhlIGdpdmVuIG9mZnNldCBhbmQgYXR0cmlidXRlcy4gUmV0dXJucyBmYWxzZSBpZiB3
YXRjaGluZyBmb3IgdGhpcyBpcyBpbXBvc3NpYmxlLgorICAgIGJvb2wgd2F0Y2hQcmVzZW5jZU9m
UHJvcGVydHkoCisgICAgICAgIEpTT2JqZWN0KiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJv
cGVydHlPZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgIAorICAgIC8vIEdhdGUgdGhl
IHZhbGlkaXR5IG9mIHRoaXMgY29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVjdCBsYWNraW5n
IHRoZSBnaXZlbiBwcm9wZXJ0eS4KKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHdhdGNoaW5nIGZv
ciB0aGlzIGlzIGltcG9zc2libGUuCisgICAgYm9vbCB3YXRjaEFic2VuY2VPZlByb3BlcnR5KAor
ICAgICAgICBKU09iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIAorICAgIC8v
IEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRoaXMgY29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVj
dCBlaXRoZXIgaGF2aW5nLCBvciBsYWNraW5nLCB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpbiB0aGUg
c2FtZSB3YXkgYXMgdGhlIGdpdmVuIHN0cnVjdHVyZSBjbGFpbXMgdG8gaGF2ZSAob3IgbGFjaykg
dGhlIHByb3BlcnR5LgorICAgIGJvb2wgd2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAorICAg
ICAgICBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSk7CisKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7
CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSop
OwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256876</attachid>
            <date>2015-07-15 16:20:09 -0700</date>
            <delta_ts>2015-07-15 20:16:19 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>46721</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODUyLDYgKzQ4NTYsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
ZXQ7IH0KKworICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGNoZWNrcyBkb24ndCBh
Y3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBleGFjdGx5IHRoaXMKKyAgICAv
LyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVjdHVyZSwgc28gbG9uZyBhcyB0
aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBvbmUgYWJvdXQgdGhl
IHByb3BlcnR5IGJlaW5nIGxvYWRlZC4KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7
IH0KKyAgICAKICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWx0ZXJuYXRlQmFzZTsgfQogICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tl
ZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
SlNWYWx1ZShtX29iamVjdCksICI6ICIsIG1fY29uZGl0aW9uLCAiIG9mICIsIG1fdWlkKTsKKyAg
ICBzd2l0Y2ggKG1fY29uZGl0aW9uKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJl
c2VuY2U6CisgICAgICAgIG91dC5wcmludCgiIGF0ICIsIG1fb2Zmc2V0LCAiIHdpdGggYXR0cmli
dXRlcyAiLCBtX2F0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm9wZXJ0
eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5cGUg
IiwgSlNPYmplY3QocHJvdG90eXBlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjppc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbigpKSB7CisgICAgY2FzZSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVu
dE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmli
dXRlcyk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IG9mZnNldCgpIHx8IGN1cnJlbnRB
dHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpICE9IGludmFsaWRPZmZzZXQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfSB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFjY29yZGluZ1RvU3Ry
dWN0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1
Y3R1cmUobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAg
IGlmICghaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoc3RydWN0dXJlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChtX2NvbmRpdGlvbiA9PSBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLmhh
c0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlk
KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OmlzV2F0Y2hhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmIChz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKHN0cnVj
dHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNXYXRjaGFibGUobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAor
eworICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vYmplY3QpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgaWYgKG1fY29uZGl0aW9uID09IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRy
YWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIHRyYWNrZWQuY2hlY2sobV9v
YmplY3QpOworICAgIAorICAgIGlmIChtX2NvbmRpdGlvbiA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6
QWJzZW5jZSkKKyAgICAgICAgdHJhY2tlZC5jaGVjayhwcm90b3R5cGUoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKQoreworICAg
IHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpQ
cmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICBvdXQu
cHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitlbnVtIGNs
YXNzIFByb3BlcnR5Q29uZGl0aW9uIHsKKyAgICBQcmVzZW5jZSwgLy8gV2UncmUgZmluZSBzbyBs
b25nIGFzIHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50LgorICAgIEFic2VuY2UgLy8gV2UncmUgZmlu
ZSBzbyBsb25nIGFzIHRoZSBwcm9wZXJ0eSBpcyBhYnNlbnQuCit9OworCitjbGFzcyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24o
KQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV91aWQobnVsbHB0cikK
KyAgICAgICAgLCBtX2NvbmRpdGlvbihQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAg
LCBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fY29uZGl0aW9uKFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOwor
ICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U7
CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVz
dWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBh
YnNlbmNlKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAg
IHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVy
dHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBl
ID0gcHJvdG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX29iamVjdCAmJiBtX2NvbmRpdGlvbiA9
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U7IH07CisgICAgCisgICAgSlNPYmplY3QqIG9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJvcGVydHlDb25kaXRpb24g
Y29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0KKyAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAKKyAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9u
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgICAgIHJldHVybiB1LnByZXNl
bmNlLm9mZnNldDsKKyAgICB9CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9jb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNl
bmNlKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICB9CisgICAg
CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV9jb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworICAgICAgICByZXR1
cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCht
X29iamVjdCkgKyBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkg
KyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb25kaXRpb24pOworICAgICAgICBzd2l0Y2ggKG1f
Y29uZGl0aW9uKSB7CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgor
ICAgICAgICAgICAgcmVzdWx0ICs9IHUucHJlc2VuY2Uub2Zmc2V0OworICAgICAgICAgICAgcmVz
dWx0ICs9IHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9
IFdURjo6UHRySGFzaDxKU09iamVjdCo+OjpoYXNoKHUuYWJzZW5jZS5wcm90b3R5cGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX29iamVjdCAhPSBvdGhlci5tX29i
amVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fdWlkICE9IG90
aGVyLm1fdWlkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9jb25k
aXRpb24gIT0gb3RoZXIubV9jb25kaXRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHN3aXRjaCAobV9jb25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5vZmZzZXQgPT0g
b3RoZXIudS5wcmVzZW5jZS5vZmZzZXQKKyAgICAgICAgICAgICAgICAmJiB1LnByZXNlbmNlLmF0
dHJpYnV0ZXMgPT0gb3RoZXIudS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgICAgICBjYXNlIFBy
b3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5w
cm90b3R5cGUgPT0gb3RoZXIudS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2NvbmRpdGlvbiA9PSBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hl
Y2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2Yg
bG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3Jl
IGluIHRoZSBjb25jdXJyZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAg
Ly8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUg
Y29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQg
eW91IHZhbGlkYXRlZCAoaS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBD
aGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkg
d29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0
cnVjdHVyZShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZEFjY29yZGlu
Z1RvU3RydWN0dXJlKCkgY29uc3Q7CisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3Qg
ZGVmaW5pdGVseSBoYXMsIG9yIGRlZmluaXRlbHkgZG9lcyBub3QgaGF2ZSwgdGhlIHByb3BlcnR5
IHJpZ2h0IG5vdy4KKyAgICAvLyBJZiB0cnVlLCB0aGVuIHdlIGNvdWxkIGNvbnRpbnVlIHRvIHZl
cmlmeSB0aGUgdmFsaWRpdHkgYnkgY2hlY2tpbmcgaWYgdGhlIG9iamVjdCBoYXMgdGhlCisgICAg
Ly8gc3RydWN0dXJlLiBNYXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2Jq
ZWN0IGFuZCBzdHJ1Y3R1cmUgYWxvbmUgZG9uJ3QKKyAgICAvLyBndWFyYW50ZWUgdGhlIGNvbmRp
dGlvbi4gVGhpcyBoYXBwZW5zIGZvciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3Qg
dGhhdCBtYXkgaGF2ZQorICAgIC8vIGltcHVyZSBwcm9wZXJ0aWVzLgorICAgIGJvb2wgaXNTdGls
bFZhbGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7
CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNv
dWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRj
aHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZShTdHJ1Y3R1cmUq
KSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhp
cyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUu
CisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVS
ZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgSlNPYmplY3QqIG1fb2JqZWN0OworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKKyAg
ICBQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB9IHByZXNlbmNlOworICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgSlNPYmplY3QqIG1fcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7
CisgICAgfSB1OworfTsKKworc3RydWN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtl
eSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAorICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCitWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5TWlzcygKKyAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUp
OworVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eVNldHRlck1pc3MoCisgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0
dXJlKTsKK1ZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFk
U3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlByb3BlcnR5Q29uZGl0aW9uKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworLy8gQW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBpcyB1c2VkIHRvIHJl
cHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0aW9uYWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRv
IGJlIG1ldCBmb3Igc29tZSBoZWFwIGFjY2VzcyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2
ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmVzdGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRo
ZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIElu
dmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBpcyBuZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhl
cmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSB2YWxp
ZC4KKworY2xhc3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgeworcHVibGljOgorICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkgeyB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGludmFsaWQoKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYo
bmV3IERhdGEoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBub25FbXB0eShjb25zdCBWZWN0b3I8T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9y
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAg
ICpyZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24q
IGl0ZXJhdG9yOworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBtX2RhdGEtPmJlZ2luKCk7CisgICAgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gbV9kYXRhLT5lbmQoKTsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gZm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpCisgICAgeworICAgICAg
ICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykg
eworICAgICAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb247CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBJbnRl
cm5hbGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1c2luZyBhIHBvaW50ZXIgdG8gYSBEYXRh
IHRoYXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKworICAgIGNsYXNzIERhdGEgOiBSZWZDb3VudGVk
PERhdGE+IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YSk7CisgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIERh
dGEoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bj4gdmVjdG9yOworICAgIH07CisgICAgCisgICAgUmVmUHRyPERhdGE+IG1fZGF0YTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKICAgICBib29s
IG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKKyAgICAvLyBJdCdzIHVuZGVyc3Rvb2QgdGhhdCB0
aGVzZSBjaGVja3MgZG9uJ3QgYWN0dWFsbHkgcmVxdWlyZSB0aGF0IHRoZSBvYmplY3Qga2VlcHMg
ZXhhY3RseSB0aGlzCisgICAgLy8gc3RydWN0dXJlLiBJdCBjYW4gaGF2ZSB3aGF0ZXZlciBzdHJ1
Y3R1cmUsIHNvIGxvbmcgYXMgdGhhdCBzdHJ1Y3R1cmUgYWdyZWVzIHdpdGggdGhlIGdpdmVuCisg
ICAgLy8gb25lIGFib3V0IHRoZSBwcm9wZXJ0eSBiZWluZyBzdG9yZWQuCiAgICAgY29uc3QgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dF9oCiAjZGVmaW5lIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnRfaAogCisjaW5jbHVk
ZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAK
ICNpZiBFTkFCTEUoSklUKQpAQCAtNDYsMTUgKzQ3LDExIEBAIGNsYXNzIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQgOiAKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KAotICAgICAgICBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlcikKLSAgICAgICAgOiBtX2hvbGRlcihob2xk
ZXIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAogICAgICAg
ICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlciwKICAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG5leHQpCi0gICAgICAg
IDogbV9ob2xkZXIoaG9sZGVyKQorICAgICAgICA6IG1fa2V5KGtleSkKKyAgICAgICAgLCBtX2hv
bGRlcihob2xkZXIpCiAgICAgICAgICwgbV9uZXh0KFdURjo6bW92ZShuZXh0KSkKICAgICB7CiAg
ICAgfQpAQCAtNjksNiArNjYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGZpcmVJ
bnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CiAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvJiBtX2hvbGRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludD4gbV9uZXh0OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAoIW1f
a2V5LmlzV2F0Y2hhYmxlKCkpIHsKKyAgICAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2Vt
Ymx5KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgIkZpcmluZyB3
YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmdQcmlu
dFN0cmVhbSBvdXQ7CisgICAgICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwg
IiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgICAgIAorICAgICAgICBTdHJpbmdGaXJlRGV0YWls
IGRldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAgICAgCisgICAgICAgIG1fY29k
ZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5w
cm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZkZXRhaWwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+
YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICAgICAgOiBtX2tleShrZXkpCisg
ICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZp
cmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg2Nzk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxl
UHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
Tm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0
KTsKLSAgICB2b2lkIGVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYpOworICAgIHZvaWQgZW1pdFByb3BlcnR5Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogCiAgICAgdm9pZCBwcmVwYXJlVG9Q
YXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVhckNhY2hlcygpOwpAQCAtNzA3LDExICs3MDcsMjAg
QEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hl
Y2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhl
IG90aGVyIHdheSBhcm91bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBu
byBwcm9maXQgZnJvbSB1c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1h
ZGFwdGl2ZWx5IHdhdGNoIHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29v
biBhcyB3ZSBtYWtlIGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5v
ZGUgPSB3ZWFrSlNDb25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVj
dE5vZGUpOwogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKICAgICB9CiAgICAgCisgICAgdm9p
ZCBlbWl0UHJvcGVydHlDaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoIW1fZ3JhcGgud2F0
Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KG9iamVjdCwgdWlkLCBzdHJ1Y3R1cmUpKQorICAgICAg
ICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKG9iamVjdCwgc3RydWN0dXJlKTsK
KyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JF
eGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
CkBAIC0yMjkwLDEwICsyMjk5LDEwIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpl
bWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK3Zv
aWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQcm9wZXJ0eUNoZWNrcyhjb25zdCBDb25zdGFudFN0cnVj
dHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgY2Vs
bENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHZlY3RvcltpXS5jb25zdGFudCgpLCB2ZWN0b3Jb
aV0uc3RydWN0dXJlKCkpOworICAgICAgICBlbWl0UHJvcGVydHlDaGVjayh2ZWN0b3JbaV0uY29u
c3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpLCB1aWQpOwogfQogCiB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMyMiw4ICsyMzMxLDExIEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgIC8vIDEpIEVtaXQgcHJvdG90eXBlIHN0
cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMuIFRoaXMgY291bGQgc29ydCBvZiBtYXliZSBu
b3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwgaWYgdGhlcmUgaXMgc29tZSByYXJlbHkgZXhl
Y3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCByZXF1aXJlcyBhIGxvdAogICAgICAgICAvLyAg
ICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBhcmUgbm90IHdhdGNocG9pbnRhYmxlLgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFu
dHMoKTsgdmFyaWFudEluZGV4LS07KQotICAgICAgICAgICAgZW1pdENoZWNrcyhnZXRCeUlkU3Rh
dHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5k
ZXgtLTspIHsKKyAgICAgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAgICAgICAg
ICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyAyKSBFbWl0IGEgTXVsdGlHZXRCeU9mZnNldAogICAg
ICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zm
c2V0RGF0YS5hZGQoKTsKQEAgLTIzNDQsNyArMjM1Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICAgICAgCiAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkpKSwgYmFzZSk7CiAgICAgCi0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hl
Y2tzKCkpOworICAgIGVtaXRQcm9wZXJ0eUNoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCks
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAKICAgICBpZiAodmFy
aWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJp
YW50LmFsdGVybmF0ZUJhc2UoKSk7CkBAIC0yNDM4LDcgKzI0NTAsOSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50
SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewog
ICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4
XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHJvcGVydHlDaGVja3Mo
CisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFu
dENoZWNrcygpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApAQCAt
MjQ2Myw3ICsyNDc3LDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQu
Y29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAg
ICAgIHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xk
U3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5J
bnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1MTksNyArMjUzNSw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICBD
aGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3Ry
dWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIAotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQu
Y29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcyh2YXJpYW50LmNv
bnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7
CiAgICAgICAgIAogICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAg
ICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lv
biAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw5IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRh
dGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVj
ayhpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwogICAgICAgICB9
CiAgICAgfQorICAgIAorICAgIGZvciAoQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRj
aHBvaW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cykKKyAgICAgICAgd2F0Y2hwb2lu
dC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKICNp
bmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVT
ZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk4LDYgKzk5LDcgQEAgcHVibGljOgogICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7CiAgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0dXJlUmVmZXJlbmNlczsKICAgICBC
YWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3YXRjaHBvaW50czsKKyAgICBCYWc8
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRz
OwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7CiAgICAgCiAg
ICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3Bw
CShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBv
aW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVy
VmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAg
ICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxv
Y2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hw
b2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpj
b2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0
Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMTcgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBv
aW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFs
dWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2st
PmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vz
bid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBp
dCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNo
cG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNv
ZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6
OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIGtleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAorICAgICAgICBjb21tb24uYWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spKTsKIH0KIAogRGVzaXJl
ZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KQEAgLTc0LDYgKzgyLDExIEBA
IHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSlNBcnIKICAgICBtX2J1ZmZlclZp
ZXdzLmFkZExhemlseSh2aWV3KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIG1fYWRhcHRp
dmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERlc2lyZWRXYXRjaHBv
aW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1
cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC04OCw2ICsxMDEsNyBAQCB2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmxpbmVTZXRzLnJlYWxseUFkZChjb2Rl
QmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVC
bG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2Nr
LCBjb21tb25EYXRhKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29k
ZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0
aWxsVmFsaWQoKSBjb25zdApAQCAtOTUsNyArMTA5LDggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2lu
dHM6OmFyZVN0aWxsVmFsaWQoKQogICAgIHJldHVybiBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAg
ICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZl
cnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVT
dGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCisg
ICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUu
aCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgpAQCAtNDEsMTUgKzQyLDE1IEBAIGNs
YXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdlbmVyaWNTZXRBZGFw
dG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgVCBzZXQsIFdhdGNocG9pbnQq
IHdhdGNocG9pbnQpCisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBU
IHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNldC0+YWRk
KHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0LT5hZGQoY29tbW9uLndhdGNocG9pbnRz
LmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRh
dGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9CiB9OwogCiBz
dHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29s
IGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwpAQCAt
NTcsMTIgKzU4LDE4IEBAIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7CiB9OwogCiBzdHJ1
Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0
aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7
CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAg
ICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2Nr
KiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3Rh
dGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFsaWQoKTsKICAgICB9
CiB9OwogCkBAIC04Nyw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fcmVhbGx5QWRkZWQpOwogICAgICAgICAKICAgICAgICAgZm9yIChhdXRvJiBzZXQgOiBtX3Nl
dHMpCi0gICAgICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbi53YXRj
aHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CisgICAgICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJs
b2NrLCBzZXQsIGNvbW1vbik7CiAgICAgICAgIAogICAgICAgICBtX3JlYWxseUFkZGVkID0gdHJ1
ZTsKICAgICB9CkBAIC0xMjIsNiArMTI5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExhemls
eShJbmZlcnJlZFZhbHVlKik7CiAgICAgdm9pZCBhZGRMYXppbHkoSlNBcnJheUJ1ZmZlclZpZXcq
KTsKICAgICAKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhp
cyBkaXJlY3RseS4gVXNlCisgICAgLy8gR3JhcGg6OmFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludCwgd2hpY2ggZG9lcyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbC4KKyAgICB2b2lk
IGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAogICAgIGJv
b2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJs
b2NrKiwgQ29tbW9uRGF0YSYpOwpAQCAtMTQ0LDEyICsxNTUsMTcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNXYXRjaGVkKHZpZXcpOwogICAgIH0KKyAg
ICBib29sIGlzV2F0Y2hlZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkp
OworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxX
YXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5s
aW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5lU2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNo
cG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZh
bHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3Kiwg
QXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CisgICAgR2Vu
ZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0OCw2ICs4NDgsNDkgQEAgdm9p
ZCBHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZUZsYQogICAgIH0KIH0KIAorYm9vbCBH
cmFwaDo6YWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNXYXRjaGFibGUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHko
a2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5LmNvbmRpdGlvbigpID09IFByb3BlcnR5Q29uZGl0
aW9uOjpBYnNlbmNlKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtl
eS5wcm90b3R5cGUoKSk7CisgICAgbV9wbGFuLndhdGNocG9pbnRzLmFkZExhemlseShrZXkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjp3YXRjaFByZXNlbmNlT2ZQcm9wZXJ0
eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit7CisgICAgcmV0dXJuIGFkZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OnByZXNlbmNlKG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpKTsKK30KKworYm9v
bCBHcmFwaDo6d2F0Y2hBYnNlbmNlT2ZQcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQoreworICAgIHJldHVybiBhZGRB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uOjphYnNlbmNlKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpKTsKK30KKworYm9vbCBHcmFwaDo6
d2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNPYmplY3QqIG9i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICBpZiAoIW9iamVjdCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
KyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIAorICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgCisgICAgaWYgKG9mZnNldCA9
PSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICByZXR1cm4gd2F0Y2hBYnNlbmNlT2ZQcm9wZXJ0eShv
YmplY3QsIHVpZCwgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgCisgICAgcmV0
dXJuIHdhdGNoUHJlc2VuY2VPZlByb3BlcnR5KG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0
ZXMpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVf
cHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2
ZW5lc3MuZmluZChjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzUsNiArNjc1LDI0IEBAIHB1YmxpYzoKICAgICBE
ZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZp
ZXJzOyB9CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1f
cGxhbi53YXRjaHBvaW50czsgfQogICAgIAorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGtl
eSBpcyBhbHJlYWR5IGludmFsaWQuCisgICAgYm9vbCBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKKyAgICAvLyBHYXRl
IHRoZSB2YWxpZGl0eSBvZiB0aGlzIGNvbXBpbGF0aW9uIG9uIHRoZSBnaXZlbiBvYmplY3QgaGF2
aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSB3aXRoCisgICAgLy8gdGhlIGdpdmVuIG9mZnNldCBhbmQg
YXR0cmlidXRlcy4gUmV0dXJucyBmYWxzZSBpZiB3YXRjaGluZyBmb3IgdGhpcyBpcyBpbXBvc3Np
YmxlLgorICAgIGJvb2wgd2F0Y2hQcmVzZW5jZU9mUHJvcGVydHkoCisgICAgICAgIEpTT2JqZWN0
KiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpOworICAgIAorICAgIC8vIEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRoaXMgY29tcGlsYXRp
b24gb24gdGhlIGdpdmVuIG9iamVjdCBsYWNraW5nIHRoZSBnaXZlbiBwcm9wZXJ0eS4KKyAgICAv
LyBSZXR1cm5zIGZhbHNlIGlmIHdhdGNoaW5nIGZvciB0aGlzIGlzIGltcG9zc2libGUuCisgICAg
Ym9vbCB3YXRjaEFic2VuY2VPZlByb3BlcnR5KAorICAgICAgICBKU09iamVjdCosIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOworICAgIAorICAgIC8vIEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRoaXMg
Y29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVjdCBlaXRoZXIgaGF2aW5nLCBvciBsYWNraW5n
LCB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGdpdmVuIHN0cnVj
dHVyZSBjbGFpbXMgdG8gaGF2ZSAob3IgbGFjaykgdGhlIHByb3BlcnR5LgorICAgIGJvb2wgd2F0
Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAorICAgICAgICBKU0NlbGwqLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisKICAgICBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256889</attachid>
            <date>2015-07-15 20:16:19 -0700</date>
            <delta_ts>2015-07-15 21:28:47 -0700</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59007</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODUyLDYgKzQ4NTYsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
ZXQ7IH0KKworICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGNoZWNrcyBkb24ndCBh
Y3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBleGFjdGx5IHRoaXMKKyAgICAv
LyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVjdHVyZSwgc28gbG9uZyBhcyB0
aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBvbmUgYWJvdXQgdGhl
IHByb3BlcnR5IGJlaW5nIGxvYWRlZC4KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7
IH0KKyAgICAKICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWx0ZXJuYXRlQmFzZTsgfQogICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tl
ZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgb3V0LnByaW50KEpTVmFsdWUobV9vYmplY3QpLCAiOiAiLCBtX2NvbmRp
dGlvbiwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2NvbmRpdGlvbikgeworICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAi
LCBtX29mZnNldCwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIiB3
aXRoIHByb3RvdHlwZSAiLCBKU09iamVjdChwcm90b3R5cGUoKSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+
cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgc3dpdGNoIChjb25kaXRpb24oKSkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRp
b246OlByZXNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgY3Vy
cmVudEF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAg
ICAgICBpZiAoY3VycmVudE9mZnNldCAhPSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmlidXRlcyAh
PSBhdHRyaWJ1dGVzKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTog
eworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpICE9IGludmFs
aWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBp
ZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJp
YnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfSB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2NvbmRp
dGlvbikgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxp
ZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmICghaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQ3VycmVudGx5IHdlIGFzc3VtZSB0aGF0IGFuIGltcHVyZSBwcm9wZXJ0eSBjYW4g
Y2F1c2UgYSBwcm9wZXJ0eSB0byBhcHBlYXIsIGFuZCBjYW4gYWxzbworICAgIC8vICJzaGFkb3ci
IGFuIGV4aXN0aW5nIEpTIHByb3BlcnR5IG9uIHRoZSBzYW1lIG9iamVjdC4gSGVuY2UgaXQgYWZm
ZWN0cyBib3RoIHByZXNlbmNlIGFuZAorICAgIC8vIGFic2VuY2UuIEl0IGRvZXNuJ3QgYWZmZWN0
IEFic2VuY2VPZlNldHRlciBiZWNhdXNlIGltcHVyZSBwcm9wZXJ0aWVzIGFyZW4ndCBldmVyIHNl
dHRlcnMuCisgICAgc3dpdGNoIChtX2NvbmRpdGlvbikgeworICAgIGNhc2UgUHJvcGVydHlDb25k
aXRpb246OlByZXNlbmNlOgorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlT
bG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IGlzU3RpbGxWYWxpZChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
K3sKKyAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzU3Rp
bGxWYWxpZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpp
c1dhdGNoYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCkp
OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9vYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgaWYgKG1fY29uZGl0aW9uID09IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlKSB7Cisg
ICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZl
cmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICAKKyAgICBpZiAobV9j
b25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpCisgICAgICAgIHRyYWNrZWQu
Y2hlY2socHJvdG90eXBlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNl
IFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAg
IGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmlu
dCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRl
cjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJl
bmNlczsKKworZW51bSBjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CisgICAgUHJlc2VuY2UsIC8v
IFdlJ3JlIGZpbmUgc28gbG9uZyBhcyB0aGUgcHJvcGVydHkgaXMgcHJlc2VudC4KKyAgICBBYnNl
bmNlLCAvLyBXZSdyZSBmaW5lIHNvIGxvbmcgYXMgdGhlIHByb3BlcnR5IGlzIGFic2VudC4KKyAg
ICBBYnNlbmNlT2ZTZXR0ZXIsIC8vIFdlJ3JlIGZpbmUgc28gbG9uZyBhcyBpdCBkb2Vzbid0IHR1
cm4gaW50byBhIHNldHRlciBwcm9wZXJ0eS4KK307CisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAg
IDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChudWxscHRyKQorICAgICAgICAs
IG1fY29uZGl0aW9uKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgICAgICAsIG1fdWlkKG51
bGxwdHIpCisgICAgICAgICwgbV9jb25kaXRpb24oUHJvcGVydHlDb25kaXRpb246OkFic2VuY2Up
CisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
cHJlc2VuY2UoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7Cisg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
b2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJl
c3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTsKKyAgICAgICAg
cmVzdWx0LnUucHJlc2VuY2Uub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXN1bHQudS5wcmVz
ZW5jZS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2UoCisg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0
KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1f
dWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlv
bjo6QWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5
cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIEpTT2JqZWN0KiBv
YmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAg
eworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAg
ICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVy
OworICAgICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246
OlByZXNlbmNlOyB9OworICAgIAorICAgIEpTT2JqZWN0KiBvYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX29iamVjdDsgfQorICAgIFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fY29uZGl0aW9uOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdWlkOyB9CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvbiA9PSBQcm9wZXJ0eUNvbmRpdGlv
bjo6UHJlc2VuY2UpOworICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgfQor
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Y29uZGl0aW9uID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgICAgIHJldHVy
biB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uID09IFByb3Bl
cnR5Q29uZGl0aW9uOjpBYnNlbmNlIHx8IG1fY29uZGl0aW9uID09IFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlT2ZTZXR0ZXIpOworICAgICAgICByZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkgKyBXVEY6OlB0ckhhc2g8
VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9jb25kaXRpb24pOworICAgICAgICBzd2l0Y2ggKG1fY29uZGl0aW9uKSB7CisgICAgICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHUu
cHJlc2VuY2Uub2Zmc2V0OworICAgICAgICAgICAgcmVzdWx0ICs9IHUucHJlc2VuY2UuYXR0cmli
dXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlOgorICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0
ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTT2JqZWN0Kj46Omhhc2go
dS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fb2JqZWN0ICE9IG90aGVyLm1fb2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAobV91aWQgIT0gb3RoZXIubV91aWQpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChtX2NvbmRpdGlvbiAhPSBvdGhlci5tX2NvbmRpdGlvbikKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2NvbmRpdGlvbikgewor
ICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgIHJl
dHVybiB1LnByZXNlbmNlLm9mZnNldCA9PSBvdGhlci51LnByZXNlbmNlLm9mZnNldAorICAgICAg
ICAgICAgICAgICYmIHUucHJlc2VuY2UuYXR0cmlidXRlcyA9PSBvdGhlci51LnByZXNlbmNlLmF0
dHJpYnV0ZXM7CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAg
ICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgICAg
IHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJzZW5jZS5wcm90b3R5cGU7
CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV9jb25k
aXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgfQorICAgIAorICAgIC8v
IFRoZXNlIHZhbGlkaXR5LWNoZWNraW5nIG1ldGhvZHMgY2FuIG9wdGlvbmFsbHkgdGFrZSBhIFN0
cnV0dXJlKiBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlCisgICAgLy8gU3RydWN0dXJlKiBmcm9tIHRo
ZSBvYmplY3QuIElmIHlvdSdyZSBpbiB0aGUgY29uY3VycmVudCBKSVQsIHRoZW4geW91IG11c3Qg
dXNlIHRoZSBmb3JtcworICAgIC8vIHRoYXQgdGFrZSBhbiBleHBsaWNpdCBTdHJ1Y3R1cmUqIGJl
Y2F1c2UgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZvciB0aGUgc2FtZQorICAg
IC8vIHN0cnVjdHVyZSB0aGF0IHlvdSB2YWxpZGF0ZWQgKGkuZS4gYXZvaWQgYSBUT0NUT1UgcmFj
ZSkuCisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xhaW1z
IHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLgorICAgIGJvb2wgaXNTdGls
bFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7
CisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBw
cm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNT
dGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wg
dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25z
dDsKKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBj
b25zdDsKKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCBkZWZpbml0ZWx5IGhhcywg
b3IgZGVmaW5pdGVseSBkb2VzIG5vdCBoYXZlLCB0aGUgcHJvcGVydHkgcmlnaHQgbm93LgorICAg
IC8vIElmIHRydWUsIHRoZW4gd2UgY291bGQgY29udGludWUgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0
eSBieSBjaGVja2luZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIE1h
eSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVy
ZSBhbG9uZSBkb24ndAorICAgIC8vIGd1YXJhbnRlZSB0aGUgY29uZGl0aW9uLiBUaGlzIGhhcHBl
bnMgZm9yIGFuIEFic2VuY2UgY29uZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlCisg
ICAgLy8gaW1wdXJlIHByb3BlcnRpZXMuCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJl
KikgY29uc3Q7CisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxp
ZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJv
b2wgaXNXYXRjaGFibGUoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhl
IG9iamVjdHMgaW52b2x2ZWQgaW4gdGhpcyBhcmUgc3RpbGwgbGl2ZS4KKyAgICBib29sIGlzU3Rp
bGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3Qg
VHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBKU09iamVjdCogbV9v
YmplY3Q7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIFByb3BlcnR5Q29uZGl0
aW9uIG1fY29uZGl0aW9uOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBK
U09iamVjdCogbV9wcm90b3R5cGU7CisgICAgICAgIH0gYWJzZW5jZTsKKyAgICB9IHU7Cit9Owor
CitzdHJ1Y3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXku
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKworI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0
aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3QoSlNPYmplY3QqIG9iamVj
dCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLm9iamVjdCgpID09IG9iamVj
dCkKKyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjphcmVTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3Rp
bGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxWYWxp
ZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLnZhbGlkaXR5UmVx
dXJpZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK25hbWVzcGFjZSB7CisKK09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0aW9uKAorICAgIEpTT2JqZWN0KiBvYmplY3Qs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbikKK3sK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKCk7CisgICAgCisg
ICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVz
ZW5jZTogeworICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMp
OworICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpwcmVzZW5jZShvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsK
KyAgICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICBy
ZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAgICAgICBvYmpl
Y3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkpOworICAgIH0K
KyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAg
cmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAg
ICAgICBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkp
OworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLAorICAgIFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBBU1NFUlQoISFw
cm90b3R5cGUgPT0gKGNvbmRpdGlvbiA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpKTsK
KyAgICAKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IGNvbmRpdGlvbnM7Cisg
ICAgCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCisg
ICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsK
KyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChleGVjKTsKKyAgICAgICAgCisgICAgICAgIGlmICh2LmlzTnVsbCgpKSB7CisgICAg
ICAgICAgICBpZiAoIXByb3RvdHlwZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0
Kj4odik7CisgICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSByZXBlYXRl
ZGx5LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQgbm90IGJlCisgICAgICAgIC8vIHRy
ZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUo
dm0sIG9iamVjdCk7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBu
ZXdDb25kaXRpb24gPSBnZW5lcmF0ZUNvbmRpdGlvbihvYmplY3QsIHVpZCwgY29uZGl0aW9uKTsK
KyAgICAgICAgaWYgKCFuZXdDb25kaXRpb24gfHwgIW5ld0NvbmRpdGlvbi5pc1N0aWxsVmFsaWRB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIAorICAgICAgICBj
b25kaXRpb25zLmFwcGVuZChuZXdDb25kaXRpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKG9i
amVjdCA9PSBwcm90b3R5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpub25FbXB0eShjb25kaXRpb25zKQor
fQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorewor
ICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoZXhlYywgaGVhZFN0cnVjdHVyZSwgbnVsbHB0
ciwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICBl
eGVjLCBoZWFkU3RydWN0dXJlLCBudWxscHRyLCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlT2ZTZXR0ZXIpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoZXhlYywgaGVhZFN0
cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9o
CisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2xkdWUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJvcGVydHkgY29u
ZGl0aW9uIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBzZXQgb2YgYWRkaXRpb25hbCBjb25kaXRp
b25zCisvLyB0aGF0IG5lZWQgdG8gYmUgbWV0IGZvciBzb21lIGhlYXAgYWNjZXNzIHRvIGJlIHZh
bGlkLiBUaGUgc2V0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZXN0aW5nIHN0YXRl
czoKKy8vCisvLyBFbXB0eTogVGhlcmUgYXJlIG5vIHNwZWNpYWwgY29uZGl0aW9ucyB0aGF0IG5l
ZWQgdG8gYmUgbWV0LgorLy8gSW52YWxpZDogVGhlIGhlYXAgYWNjZXNzIGlzIG5ldmVyIHZhbGlk
LgorLy8gTm9uLWVtcHR5OiBUaGVyZSBhcmUgc29tZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMg
dGhhdCBuZWVkIHRvIGJlIHZhbGlkLgorCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSB7IH0KKyAgICAK
KyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW52YWxpZCgpCisgICAgewor
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2RhdGEgPSBhZG9wdFJlZihuZXcgRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG5vbkVt
cHR5KGNvbnN0IFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIHZlY3RvcikKKyAgICB7
CisgICAgICAgIGlmICh2ZWN0b3IuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihu
ZXcgRGF0YSgpKTsKKyAgICAgICAgKnJlc3VsdC5tX2RhdGEtPnZlY3RvciA9IHZlY3RvcjsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhIHx8ICFtX2RhdGEtPmlzRW1wdHkoKTsK
KyAgICB9CisgICAgCisgICAgdHlwZWRlZiBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiog
aXRlcmF0b3I7CisgICAgCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIG1fZGF0YS0+YmVnaW4oKTsKKyAgICB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtX2RhdGEtPmVuZCgpOworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3QKKyAgICAKKyAg
ICBib29sIGFyZVN0aWxsVmFsaWQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgbmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICAvLyBJbnRl
cm5hbGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1c2luZyBhIHBvaW50ZXIgdG8gYSBEYXRh
IHRoYXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKworICAgIGNsYXNzIERhdGEgOiBSZWZDb3VudGVk
PERhdGE+IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YSk7CisgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIERh
dGEoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bj4gdmVjdG9yOworICAgIH07CisgICAgCisgICAgUmVmUHRyPERhdGE+IG1fZGF0YTsKK307CisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
TWlzcygKKyAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAg
ICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5
cGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4Njc5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDkgQEAgcHVibGljOgogICAgIGJvb2wgcmVhbGxv
Y2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAgICAg
CisgICAgLy8gSXQncyB1bmRlcnN0b29kIHRoYXQgdGhlc2UgY2hlY2tzIGRvbid0IGFjdHVhbGx5
IHJlcXVpcmUgdGhhdCB0aGUgb2JqZWN0IGtlZXBzIGV4YWN0bHkgdGhpcworICAgIC8vIHN0cnVj
dHVyZS4gSXQgY2FuIGhhdmUgd2hhdGV2ZXIgc3RydWN0dXJlLCBzbyBsb25nIGFzIHRoYXQgc3Ry
dWN0dXJlIGFncmVlcyB3aXRoIHRoZSBnaXZlbgorICAgIC8vIG9uZSBhYm91dCB0aGUgcHJvcGVy
dHkgYmVpbmcgc3RvcmVkLgogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
IGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NvbnN0YW50
Q2hlY2tzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAx
ODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVm
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50X2gKIAorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTQ2LDE1
ICs0NywxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50IDogCiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludCgKLSAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBo
b2xkZXIpCi0gICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvJiBob2xkZXIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50PiBuZXh0KQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKKyAgICAg
ICAgOiBtX2tleShrZXkpCisgICAgICAgICwgbV9ob2xkZXIoaG9sZGVyKQogICAgICAgICAsIG1f
bmV4dChXVEY6Om1vdmUobmV4dCkpCiAgICAgewogICAgIH0KQEAgLTY5LDYgKzY2LDcgQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYp
IG92ZXJyaWRlOwogCiBwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5
OwogICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgbV9ob2xkZXI7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG1fbmV4dDsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
dm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJl
RGV0YWlsJiBkZXRhaWwpCit7CisgICAgaWYgKCFtX2tleS5pc1dhdGNoYWJsZSgpKSB7CisgICAg
ICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgICAgICBkYXRh
TG9nKAorICAgICAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRo
aXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICBvdXQu
cHJpbnQoIkFkYXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAg
ICAgICAKKyAgICAgICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwob3V0LnRvQ1N0cmluZygpLmRh
dGEoKSk7CisgICAgICAgIAorICAgICAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAg
ICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJl
b3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRo
aXMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNp
bmNsdWRlICJXYXRjaHBvaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQg
eworcHVibGljOgorICAgIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCisgICAgICAgIDogbV9rZXkoa2V5KQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVC
bG9jaykKKyAgICB7CisgICAgfQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEz
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJh
c2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlk
U3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNv
bnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsKKyAgICB2b2lkIGVtaXRQcm9wZXJ0
eUNoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKIAogICAgIHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIHZvaWQgY2xl
YXJDYWNoZXMoKTsKQEAgLTcwNywxMSArNzA3LDIwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9k
ZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0
ZSB0byBlbWl0UHJvcGVydHlDaGVjaywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3Vy
cmVudGx5LAorICAgICAgICAvLyB0aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFBy
b3BlcnR5Q2hlY2soKSBzaW5jZSB3ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKKyAgICAg
ICAgLy8gb2JqZWN0J3Mgc3RydWN0dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nv
c250YW50LgogICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0
KTsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9i
amVjdE5vZGU7CiAgICAgfQogICAgIAorICAgIHZvaWQgZW1pdFByb3BlcnR5Q2hlY2soSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoUHJlc2VydmF0aW9uT2ZQcm9wZXJ0eShv
YmplY3QsIHVpZCwgc3RydWN0dXJlKSkKKyAgICAgICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1
Y3R1cmVDaGVjayhvYmplY3QsIHN0cnVjdHVyZSk7CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0
ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4
KQogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwpAQCAtMjI5MCwxMCArMjI5OSwxMCBAQCBO
b2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdENoZWNrcyhjb25zdCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHJv
cGVydHlDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2
ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVj
ayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ZW1pdFByb3BlcnR5Q2hlY2sodmVjdG9yW2ldLmNvbnN0YW50KCksIHZlY3RvcltpXS5zdHJ1Y3R1
cmUoKSwgdWlkKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKQEAg
LTIzMjIsOCArMjMzMSwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAog
ICAgICAgICAvLyAxKSBFbWl0IHByb3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwgY2hh
aW5zLiBUaGlzIGNvdWxkIHNvcnQgb2YgbWF5YmUgbm90IGJlCiAgICAgICAgIC8vICAgIG9wdGlt
YWwsIGlmIHRoZXJlIGlzIHNvbWUgcmFyZWx5IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNoYWluIHRo
YXQgcmVxdWlyZXMgYSBsb3QKICAgICAgICAgLy8gICAgb2YgY2hlY2tzIGFuZCB0aG9zZSBjaGVj
a3MgYXJlIG5vdCB3YXRjaHBvaW50YWJsZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50
SW5kZXggPSBnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykKLSAg
ICAgICAgICAgIGVtaXRDaGVja3MoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50
Q2hlY2tzKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5SWRT
dGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICBlbWl0
UHJvcGVydHlDaGVja3MoCisgICAgICAgICAgICAgICAgZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5k
ZXhdLmNvbnN0YW50Q2hlY2tzKCksCisgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVy
cygpW2lkZW50aWZpZXJOdW1iZXJdKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8g
MikgRW1pdCBhIE11bHRpR2V0QnlPZmZzZXQKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEuYWRkKCk7CkBAIC0yMzQ0LDcg
KzIzNTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAg
ICAgICAgIAogICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOwogICAgIAotICAg
IGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKKyAgICBlbWl0UHJvcGVydHlD
aGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl0pOwogCiAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQogICAg
ICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwpAQCAt
MjQzOCw3ICsyNDUwLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBpZiAocHV0QnlJ
ZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZW1pdENo
ZWNrcyhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7CisgICAg
ICAgICAgICAgICAgZW1pdFByb3BlcnR5Q2hlY2tzKAorICAgICAgICAgICAgICAgICAgICBwdXRC
eUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTI0NjMsNyArMjQ3Nyw5IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbjogewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNl
KTsKLSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAg
ICBlbWl0UHJvcGVydHlDaGVja3MoCisgICAgICAgICAgICB2YXJpYW50LmNvbnN0YW50Q2hlY2tz
KCksCisgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0p
OwogCiAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgCkBAIC0y
NTE5LDcgKzI1MzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAg
ICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAg
ICAKLSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAg
ICBlbWl0UHJvcGVydHlDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpLCBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogICAgICAgICAKICAgICAgICAgaWYgKHZh
cmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQogICAgICAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50
KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiAr
ODksOSBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAg
ICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVS
ZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBmb3IgKEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNl
cyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAx
ODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50
LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CkBAIC05OCw2ICs5OSw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2Vs
bD4+IHdlYWtSZWZlcmVuY2VzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8U3RydWN0dXJlPj4g
d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgQmFnPENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludD4gd2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dD4gYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2Vt
ZW50PiBqdW1wUmVwbGFjZW1lbnRzOwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGls
YXRpb24+IGNvbXBpbGF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw4ICszNSw5IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKIHZvaWQgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIFdhdGNocG9pbnQqIHdh
dGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3LCBDb21tb25EYXRhJiBjb21tb24pCiB7CisgICAgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9
IGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKTsKICAgICBBcnJheUJ1ZmZlck5ldXRl
cmluZ1dhdGNocG9pbnQqIG5ldXRlcmluZ1dhdGNocG9pbnQgPQogICAgICAgICBBcnJheUJ1ZmZl
ck5ldXRlcmluZ1dhdGNocG9pbnQ6OmNyZWF0ZSgqY29kZUJsb2NrLT52bSgpKTsKICAgICBuZXV0
ZXJpbmdXYXRjaHBvaW50LT5zZXQoKS0+YWRkKHdhdGNocG9pbnQpOwpAQCAtNDUsMTAgKzQ2LDE3
IEBAIHZvaWQgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmEKIH0KIAogdm9pZCBJ
bmZlcnJlZFZhbHVlQWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZl
cnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBDb21tb25E
YXRhJiBjb21tb24pCiB7CiAgICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChpbmZlcnJlZFZhbHVl
KTsgLy8gRm9yIGNvbW1vbiB1c2VycywgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mg
d2VhayBvciBub3QuIElmIHJlZmVyZW5jZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9v
LgotICAgIGluZmVycmVkVmFsdWUtPmFkZCh3YXRjaHBvaW50KTsKKyAgICBpbmZlcnJlZFZhbHVl
LT5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwordm9pZCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjphZGQoCisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIENvbW1vbkRhdGEmIGNv
bW1vbikKK3sKKyAgICBrZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0
Y2hwb2ludCgKKyAgICAgICAgY29tbW9uLmFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMuYWRk
KGtleSwgY29kZUJsb2NrKSk7CiB9CiAKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNo
cG9pbnRzKCkgeyB9CkBAIC03NCw2ICs4MiwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6
YWRkTGF6aWx5KEpTQXJyCiAgICAgbV9idWZmZXJWaWV3cy5hZGRMYXppbHkodmlldyk7CiB9CiAK
K3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSkKK3sKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHko
a2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAt
ODgsNiArMTAxLDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgog
ICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBt
X2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1f
YnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9hZGFw
dGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAK
IGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTk1LDcg
KzEwOSw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICBy
ZXR1cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJl
U3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgp
Ci0gICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBt
X2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0
dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUg
IkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRh
dGEuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
clZpZXcuaCIKQEAgLTQxLDE1ICs0MiwxNSBAQCBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIHN0cnVjdCBHZW5lcmljU2V0QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRk
KENvZGVCbG9jayosIFQgc2V0LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIHN0YXRpYyB2
b2lkIGFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgVCBzZXQsIENvbW1vbkRhdGEmIGNvbW1vbikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzZXQtPmFkZCh3YXRjaHBvaW50KTsKKyAgICAgICAgcmV0
dXJuIHNldC0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CiAgICAgfQog
ICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChUIHNldCkgeyByZXR1cm4gc2V0LT5o
YXNCZWVuSW52YWxpZGF0ZWQoKTsgfQogfTsKIAogc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9y
IHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIFdhdGNo
cG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSos
IENvbW1vbkRhdGEmKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSW5mZXJy
ZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBpbmZlcnJlZFZh
bHVlLT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKQEAgLTU3LDEyICs1OCwxOCBAQCBzdHJ1Y3QgSW5m
ZXJyZWRWYWx1ZUFkYXB0b3IgewogfTsKIAogc3RydWN0IEFycmF5QnVmZmVyVmlld1dhdGNocG9p
bnRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZl
clZpZXcqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpT
QXJyYXlCdWZmZXJWaWV3KiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5J
bnZhbGlkYXRlZChKU0FycmF5QnVmZmVyVmlldyogdmlldykKICAgICB7Ci0gICAgICAgIGJvb2wg
cmVzdWx0ID0gIXZpZXctPmxlbmd0aCgpOwotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuICF2aWV3LT5sZW5ndGgoKTsK
KyAgICB9Cit9OworCitzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvciB7
CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRl
ZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuICFrZXkuaXNTdGlsbFZhbGlkKCk7CiAgICAgfQogfTsKIApAQCAtODcsNyArOTQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKICAgICAgICAg
CiAgICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQotICAgICAgICAgICAgQWRhcHRvcjo6
YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOwor
ICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24pOwogICAgICAg
ICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQpAQCAtMTIyLDYgKzEyOSwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSopOwogICAgIHZv
aWQgYWRkTGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAgCisgICAgLy8gSXQncyByZWNv
bW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZQorICAgIC8vIEdy
YXBoOjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQsIHdoaWNoIGRvZXMgdGhlIHJlcXVp
cmVkIEdDIG1hZ2ljIGFzIHdlbGwuCisgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mKTsKKyAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwog
ICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEmKTsKQEAgLTE0
NCwxMiArMTU1LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZp
ZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FkYXB0
aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgog
ICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNldCo+IG1fc2V0czsKICAg
ICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElubGluZVdhdGNocG9pbnRTZXQqPiBtX2lubGlu
ZVNldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5m
ZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRX
YXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRB
ZGFwdG9yPiBtX2J1ZmZlclZpZXdzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+
IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4
Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NDgsNiArODQ4LDQ5IEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5v
ZGVzKE5vZGVGbGEKICAgICB9CiB9CiAKK2Jvb2wgR3JhcGg6OmFkZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIGlm
ICgha2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBt
X3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAgaWYgKGtl
eS5jb25kaXRpb24oKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSkKKyAgICAgICAgbV9w
bGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgIG1fcGxh
bi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBHcmFwaDo6d2F0Y2hQcmVzZW5jZU9mUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQoreworICAgIHJldHVybiBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQo
CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZShvYmplY3QsIHVpZCwg
b2Zmc2V0LCBhdHRyaWJ1dGVzKSk7Cit9CisKK2Jvb2wgR3JhcGg6OndhdGNoQWJzZW5jZU9mUHJv
cGVydHkoSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3Qq
IHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gYWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
KAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZShvYmplY3QsIHVpZCwg
cHJvdG90eXBlKSk7Cit9CisKK2Jvb2wgR3JhcGg6OndhdGNoUHJlc2VydmF0aW9uT2ZQcm9wZXJ0
eSgKKyAgICBKU0NlbGwqIGNlbGwsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQoreworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
KyAgICAKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJp
YnV0ZXMpOworICAgIAorICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAg
cmV0dXJuIHdhdGNoQWJzZW5jZU9mUHJvcGVydHkob2JqZWN0LCB1aWQsIHN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCkpOworICAgIAorICAgIHJldHVybiB3YXRjaFByZXNlbmNlT2ZQcm9wZXJ0
eShvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4Njc5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
Njc1LDYgKzY3NSwyNCBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlm
aWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQogICAgIERlc2lyZWRXYXRjaHBv
aW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICAK
KyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkLgorICAg
IGJvb2wgYWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJik7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2YgdGhpcyBjb21w
aWxhdGlvbiBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGhhdmluZyB0aGUgZ2l2ZW4gcHJvcGVydHkgd2l0
aAorICAgIC8vIHRoZSBnaXZlbiBvZmZzZXQgYW5kIGF0dHJpYnV0ZXMuIFJldHVybnMgZmFsc2Ug
aWYgd2F0Y2hpbmcgZm9yIHRoaXMgaXMgaW1wb3NzaWJsZS4KKyAgICBib29sIHdhdGNoUHJlc2Vu
Y2VPZlByb3BlcnR5KAorICAgICAgICBKU09iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IFByb3BlcnR5T2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAKKyAgICAvLyBHYXRl
IHRoZSB2YWxpZGl0eSBvZiB0aGlzIGNvbXBpbGF0aW9uIG9uIHRoZSBnaXZlbiBvYmplY3QgbGFj
a2luZyB0aGUgZ2l2ZW4gcHJvcGVydHkuCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB3YXRjaGlu
ZyBmb3IgdGhpcyBpcyBpbXBvc3NpYmxlLgorICAgIGJvb2wgd2F0Y2hBYnNlbmNlT2ZQcm9wZXJ0
eSgKKyAgICAgICAgSlNPYmplY3QqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICAKKyAg
ICAvLyBHYXRlIHRoZSB2YWxpZGl0eSBvZiB0aGlzIGNvbXBpbGF0aW9uIG9uIHRoZSBnaXZlbiBv
YmplY3QgZWl0aGVyIGhhdmluZywgb3IgbGFja2luZywgdGhlCisgICAgLy8gcHJvcGVydHkgaW4g
dGhlIHNhbWUgd2F5IGFzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgY2xhaW1zIHRvIGhhdmUgKG9yIGxh
Y2spIHRoZSBwcm9wZXJ0eS4KKyAgICBib29sIHdhdGNoUHJlc2VydmF0aW9uT2ZQcm9wZXJ0eSgK
KyAgICAgICAgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpOworCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9j
ayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJh
bWUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2
aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlk
U2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCiAgICAg
Ym9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJl
UHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZHNJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9y
SW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVC
bG9jaykpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2sp
OwpAQCAtNjI3LDkgKzYyNyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JD
ZWxsKFYKICAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZt
KTsKICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9Ci0gICAgQVNTRVJUKCFz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAgIGlmICh0eXBl
SW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJl
UHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAK
ICAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQs
MTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGlj
dGlvbmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KICAgICBib29sIGlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSA9PSBVbmNh
Y2hlZERpY3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0aW9uYXJ5
S2luZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKTsgfQorICAgIGJv
b2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4g
ZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kCisgICAgICAgICAgICAm
JiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICAgICAgJiYg
ISh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3
SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpOworICAgIH0KKyAgICAKKyAgICBib29s
IG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQorICAgICAgICAgICAgJiYgdHlwZUluZm8uaGFz
SW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvLm5ld0lt
cHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpOworICAgIH0KIAogICAgIC8vIFdlIHVzZSBT
bG93UGF0aCBpbiBHZXRCeUlkU3RhdHVzIGZvciBzdHJ1Y3R1cmVzIHRoYXQgbWF5IGdldCBuZXcg
aW1wdXJlIHByb3BlcnRpZXMgbGF0ZXIgdG8gcHJldmVudAogICAgIC8vIERGRyBmcm9tIGlubGlu
aW5nIHByb3BlcnR5IGFjY2Vzc2VzIHNpbmNlIHN0cnVjdHVyZXMgZG9uJ3QgdHJhbnNpdGlvbiB3
aGVuIGEgbmV3IGltcHVyZSBwcm9wZXJ0eSBhcHBlYXJzLgpAQCAtMjAyLDcgKzIxNCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blBy
b3BlcnR5U2xvdCgpOwogICAgIH0KLQorICAgIAogICAgIC8vIFR5cGUgYWNjZXNzb3JzLgogICAg
IFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5m
bygpID09IGluZm8oKSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxh
Z3MpOyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNP
YmplY3QoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAx
ODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MTksNiArNTE5LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZGlzY2FyZEFsbENvZGUoKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1w
dXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYsIFdhdGNocG9pbnQqKTsKKyAgICAKICAgICAv
LyBGSVhNRTogVXNlIEF0b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlm
aWVyLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3Qg
U3RyaW5nJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256891</attachid>
            <date>2015-07-15 21:28:47 -0700</date>
            <delta_ts>2015-07-16 00:47:39 -0700</delta_ts>
            <desc>more carnage</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74213</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODUyLDYgKzQ4NTYsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
ZXQ7IH0KKworICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGNoZWNrcyBkb24ndCBh
Y3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBleGFjdGx5IHRoaXMKKyAgICAv
LyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVjdHVyZSwgc28gbG9uZyBhcyB0
aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBvbmUgYWJvdXQgdGhl
IHByb3BlcnR5IGJlaW5nIGxvYWRlZC4KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7
IH0KKyAgICAKICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWx0ZXJuYXRlQmFzZTsgfQogICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tl
ZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgb3V0LnByaW50KEpTVmFsdWUobV9vYmplY3QpLCAiOiAiLCBtX2NvbmRp
dGlvbiwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2NvbmRpdGlvbikgeworICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAi
LCBtX29mZnNldCwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIiB3
aXRoIHByb3RvdHlwZSAiLCBKU09iamVjdChwcm90b3R5cGUoKSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+
cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgc3dpdGNoIChjb25kaXRpb24oKSkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRp
b246OlByZXNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgY3Vy
cmVudEF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAg
ICAgICBpZiAoY3VycmVudE9mZnNldCAhPSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmlidXRlcyAh
PSBhdHRyaWJ1dGVzKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTog
eworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpICE9IGludmFs
aWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBp
ZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJp
YnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfSB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2NvbmRp
dGlvbikgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxp
ZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmICghaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQ3VycmVudGx5IHdlIGFzc3VtZSB0aGF0IGFuIGltcHVyZSBwcm9wZXJ0eSBjYW4g
Y2F1c2UgYSBwcm9wZXJ0eSB0byBhcHBlYXIsIGFuZCBjYW4gYWxzbworICAgIC8vICJzaGFkb3ci
IGFuIGV4aXN0aW5nIEpTIHByb3BlcnR5IG9uIHRoZSBzYW1lIG9iamVjdC4gSGVuY2UgaXQgYWZm
ZWN0cyBib3RoIHByZXNlbmNlIGFuZAorICAgIC8vIGFic2VuY2UuIEl0IGRvZXNuJ3QgYWZmZWN0
IEFic2VuY2VPZlNldHRlciBiZWNhdXNlIGltcHVyZSBwcm9wZXJ0aWVzIGFyZW4ndCBldmVyIHNl
dHRlcnMuCisgICAgc3dpdGNoIChtX2NvbmRpdGlvbikgeworICAgIGNhc2UgUHJvcGVydHlDb25k
aXRpb246OlByZXNlbmNlOgorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlT
bG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IGlzU3RpbGxWYWxpZChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
K3sKKyAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzU3Rp
bGxWYWxpZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpp
c1dhdGNoYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCkp
OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9vYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgaWYgKG1fY29uZGl0aW9uID09IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlKSB7Cisg
ICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZl
cmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICAKKyAgICBpZiAobV9j
b25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpCisgICAgICAgIHRyYWNrZWQu
Y2hlY2socHJvdG90eXBlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNl
IFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAg
IGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmlu
dCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRl
cjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJl
bmNlczsKKworZW51bSBjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CisgICAgUHJlc2VuY2UsIC8v
IFdlJ3JlIGZpbmUgc28gbG9uZyBhcyB0aGUgcHJvcGVydHkgaXMgcHJlc2VudC4KKyAgICBBYnNl
bmNlLCAvLyBXZSdyZSBmaW5lIHNvIGxvbmcgYXMgdGhlIHByb3BlcnR5IGlzIGFic2VudC4KKyAg
ICBBYnNlbmNlT2ZTZXR0ZXIsIC8vIFdlJ3JlIGZpbmUgc28gbG9uZyBhcyBpdCBkb2Vzbid0IHR1
cm4gaW50byBhIHNldHRlciBwcm9wZXJ0eS4KK307CisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAg
IDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChudWxscHRyKQorICAgICAgICAs
IG1fY29uZGl0aW9uKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgICAgICAsIG1fdWlkKG51
bGxwdHIpCisgICAgICAgICwgbV9jb25kaXRpb24oUHJvcGVydHlDb25kaXRpb246OkFic2VuY2Up
CisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
cHJlc2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVj
dCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJp
ZXIob3duZXIpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5t
X3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRp
b246OlByZXNlbmNlOworICAgICAgICByZXN1bHQudS5wcmVzZW5jZS5vZmZzZXQgPSBvZmZzZXQ7
CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09i
amVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICAK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAg
cmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAg
IHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
YWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0
KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIAorICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29i
amVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1
bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOworICAg
ICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNl
bmNlOyB9OworICAgIAorICAgIEpTT2JqZWN0KiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdDsgfQorICAgIFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fY29uZGl0aW9uOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdWlkOyB9CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghISp0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9u
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgICAgIHJldHVybiB1LnByZXNl
bmNlLm9mZnNldDsKKyAgICB9CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoISEqdGhpcyk7CisgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvbiA9
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworICAgICAgICByZXR1cm4gdS5wcmVzZW5j
ZS5hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghISp0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fY29u
ZGl0aW9uID09IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlIHx8IG1fY29uZGl0aW9uID09IFBy
b3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXIpOworICAgICAgICByZXR1cm4gdS5hYnNl
bmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkg
KyBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV9jb25kaXRpb24pOworICAgICAgICBzd2l0Y2ggKG1fY29uZGl0aW9u
KSB7CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICAg
ICAgcmVzdWx0ICs9IHUucHJlc2VuY2Uub2Zmc2V0OworICAgICAgICAgICAgcmVzdWx0ICs9IHUu
cHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBy
b3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpT
T2JqZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0ICE9IG90aGVyLm1fb2JqZWN0KQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV91aWQgIT0gb3RoZXIubV91aWQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2NvbmRpdGlvbiAhPSBvdGhlci5t
X2NvbmRpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoICht
X2NvbmRpdGlvbikgeworICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToK
KyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldCA9PSBvdGhlci51LnByZXNlbmNl
Lm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2VuY2UuYXR0cmlidXRlcyA9PSBvdGhl
ci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246
OkFic2VuY2U6CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRl
cjoKKyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJz
ZW5jZS5wcm90b3R5cGU7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9v
YmplY3QgJiYgbV9jb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAg
fQorICAgIAorICAgIC8vIFRoZXNlIHZhbGlkaXR5LWNoZWNraW5nIG1ldGhvZHMgY2FuIG9wdGlv
bmFsbHkgdGFrZSBhIFN0cnV0dXJlKiBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlCisgICAgLy8gU3Ry
dWN0dXJlKiBmcm9tIHRoZSBvYmplY3QuIElmIHlvdSdyZSBpbiB0aGUgY29uY3VycmVudCBKSVQs
IHRoZW4geW91IG11c3QgdXNlIHRoZSBmb3JtcworICAgIC8vIHRoYXQgdGFrZSBhbiBleHBsaWNp
dCBTdHJ1Y3R1cmUqIGJlY2F1c2UgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZv
ciB0aGUgc2FtZQorICAgIC8vIHN0cnVjdHVyZSB0aGF0IHlvdSB2YWxpZGF0ZWQgKGkuZS4gYXZv
aWQgYSBUT0NUT1UgcmFjZSkuCisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBz
dHJ1Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLgor
ICAgIGJvb2wgaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3Ry
dWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBu
ZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVu
IGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0
cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChT
dHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCBk
ZWZpbml0ZWx5IGhhcywgb3IgZGVmaW5pdGVseSBkb2VzIG5vdCBoYXZlLCB0aGUgcHJvcGVydHkg
cmlnaHQgbm93LgorICAgIC8vIElmIHRydWUsIHRoZW4gd2UgY291bGQgY29udGludWUgdG8gdmVy
aWZ5IHRoZSB2YWxpZGl0eSBieSBjaGVja2luZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUKKyAgICAv
LyBzdHJ1Y3R1cmUuIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmpl
Y3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndAorICAgIC8vIGd1YXJhbnRlZSB0aGUgY29uZGl0
aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29uZGl0aW9uIG9uIGFuIG9iamVjdCB0
aGF0IG1heSBoYXZlCisgICAgLy8gaW1wdXJlIHByb3BlcnRpZXMuCisgICAgYm9vbCBpc1N0aWxs
VmFsaWQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsK
KyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291
bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNo
cG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKFN0cnVjdHVyZSop
IGNvbnN0OworICAgIGJvb2wgaXNXYXRjaGFibGUoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgdGhlIG9iamVjdHMgaW52b2x2ZWQgaW4gdGhpcyBhcmUgc3RpbGwgbGl2ZS4K
KyAgICBib29sIGlzU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJl
ZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBKU09iamVjdCogbV9vYmplY3Q7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAg
IFByb3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIHVuaW9uIHsKKyAgICAgICAgc3Ry
dWN0IHsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICBKU09iamVjdCogbV9wcm90b3R5cGU7CisgICAgICAgIH0gYWJzZW5jZTsK
KyAgICB9IHU7Cit9OworCitzdHJ1Y3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbik7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1
bHRIYXNoPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
aCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK09iamVj
dFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3Qo
SlNPYmplY3QqIG9iamVjdCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLm9i
amVjdCgpID09IG9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQor
ICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uLmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6YXJlU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QK
K3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7
CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0
aW9uLnZhbGlkaXR5UmVxdXJpZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFyZVN0aWxsVmFsaWQoKSBjb25zdAoreworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7Cisg
ICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCituYW1lc3BhY2UgeworCitPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3Bl
cnR5Q29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9i
amVjdC0+c3RydWN0dXJlKCk7CisgICAgCisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBj
YXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob2Zmc2V0ID09IGludmFs
aWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsK
KyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSh2bSwgb3du
ZXIsIG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICBjYXNlIFBy
b3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOiB7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6YWJzZW5jZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1aWQs
IG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICB9CisgICAgY2Fz
ZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOiB7CisgICAgICAgIHJldHVybiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKAorICAgICAgICAgICAgdm0s
IG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBl
KCkpOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90
b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb24gY29u
ZGl0aW9uKQoreworICAgIEFTU0VSVCghIXByb3RvdHlwZSA9PSAoY29uZGl0aW9uID09IFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkpOworICAgIAorICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbj4gY29uZGl0aW9uczsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHYuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvdG90eXBlKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2KTsKKyAgICAgICAgc3RydWN0dXJlID0gb2Jq
ZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAKKyAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNj
ZXNzaW5nIGEgcHJvdG90eXBlIHJlcGVhdGVkbHksIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0IHNo
b3VsZCBub3QgYmUKKyAgICAgICAgLy8gdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgc3RydWN0dXJlLT5m
bGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgCisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG5ld0NvbmRpdGlvbiA9CisgICAgICAgICAgICBnZW5l
cmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBjb25kaXRpb24pOworICAgICAg
ICBpZiAoIW5ld0NvbmRpdGlvbiB8fCAhbmV3Q29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgCisgICAgICAgIGNvbmRpdGlv
bnMuYXBwZW5kKG5ld0NvbmRpdGlvbik7CisgICAgICAgIAorICAgICAgICBpZiAob2JqZWN0ID09
IHByb3RvdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlvbnMpCit9CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2
bSwgb3duZXIsIGV4ZWMsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVydHlDb25k
aXRpb246OkFic2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAg
ICB2bSwgb3duZXIsIGV4ZWMsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2VPZlNldHRlcik7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBvdG90eXBlUHJvcGVydHlIaXQoCisgICAgVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVy
ZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorewor
ICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhlYywg
aGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2xkdWUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJvcGVy
dHkgY29uZGl0aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0aW9u
YWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFjY2Vz
cyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmVz
dGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRpdGlv
bnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBpcyBu
ZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkg
eyB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFsaWQo
KQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBub25FbXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2ZWN0
b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0g
YWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgICpyZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2
ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRhLT5p
c0VtcHR5KCk7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtX2RhdGEtPmJlZ2luKCk7CisgICAgfQorICAgIGl0ZXJhdG9yIGVuZCgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRhLT5lbmQoKTsKKyAgICB9CisgICAgCisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0
CisgICAgCisgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGls
bFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29s
IG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxs
TGl2ZSgpIGNvbnN0OworICAgIAorICAgIC8vIEhlbHBlcnMgZm9yIHVzaW5nIHRoaXMgaW4gYSB1
bmlvbi4KKyAgICB2b2lkKiByZWxlYXNlUmF3UG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkpOworICAgIH0KKyAgICBzdGF0
aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgYWRvcHRSYXdQb2ludGVyKHZvaWQqIHJhd1Bv
aW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxEYXRhKj4ocmF3
UG9pbnRlcikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzdGF0aWMgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZnJvbVJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikK
KyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIEludGVybmFs
bHksIHRoaXMgcmVwcmVzZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9pbnRlciB0byBhIERhdGEgdGhh
dCBoYXMgYW4gZW1wdHkgdmVjdG9yLgorICAgIAorICAgIGNsYXNzIERhdGEgOiBSZWZDb3VudGVk
PERhdGE+IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YSk7CisgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIERh
dGEoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bj4gdmVjdG9yOworICAgIH07CisgICAgCisgICAgUmVmUHRyPERhdGE+IG1fZGF0YTsKK307CisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
TWlzcygKKyAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAg
ICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5
cGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxNCArMzcsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCiAgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQpCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiAg
ICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fY2hhaW5Db3VudChjaGFpbkNvdW50KQogICAgICwg
bV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRpdGlvblNldChj
b25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQogewotICAgIGlm
IChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7CiB9CiAKIEdl
dEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcxLDcgKzcwLDcgQEAgYm9vbCBHZXRC
eUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogewogICAgIGlmIChtX3N0cnVjdHVyZSAm
JiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQor
ICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4Njc5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIAogICAgIEdl
dEJ5SWRBY2Nlc3MoCiAgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNo
YWluKiA9IDAsIHVuc2lnbmVkIGNoYWluQ291bnQgPSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAg
ICAgCiAgICAgfkdldEJ5SWRBY2Nlc3MoKTsKICAgICAKQEAgLTcyLDggKzcyLDcgQEAgcHVibGlj
OgogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmUuZ2V0KCk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7
IHJldHVybiBtX2NoYWluLmdldCgpOyB9Ci0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2hhaW5Db3VudDsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQog
ICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAt
OTMsNiArOTIsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwogICAgIHVuc2ln
bmVkIG1fY2hhaW5Db3VudDsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVy
ZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvblNldDsgLy8gRklYTUUg
d2hhdCBhYm91dCBiYXJyaWVycz8KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1f
Y2hhaW47CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6
OmZyb21TdHJ1Y3R1CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwogICAgICAg
ICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNp
dGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5j
b3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZSk7Ci0gICAgICAg
IHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uY2hh
aW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAorICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGlu
ZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC02
NCw2ICs2NSw5IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKIAog
Ym9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZl
cikgY29uc3QKIHsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IFJlcGxhY2U6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0
KCkpKQpAQCAtNzQsMTUgKzc4LDExIEBAIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJl
cGF0Y2hCdWYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFIZWFwOjpp
c01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0dGVyOgogICAgIGNh
c2UgQ3VzdG9tU2V0dGVyOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0
dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fY2hh
aW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODY3OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgog
ICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwK
ICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUp
CiAgICAgewogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1f
dHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBvbGRTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZt
LCBvd25lciwgY2hhaW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRp
b25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IDA7CiAgICAgICAgIHJlc3Vs
dC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBA
IC05NSw4ICs5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAg
ICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50
LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
LAogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCiAg
ICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKQEAg
LTEwNCwxMCArMTAzLDcgQEAgcHVibGljOgogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsK
ICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7
CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBhY2Nlc3NUeXBlOwotICAgICAgICBpZiAoY2hhaW4p
IHsKLSAgICAgICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKLSAg
ICAgICAgICAgIHJlc3VsdC5tX2NoYWluQ291bnQgPSBjaGFpbkNvdW50OwotICAgICAgICB9Cisg
ICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVz
dWx0Lm1fY3VzdG9tU2V0dGVyID0gY3VzdG9tU2V0dGVyOwogICAgICAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ2LDE3
ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZS5nZXQoKTsK
ICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkp
OwotICAgICAgICByZXR1cm4gbV9jaGFpbi5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWdu
ZWQgY2hhaW5Db3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXR0ZXIoKSB8
fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY2hhaW5Db3VudDsKLSAgICB9CisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJS
b3V0aW5lKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMCw2ICsxMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdDsKICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKKyAgICAvLyBJdCdzIHVu
ZGVyc3Rvb2QgdGhhdCB0aGVzZSBjaGVja3MgZG9uJ3QgYWN0dWFsbHkgcmVxdWlyZSB0aGF0IHRo
ZSBvYmplY3Qga2VlcHMgZXhhY3RseSB0aGlzCisgICAgLy8gc3RydWN0dXJlLiBJdCBjYW4gaGF2
ZSB3aGF0ZXZlciBzdHJ1Y3R1cmUsIHNvIGxvbmcgYXMgdGhhdCBzdHJ1Y3R1cmUgYWdyZWVzIHdp
dGggdGhlIGdpdmVuCisgICAgLy8gb25lIGFib3V0IHRoZSBwcm9wZXJ0eSBiZWluZyBzdG9yZWQu
CiAgICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3Mo
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludF9oCiAjZGVmaW5lIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnRfaAogCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJX
YXRjaHBvaW50LmgiCiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNDYsMTUgKzQ3LDExIEBAIGNsYXNz
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQgOiAKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KAot
ICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlcikKLSAgICAgICAg
OiBtX2hvbGRlcihob2xkZXIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5LAogICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlciwK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+
IG5leHQpCi0gICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQorICAgICAgICA6IG1fa2V5KGtleSkK
KyAgICAgICAgLCBtX2hvbGRlcihob2xkZXIpCiAgICAgICAgICwgbV9uZXh0KFdURjo6bW92ZShu
ZXh0KSkKICAgICB7CiAgICAgfQpAQCAtNjksNiArNjYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CiAgICAgV2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvJiBtX2hvbGRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4gbV9uZXh0OwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgsMTIg
QEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25v
cm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9u
LnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToK
ICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRv
bid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgsMTAg
QEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRC
eUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFI
ZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAg
ICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgp
KSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0
cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgh
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAg
ICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAg
ICAgLy8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lk
IGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSog
cHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBp
ZiAoaXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90
cmFuc2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1
YkluZm8gewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUu
c2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFu
c2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1
dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5w
dXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJh
d1BvaW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRl
dGFpbCkKK3sKKyAgICBpZiAoIW1fa2V5LmlzV2F0Y2hhYmxlKCkpIHsKKyAgICAgICAgaWYgKERG
Rzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAg
ICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIs
IG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgIG91dC5wcmludCgiQWRh
cHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgICAgIAorICAg
ICAgICBTdHJpbmdGaXJlRGV0YWlsIGRldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAg
ICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgICAgIFByb2Zp
bGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRp
b24sICZkZXRhaWwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fa2V5Lm9i
amVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2Rl
ZmluZSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldh
dGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6
CisgICAgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAg
ICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAog
ICAgICAgICBib29sIGlzRGlyZWN0KTsKLSAgICB2b2lkIGVtaXRDaGVja3MoY29uc3QgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYpOworICAgIHZvaWQgZW1pdFByb3BlcnR5Q2hlY2tzKGNv
bnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImLCBVbmlxdWVkU3RyaW5nSW1wbCopOwog
CiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVhckNhY2hlcygp
OwpAQCAtNzA3LDExICs3MDcsMjAgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29u
c3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQ
cm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIEJ1dCBjdXJyZW50bHksCisg
ICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJvbSB1c2luZyBlbWl0UHJvcGVydHlDaGVj
aygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRoZQorICAgICAgICAvLyBvYmpl
Y3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAg
ICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25zdGFudChvYmplY3QpOwogICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBlbWl0UHJvcGVydHlDaGVjayhKU0NlbGwqIG9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAg
ICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KG9iamVjdCwgdWlk
LCBzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNr
KG9iamVjdCwgc3RydWN0dXJlKTsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0
UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewog
ICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPm1fbG9jayk7CkBAIC0yMjkwLDEwICsyMjk5LDEwIEBAIE5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3ImIHZlY3RvcikKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQcm9wZXJ0eUNoZWNr
cyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXpl
KCk7ICsraSkKLSAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHZlY3Rvcltp
XS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCkpOworICAgICAgICBlbWl0UHJvcGVy
dHlDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpLCB1aWQp
OwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMyMiw4ICsy
MzMxLDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgIC8v
IDEpIEVtaXQgcHJvdG90eXBlIHN0cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMuIFRoaXMg
Y291bGQgc29ydCBvZiBtYXliZSBub3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwgaWYgdGhl
cmUgaXMgc29tZSByYXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCByZXF1aXJl
cyBhIGxvdAogICAgICAgICAvLyAgICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBhcmUgbm90
IHdhdGNocG9pbnRhYmxlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdl
dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KQotICAgICAgICAgICAg
ZW1pdENoZWNrcyhnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGVtaXRQcm9wZXJ0eUNo
ZWNrcygKKyAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3Rh
bnRDaGVja3MoKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRp
Zmllck51bWJlcl0pOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyAyKSBFbWl0IGEg
TXVsdGlHZXRCeU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1f
Z3JhcGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKQEAgLTIzNDQsNyArMjM1Niw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICAgICAgCiAg
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7CiAgICAgCi0gICAgZW1pdENoZWNr
cyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgIGVtaXRQcm9wZXJ0eUNoZWNrcyh2YXJp
YW50LmNvbnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVt
YmVyXSk7CiAKICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAgIGJhc2Ug
PSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7CkBAIC0yNDM4LDcgKzI0
NTAsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7
IHZhcmlhbnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3Zh
cmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5
SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAg
ICBlbWl0UHJvcGVydHlDaGVja3MoCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXNb
dmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpLAorICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIApAQCAtMjQ2Myw3ICsyNDc3LDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlJZCgKICAgICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uOiB7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBo
LmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAg
ICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVtaXRQcm9w
ZXJ0eUNoZWNrcygKKyAgICAgICAgICAgIHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSwKKyAgICAg
ICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAKICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1MTksNyArMjUz
NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGFkZFRv
R3JhcGgoCiAgICAgICAgICAgICBDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIAotICAgICAg
ICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVtaXRQcm9w
ZXJ0eUNoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtpZGVudGlmaWVyTnVtYmVyXSk7CiAgICAgICAgIAogICAgICAgICBpZiAodmFyaWFudC5hbHRl
cm5hdGVCYXNlKCkpCiAgICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5h
bHRlcm5hdGVCYXNlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw5IEBAIHZv
aWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAgICB0
cmFja2VkUmVmZXJlbmNlcy5jaGVjayhpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNv
bnN0YW50KCkpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZvciAoQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50KiB3YXRjaHBvaW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
cykKKyAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRS
ZWZlcmVuY2VzKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4Njc5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNs
dWRlICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk4LDYg
Kzk5LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1Jl
ZmVyZW5jZXM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0
dXJlUmVmZXJlbmNlczsKICAgICBCYWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3
YXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IGp1bXBS
ZXBsYWNlbWVudHM7CiAgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29t
cGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBB
cnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1v
bkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndh
dGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hw
b2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNo
cG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMTcgQEAgdm9pZCBB
cnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFs
dWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUq
IGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1v
bikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3Ig
Y29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5v
dC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5m
ZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21t
b24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQorewor
ICAgIGtleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAor
ICAgICAgICBjb21tb24uYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2Rl
QmxvY2spKTsKIH0KIAogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7
IH0KQEAgLTc0LDYgKzgyLDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHko
SlNBcnIKICAgICBtX2J1ZmZlclZpZXdzLmFkZExhemlseSh2aWV3KTsKIH0KIAordm9pZCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5KQoreworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOworfQor
CiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC04OCw2ICsxMDEs
NyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmxp
bmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1faW5mZXJyZWRW
YWx1ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3
cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0
dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtOTUsNyArMTA5LDggQEAg
Ym9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgIHJldHVybiBtX3Nl
dHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlk
KCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAg
JiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYnVmZmVyVmll
d3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFy
ZVN0aWxsVmFsaWQoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShy
ZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2lu
Y2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgpA
QCAtNDEsMTUgKzQyLDE1IEBAIGNsYXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
c3RydWN0IEdlbmVyaWNTZXRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2Nr
KiwgVCBzZXQsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgc3RhdGljIHZvaWQgYWRkKENv
ZGVCbG9jayogY29kZUJsb2NrLCBUIHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHNldC0+YWRkKHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0LT5h
ZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3RhdGlj
IGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZh
bGlkYXRlZCgpOyB9CiB9OwogCiBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0
YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOwor
ICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0
YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBp
bmZlcnJlZFZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0Jl
ZW5JbnZhbGlkYXRlZCgpOwpAQCAtNTcsMTIgKzU4LDE4IEBAIHN0cnVjdCBJbmZlcnJlZFZhbHVl
QWRhcHRvciB7CiB9OwogCiBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3Ig
ewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdh
dGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZl
clZpZXcqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVk
KEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAh
dmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KK307
CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0
aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBD
b21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5p
c1N0aWxsVmFsaWQoKTsKICAgICB9CiB9OwogCkBAIC04Nyw3ICs5NCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVhbGx5QWRkZWQpOwogICAgICAgICAKICAgICAgICAg
Zm9yIChhdXRvJiBzZXQgOiBtX3NldHMpCi0gICAgICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJs
b2NrLCBzZXQsIGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CisgICAgICAgICAg
ICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbik7CiAgICAgICAgIAogICAgICAg
ICBtX3JlYWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CkBAIC0xMjIsNiArMTI5LDEwIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFkZExhemlseShJbmZlcnJlZFZhbHVlKik7CiAgICAgdm9pZCBhZGRMYXpp
bHkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKICAgICAKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRo
YXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlCisgICAgLy8gR3JhcGg6OmFkZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCwgd2hpY2ggZG9lcyB0aGUgcmVxdWlyZWQgR0MgbWFn
aWMgYXMgd2VsbC4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYpOworICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCiAgICAg
dm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwgQ29tbW9uRGF0YSYpOwpAQCAtMTQ0LDEyICsxNTUs
MTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNXYXRj
aGVkKHZpZXcpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1
cmVTZXRzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgR2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAgIEdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5lU2V0czsKICAg
ICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVl
QWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
PEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1f
YnVmZmVyVmlld3M7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2
ZVN0cnVjdHVyZVNldHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg0OCw2ICs4NDgsNDkgQEAgdm9pZCBHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZUZs
YQogICAgIH0KIH0KIAorYm9vbCBHcmFwaDo6YWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNX
YXRjaGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFr
UmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5LmNvbmRpdGlv
bigpID09IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlKQorICAgICAgICBtX3BsYW4ud2Vha1Jl
ZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5wcm90b3R5cGUoKSk7CisgICAgbV9wbGFuLndhdGNocG9p
bnRzLmFkZExhemlseShrZXkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjp3
YXRjaFByZXNlbmNlT2ZQcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
Cit7CisgICAgcmV0dXJuIGFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlKG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0
dHJpYnV0ZXMpKTsKK30KKworYm9vbCBHcmFwaDo6d2F0Y2hBYnNlbmNlT2ZQcm9wZXJ0eShKU09i
amVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBl
KQoreworICAgIHJldHVybiBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKG9iamVjdCwgdWlkLCBwcm90b3R5cGUp
KTsKK30KKworYm9vbCBHcmFwaDo6d2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAorICAgIEpT
Q2VsbCogY2VsbCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Cit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihjZWxs
KTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIAorICAg
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Cisg
ICAgCisgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICByZXR1cm4gd2F0
Y2hBYnNlbmNlT2ZQcm9wZXJ0eShvYmplY3QsIHVpZCwgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5
cGUoKSk7CisgICAgCisgICAgcmV0dXJuIHdhdGNoUHJlc2VuY2VPZlByb3BlcnR5KG9iamVjdCwg
dWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3Jh
cGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29k
ZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9y
IGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzUsNiArNjc1
LDI0IEBAIHB1YmxpYzoKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyBy
ZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRj
aHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQogICAgIAorICAgIC8vIFJl
dHVybnMgZmFsc2UgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGludmFsaWQuCisgICAgYm9vbCBhZGRB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
KTsKKyAgICAKKyAgICAvLyBHYXRlIHRoZSB2YWxpZGl0eSBvZiB0aGlzIGNvbXBpbGF0aW9uIG9u
IHRoZSBnaXZlbiBvYmplY3QgaGF2aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSB3aXRoCisgICAgLy8g
dGhlIGdpdmVuIG9mZnNldCBhbmQgYXR0cmlidXRlcy4gUmV0dXJucyBmYWxzZSBpZiB3YXRjaGlu
ZyBmb3IgdGhpcyBpcyBpbXBvc3NpYmxlLgorICAgIGJvb2wgd2F0Y2hQcmVzZW5jZU9mUHJvcGVy
dHkoCisgICAgICAgIEpTT2JqZWN0KiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlP
ZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgIAorICAgIC8vIEdhdGUgdGhlIHZhbGlk
aXR5IG9mIHRoaXMgY29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVjdCBsYWNraW5nIHRoZSBn
aXZlbiBwcm9wZXJ0eS4KKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHdhdGNoaW5nIGZvciB0aGlz
IGlzIGltcG9zc2libGUuCisgICAgYm9vbCB3YXRjaEFic2VuY2VPZlByb3BlcnR5KAorICAgICAg
ICBKU09iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIAorICAgIC8vIEdhdGUg
dGhlIHZhbGlkaXR5IG9mIHRoaXMgY29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVjdCBlaXRo
ZXIgaGF2aW5nLCBvciBsYWNraW5nLCB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpbiB0aGUgc2FtZSB3
YXkgYXMgdGhlIGdpdmVuIHN0cnVjdHVyZSBjbGFpbXMgdG8gaGF2ZSAob3IgbGFjaykgdGhlIHBy
b3BlcnR5LgorICAgIGJvb2wgd2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAorICAgICAgICBK
U0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisK
ICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAg
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODY3
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KAogICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBh
Y3QpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZp
cmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkc0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAg
ICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CkBAIC0yOTYs
MTEgKzI5NiwxMiBAQCBzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1dFByCiAK
IHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBCeUlk
U3R1YktpbmQga2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLAotICAgIEZ1bmN0
aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sIHNpemVfdCBjb3VudCwKKyAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBib29sIGxvYWRUYXJnZXRGcm9tUHJveHksIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRT
ZXQsCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJl
bCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsK
LQorICAgIEFTU0VSVChjb25kaXRpb25TZXQuYXJlU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpOworICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNl
R1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0Niw5
ICszNDcsMTAgQEAgc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKICAgICB9CiAKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAg
aWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IGNvbmRpdGlv
blNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAgICAgICAgIHZtLT5yZWdpc3Rl
cldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdh
dGNocG9pbnQoY29kZUJsb2NrKSk7CiAKKyAgICAvLyBXaGF0IGlzIHRoaXM/PwogICAgIGlmICh3
YXRjaHBvaW50U2V0KQogICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0
Y2hwb2ludChjb2RlQmxvY2spKTsKIApAQCAtNjI3LDkgKzYyOSw4IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFYKICAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0
ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
ICAgICB9Ci0gICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
OwogICAgIAotICAgIGlmICh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAm
JiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYg
KCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7CkBAIC04Mjcs
MjEgKzgyOCwyMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAg
ICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZh
bGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJv
dG90eXBlQ2hhaW4gPSAwOwotICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgCisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgIAogICAgIGlmIChzbG90Lmlz
VW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAgICAgICAgIGlmICh0
eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICAgICAgaWYg
KHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVD
aGFpbihleGVjLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgp
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVD
aGFpbkZvckNoYWluQWNjZXNzKAotICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xv
dC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKGNvdW50ID09IEludmFs
aWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90
QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
IHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAg
ICAgCisgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5mb3JPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKS5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
bGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8pOwpAQCAtODUyLDcg
Kzg1NCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAK
ICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIGJvb2wgcmVzdWx0
ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQs
IGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0
LCAKKyAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwg
c3R1YkluZm8sIGNvbmRpdGlvblNldCwgb2Zmc2V0LCAKICAgICAgICAgc3RydWN0dXJlLCBsb2Fk
VGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgCiAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0
aFRhcmdldChzdHViSW5mbykpLCBzdHViUm91dGluZSk7CkBAIC04NzEsNyArODczLDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIAogICAgIGxpc3QtPmFk
ZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAogICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsCi0gICAgICAgIHBy
b3RvdHlwZUNoYWluLCBjb3VudCkpOworICAgICAgICBjb25kaXRpb25TZXQpKTsKICAgICAKICAg
ICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5l
LmdldCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCwxOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgp
ICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQogICAgIGJvb2wgaXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpID09IFVuY2FjaGVkRGljdGlvbmFy
eUtpbmQ7IH0KICAgCi0gICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgeyBy
ZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kICYmICF0eXBl
SW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpOyB9CisgICAgYm9vbCBwcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5S2lu
ZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQKKyAgICAgICAgICAgICYmICF0eXBlSW5mbygp
LnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCisgICAgICAgICAgICAmJiAhKHR5cGVJbmZvLmhh
c0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0
eUZpcmVzV2F0Y2hwb2ludHMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpCisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpCisgICAgICAgICAgICAmJiB0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Q
cm9wZXJ0eVNsb3QoKQorICAgICAgICAgICAgJiYgdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlG
aXJlc1dhdGNocG9pbnRzKCk7CisgICAgfQogCiAgICAgLy8gV2UgdXNlIFNsb3dQYXRoIGluIEdl
dEJ5SWRTdGF0dXMgZm9yIHN0cnVjdHVyZXMgdGhhdCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVy
dGllcyBsYXRlciB0byBwcmV2ZW50CiAgICAgLy8gREZHIGZyb20gaW5saW5pbmcgcHJvcGVydHkg
YWNjZXNzZXMgc2luY2Ugc3RydWN0dXJlcyBkb24ndCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1w
dXJlIHByb3BlcnR5IGFwcGVhcnMuCkBAIC0yMDIsNyArMjE0LDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCk7
CiAgICAgfQotCisgICAgCiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8gdHlw
ZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygp
KTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KICAgICBi
b29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOSw2
ICs1MTksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxs
Q29kZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShj
b25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAgIAogICAgIC8vIEZJWE1FOiBVc2Ug
QXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256894</attachid>
            <date>2015-07-16 00:47:39 -0700</date>
            <delta_ts>2015-07-16 13:37:06 -0700</delta_ts>
            <desc>moar</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>88393</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODUyLDYgKzQ4NTYsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
ZXQ7IH0KKworICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGNoZWNrcyBkb24ndCBh
Y3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBleGFjdGx5IHRoaXMKKyAgICAv
LyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVjdHVyZSwgc28gbG9uZyBhcyB0
aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBvbmUgYWJvdXQgdGhl
IHByb3BlcnR5IGJlaW5nIGxvYWRlZC4KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7
IH0KKyAgICAKICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWx0ZXJuYXRlQmFzZTsgfQogICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tl
ZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgb3V0LnByaW50KEpTVmFsdWUobV9vYmplY3QpLCAiOiAiLCBtX2NvbmRp
dGlvbik7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVp
cmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCht
X29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
Ojppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKG1f
b2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246
OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9v
bCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAor
eworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dhdGNoYWJsZShzdHJ1Y3R1cmUpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgpIGNvbnN0Cit7CisgICAg
aWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dh
dGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vYmplY3Qp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlz
U3RpbGxMaXZlKCk7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRl
UmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZCkgY29uc3QKK3sKKyAg
ICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdHJhY2tlZC5jaGVjayht
X29iamVjdCk7CisgICAgbV9jb25kaXRpb24udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uX2gKKyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNl
czsKKworY2xhc3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb24geworcHVibGljOgorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlIHRva2VuKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAg
ICAgICwgbV9jb25kaXRpb24odG9rZW4pCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbihKU09iamVjdCogb2JqZWN0LCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlv
biYgY29uZGl0aW9uKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2Nv
bmRpdGlvbihjb25kaXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5j
ZSh1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAg
ICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAg
ICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKHZtLCBv
d25lciwgdWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAor
ICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICB2bS5o
ZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAg
ICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNl
dHRlcih2bSwgb3duZXIsIHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25k
aXRpb247IH07CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2JqZWN0OyB9CisgICAgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9jb25kaXRpb247IH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9v
bCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9m
ZnNldCgpOyB9CisgICAgdW5zaWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNv
bmRpdGlvbigpLmhhc0F0dHJpYnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBj
b25zdCB7IHJldHVybiBjb25kaXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1By
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9Cisg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3Rv
dHlwZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQ
dHJIYXNoPEpTT2JqZWN0Kj46Omhhc2gobV9vYmplY3QpICsgbV9jb25kaXRpb24uaGFzaCgpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90
aGVyLm1fb2JqZWN0CisgICAgICAgICAgICAmJiBtX2NvbmRpdGlvbiA9PSBvdGhlci5tX2NvbmRp
dGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fY29uZGl0aW9uLmlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNlIHZhbGlkaXR5
LWNoZWNraW5nIG1ldGhvZHMgY2FuIG9wdGlvbmFsbHkgdGFrZSBhIFN0cnV0dXJlKiBpbnN0ZWFk
IG9mIGxvYWRpbmcgdGhlCisgICAgLy8gU3RydWN0dXJlKiBmcm9tIHRoZSBvYmplY3QuIElmIHlv
dSdyZSBpbiB0aGUgY29uY3VycmVudCBKSVQsIHRoZW4geW91IG11c3QgdXNlIHRoZSBmb3Jtcwor
ICAgIC8vIHRoYXQgdGFrZSBhbiBleHBsaWNpdCBTdHJ1Y3R1cmUqIGJlY2F1c2UgeW91IHdhbnQg
dGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZvciB0aGUgc2FtZQorICAgIC8vIHN0cnVjdHVyZSB0
aGF0IHlvdSB2YWxpZGF0ZWQgKGkuZS4gYXZvaWQgYSBUT0NUT1UgcmFjZSkuCisgICAgCisgICAg
Ly8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3Bl
cnR5IHdvbid0IGJlIGludGVyY2VwdGVkLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBpc1N0
aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3Jk
aW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAKKyAg
ICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCBkZWZpbml0ZWx5IGhhcywgb3IgZGVmaW5pdGVseSBk
b2VzIG5vdCBoYXZlLCB0aGUgcHJvcGVydHkgcmlnaHQgbm93LgorICAgIC8vIElmIHRydWUsIHRo
ZW4gd2UgY291bGQgY29udGludWUgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBieSBjaGVja2luZyBp
ZiB0aGUgb2JqZWN0IGhhcyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIE1heSBjb25zZXJ2YXRpdmVs
eSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndAor
ICAgIC8vIGd1YXJhbnRlZSB0aGUgY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2Vu
Y2UgY29uZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlCisgICAgLy8gaW1wdXJlIHBy
b3BlcnRpZXMuCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKikgY29uc3Q7CisgICAg
Ym9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
aXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5n
IGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZSBhbmQgcG9z
c2libHkgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQuCisgICAgYm9vbCBpc1dhdGNoYWJs
ZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAg
IGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0
OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxk
IGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBv
aW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZShTdHJ1Y3R1cmUqKSBj
b25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUuCisg
ICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZl
cmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
SlNPYmplY3QqIG1fb2JqZWN0OworICAgIFByb3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9uOwor
fTsKKworc3RydWN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4g
a2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGIp
CisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKworI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0
aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3QoSlNPYmplY3QqIG9iamVj
dCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLm9iamVjdCgpID09IG9iamVj
dCkKKyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjphcmVTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3Rp
bGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxWYWxp
ZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLnZhbGlkaXR5UmVx
dXJpZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmFyZVN0aWxsVmFsaWQoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29u
ZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCituYW1lc3BhY2UgeworCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBnZW5lcmF0ZUNvbmRpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2Jq
ZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uIGNv
bmRpdGlvbikKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJl
KCk7CisgICAgCisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIFByb3BlcnR5Q29u
ZGl0aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQs
IGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCisgICAg
ICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSh2bSwgb3duZXIsIG9iamVjdCwgdWlk
LCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlOiB7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJz
ZW5jZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0
dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRp
dGlvbjo6QWJzZW5jZU9mU2V0dGVyOiB7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKAorICAgICAgICAgICAgdm0sIG93bmVyLCBvYmplY3Qs
IHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkpOworICAgIH0gfQor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdl
bmVyYXRlQ29uZGl0aW9ucygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKQoreworICAg
IEFTU0VSVCghIXByb3RvdHlwZSA9PSAoY29uZGl0aW9uID09IFByb3BlcnR5Q29uZGl0aW9uOjpQ
cmVzZW5jZSkpOworICAgIAorICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gY29u
ZGl0aW9uczsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlz
UHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
aW52YWxpZCgpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgaWYgKHYuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvdG90eXBlKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPih2KTsKKyAgICAgICAgc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pOworICAgICAgICAKKyAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90
eXBlIHJlcGVhdGVkbHksIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0IHNob3VsZCBub3QgYmUKKyAg
ICAgICAgLy8gdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFy
eVN0cnVjdHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIG5ld0NvbmRpdGlvbiA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2
bSwgb3duZXIsIG9iamVjdCwgdWlkLCBjb25kaXRpb24pOworICAgICAgICBpZiAoIW5ld0NvbmRp
dGlvbiB8fCAhbmV3Q29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6OmludmFsaWQoKTsKKyAgICAgICAgCisgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKG5ld0Nv
bmRpdGlvbik7CisgICAgICAgIAorICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlvbnMpCit9CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sK
KyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMs
IGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2Up
OworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
K3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4
ZWMsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2Vu
Y2VPZlNldHRlcik7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclBvdG90eXBlUHJvcGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHBy
b3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5l
cmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhlYywgaGVhZFN0cnVjdHVyZSwg
cHJvdG90eXBlLCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2xkdWUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHNl
dCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0aW9uYWwgY29uZGl0aW9ucwor
Ly8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFjY2VzcyB0byBiZSB2YWxpZC4g
VGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmVzdGluZyBzdGF0ZXM6Cisv
LworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRpdGlvbnMgdGhhdCBuZWVkIHRv
IGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBpcyBuZXZlciB2YWxpZC4KKy8v
IE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25zIHRoYXQg
bmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgewor
cHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkgeyB9CisgICAgCisgICAg
c3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFsaWQoKQorICAgIHsKKyAgICAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9k
YXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBub25FbXB0eShj
b25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2ZWN0b3IpCisgICAgeworICAg
ICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERh
dGEoKSk7CisgICAgICAgICpyZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRhLT5pc0VtcHR5KCk7CisgICAg
fQorICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24qIGl0ZXJh
dG9yOworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBt
X2RhdGEtPmJlZ2luKCk7CisgICAgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gbV9kYXRhLT5lbmQoKTsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gZm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0CisgICAgCisgICAgYm9v
bCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbFZhbGlkQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIG5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxsTGl2ZSgpIGNvbnN0Owor
ICAgIAorICAgIC8vIEhlbHBlcnMgZm9yIHVzaW5nIHRoaXMgaW4gYSB1bmlvbi4KKyAgICB2b2lk
KiByZWxlYXNlUmF3UG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkpOworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgYWRvcHRSYXdQb2ludGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgewor
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcikpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgZnJvbVJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0
YSA9IHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIEludGVybmFsbHksIHRoaXMgcmVwcmVz
ZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9pbnRlciB0byBhIERhdGEgdGhhdCBoYXMgYW4gZW1wdHkg
dmVjdG9yLgorICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21w
YWN0IGJ5IGhhdmluZyBpdCBpbnRlcm5hbGx5IHVzZSBhIHZlY3RvciB0aGF0IGp1c3QgaGFzCisg
ICAgLy8gdGhlIG5vbi11aWQgcG9ydGlvbiBvZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgYW5k
IHRoZW4gcmVxdWlyaW5nIHRoYXQgdGhlIGNhbGxlcnMgb2YgYWxsCisgICAgLy8gb2YgdGhlIEFQ
SXMgc3VwcGx5IHRoZSB1aWQuCisgICAgCisgICAgY2xhc3MgRGF0YSA6IFJlZkNvdW50ZWQ8RGF0
YT4geworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhKTsKKyAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgRGF0YSgp
IHsgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB2
ZWN0b3I7CisgICAgfTsKKyAgICAKKyAgICBSZWZQdHI8RGF0YT4gbV9kYXRhOworfTsKKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNz
KAorICAgIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFk
U3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
CShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgdW5zaWduZWQgY2hhaW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKICAgICA6
IG1fdHlwZSh0eXBlKQogICAgICwgbV9jaGFpbkNvdW50KGNoYWluQ291bnQpCiAgICAgLCBtX3N0
cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRp
dGlvblNldCkKICAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0gICAgaWYgKGNo
YWluKQotICAgICAgICBtX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKIH0KIAogR2V0QnlJ
ZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQpAQCAtNzEsNyArNzAsNyBAQCBib29sIEdldEJ5SWRB
Y2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFI
ZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5pc1N0aWxsTGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsocmVwYXRjaEJ1ZmZlcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMTg2Nzk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgR2V0QnlJ
ZEFjY2VzcygKICAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4q
ID0gMCwgdW5zaWduZWQgY2hhaW5Db3VudCA9IDApOworICAgICAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKICAgICAK
ICAgICB+R2V0QnlJZEFjY2VzcygpOwogICAgIApAQCAtNzIsOCArNzIsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVy
ZS5nZXQoKTsgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0
dXJuIG1fY2hhaW4uZ2V0KCk7IH0KLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGFpbkNvdW50OyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAg
CiAgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkBAIC05Myw2
ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7CiAgICAgdW5zaWduZWQg
bV9jaGFpbkNvdW50OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwor
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9uU2V0OyAvLyBGSVhNRSB3aGF0
IGFib3V0IGJhcnJpZXJzPwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFp
bjsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MSw3ICs1MSw4IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJv
bVN0cnVjdHUKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJl
c3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnByZXZpb3VzU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlG
cm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVz
dWx0Lm1fY2hhaW4uY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjphZG9wdFJhd1BvaW50ZXIoCisgICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0g
c3R1YkluZm8uc3R1YlJvdXRpbmU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTY0LDYg
KzY1LDkgQEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogCiBib29s
IFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBj
b25zdAogeworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgUmVw
bGFjZToKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkp
CkBAIC03NCwxNSArNzgsMTEgQEAgYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRj
aEJ1ZgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkKG1fbmV3U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgY2FzZSBD
dXN0b21TZXR0ZXI6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUu
Z2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9jaGFpbiAm
JiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4Njc5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAg
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LAogICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAg
ICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBl
ID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIG9sZFN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93
bmVyLCBjaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1
LDggKzk1LDcgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisg
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAg
ICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAg
ICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0
LDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAg
ICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAg
ICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewot
ICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAg
ICAgICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQu
bV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0
aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAg
IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0g
ICAgICAgIHJldHVybiBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBj
aGFpbkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlz
Q3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRp
bmUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0
aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVy
ZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAg
IG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgb3V0LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBtX29mZnNl
dCwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0
LnByaW50KCIgd2l0aCBwcm90b3R5cGUgIiwgSlNPYmplY3QocHJvdG90eXBlKCkpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Citib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBp
ZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFzdHJ1Y3R1
cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZTogeworICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZz
ZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgQWJzZW5jZTogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkKCkpICE9IGludmFsaWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSAhPSBwcm90
b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOiB7CisgICAgICAgIHVuc2lnbmVkIGN1
cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKCkpICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50QXR0cmli
dXRlcyAmIChBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZSgpICE9IHByb3RvdHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICByZXR1
cm4gc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlm
ICghaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3VycmVudGx5IHdlIGFzc3VtZSB0
aGF0IGFuIGltcHVyZSBwcm9wZXJ0eSBjYW4gY2F1c2UgYSBwcm9wZXJ0eSB0byBhcHBlYXIsIGFu
ZCBjYW4gYWxzbworICAgIC8vICJzaGFkb3ciIGFuIGV4aXN0aW5nIEpTIHByb3BlcnR5IG9uIHRo
ZSBzYW1lIG9iamVjdC4gSGVuY2UgaXQgYWZmZWN0cyBib3RoIHByZXNlbmNlIGFuZAorICAgIC8v
IGFic2VuY2UuIEl0IGRvZXNuJ3QgYWZmZWN0IEFic2VuY2VPZlNldHRlciBiZWNhdXNlIGltcHVy
ZSBwcm9wZXJ0aWVzIGFyZW4ndCBldmVyIHNldHRlcnMuCisgICAgc3dpdGNoIChtX2tpbmQpIHsK
KyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToKKyAgICAgICAgaWYgKHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb3BlcnR5
Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0
cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJlKTsKK30K
KworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAoreworICAgIGlm
IChoYXNQcm90b3R5cGUoKSAmJiAhSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvcGVy
dHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYg
dHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkpCisgICAgICAgIHRyYWNr
ZWQuY2hlY2socHJvdG90eXBlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlv
bikgeworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAg
IG91dC5wcmludCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2Vu
Y2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVy
dHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgUHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBQcm9wZXJ0eUNvbmRpdGlvbl9o
CisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgUHJvcGVy
dHlDb25kaXRpb24geworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIFByZXNlbmNl
LAorICAgICAgICBBYnNlbmNlLAorICAgICAgICBBYnNlbmNlT2ZTZXR0ZXIKKyAgICB9OworICAg
IAorICAgIFByb3BlcnR5Q29uZGl0aW9uKCkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAg
ICAgICAsIG1fa2luZChQcmVzZW5jZSkKKyAgICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6
ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFi
bGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwg
bV9raW5kKEFic2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAg
IHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91
aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQcmVzZW5jZTsKKyAgICAgICAgcmVz
dWx0LnUucHJlc2VuY2Uub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXN1bHQudS5wcmVzZW5j
ZS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2UoCisgICAgICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAg
ICAgICAgCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAg
cmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNl
T2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5k
ID0gQWJzZW5jZU9mU2V0dGVyOworICAgICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9
IHByb3RvdHlwZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNl
OyB9OworICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAor
ICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0g
UHJlc2VuY2UgfTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGhhc09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zm
c2V0OworICAgIH0KKyAgICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiAhISp0
aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZSB9OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0F0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJl
dHVybiB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUHJv
dG90eXBlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiAobV9raW5kID09IEFic2VuY2UgfHwg
bV9raW5kID09IEFic2VuY2VPZlNldHRlcik7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNQcm90b3R5cGUoKTsKKyAgICAgICAgcmV0
dXJuIHUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBs
Kj46Omhhc2gobV91aWQpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICBy
ZXN1bHQgKz0gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVz
ZW5jZS5hdHRyaWJ1dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5j
ZToKKyAgICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0g
V1RGOjpQdHJIYXNoPEpTT2JqZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICAgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNl
dCA9PSBvdGhlci51LnByZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2Vu
Y2UuYXR0cmlidXRlcyA9PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNh
c2UgQWJzZW5jZToKKyAgICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICBy
ZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBB
YnNlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVj
dHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAg
Ym9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1
cmUqKSBjb25zdDsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCBhbiBpbXB1
cmUgcHJvcGVydHkgd2F0Y2hwb2ludCB0byBlbnN1cmUgdmFsaWRpdHkgZXZlbiBpZgorICAgIC8v
IGlzU3RpbGxWYWxpZEFjY29yZGluZ1RvU3RydWN0dXJlKCkgcmV0dXJuZWQgdHJ1ZS4KKyAgICBi
b29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikg
Y29uc3Q7CisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QgZGVmaW5pdGVseSBoYXMs
IG9yIGRlZmluaXRlbHkgZG9lcyBub3QgaGF2ZSwgdGhlIHByb3BlcnR5IHJpZ2h0IG5vdy4KKyAg
ICAvLyBJZiB0cnVlLCB0aGVuIHdlIGNvdWxkIGNvbnRpbnVlIHRvIHZlcmlmeSB0aGUgdmFsaWRp
dHkgYnkgY2hlY2tpbmcgaWYgdGhlIG9iamVjdCBoYXMgdGhlCisgICAgLy8gc3RydWN0dXJlLiBN
YXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZCBzdHJ1Y3R1
cmUgYWxvbmUgZG9uJ3QKKyAgICAvLyBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gVGhpcyBoYXBw
ZW5zIGZvciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3QgdGhhdCBtYXkgaGF2ZQor
ICAgIC8vIGltcHVyZSBwcm9wZXJ0aWVzLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVy
ZSopIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlk
IGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisg
ICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUg
cHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkg
Ynkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICAKKyAgICAv
LyBUaGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdHMgaW52b2x2ZWQgaW4gdGhpcyBhcmUgc3RpbGwg
bGl2ZS4KKyAgICBib29sIGlzU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB2YWxp
ZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7CisgICAgS2luZCBtX2tpbmQ7CisgICAg
dW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0OworICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgfSBwcmVzZW5j
ZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBtX3Byb3RvdHlwZTsK
KyAgICAgICAgfSBhYnNlbmNlOworICAgIH0gdTsKK307CisKK3N0cnVjdCBQcm9wZXJ0eUNvbmRp
dGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5Q29uZGl0
aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgK
KyAgICAgICAgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IFByb3BlcnR5Q29uZGl0
aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mLCBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpLaW5kKTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVm
YXVsdEhhc2g8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlByb3BlcnR5
Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OlByb3BlcnR5Q29uZGl0aW9u
PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gUHJvcGVydHlDb25kaXRp
b25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKICAgICBib29s
IG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKKyAgICAvLyBJdCdzIHVuZGVyc3Rvb2QgdGhhdCB0
aGVzZSBjaGVja3MgZG9uJ3QgYWN0dWFsbHkgcmVxdWlyZSB0aGF0IHRoZSBvYmplY3Qga2VlcHMg
ZXhhY3RseSB0aGlzCisgICAgLy8gc3RydWN0dXJlLiBJdCBjYW4gaGF2ZSB3aGF0ZXZlciBzdHJ1
Y3R1cmUsIHNvIGxvbmcgYXMgdGhhdCBzdHJ1Y3R1cmUgYWdyZWVzIHdpdGggdGhlIGdpdmVuCisg
ICAgLy8gb25lIGFib3V0IHRoZSBwcm9wZXJ0eSBiZWluZyBzdG9yZWQuCiAgICAgY29uc3QgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dF9oCiAjZGVmaW5lIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnRfaAogCisjaW5jbHVk
ZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAK
ICNpZiBFTkFCTEUoSklUKQpAQCAtNDYsMTUgKzQ3LDExIEBAIGNsYXNzIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQgOiAKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KAotICAgICAgICBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlcikKLSAgICAgICAgOiBtX2hvbGRlcihob2xk
ZXIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAogICAgICAg
ICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlciwKICAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG5leHQpCi0gICAgICAg
IDogbV9ob2xkZXIoaG9sZGVyKQorICAgICAgICA6IG1fa2V5KGtleSkKKyAgICAgICAgLCBtX2hv
bGRlcihob2xkZXIpCiAgICAgICAgICwgbV9uZXh0KFdURjo6bW92ZShuZXh0KSkKICAgICB7CiAg
ICAgfQpAQCAtNjksNiArNjYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGZpcmVJ
bnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CiAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvJiBtX2hvbGRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludD4gbV9uZXh0OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg2Nzk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgsMTIgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxm
OgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdD
b25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNl
dCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
c2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKICAgICBjYXNlIGFjY2Vz
c191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhhdmUgdG8gcmVs
ZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgsMTAgQEAgYm9vbCBTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90
cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9k
aXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5w
cmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1
LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFw
Ojppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAg
IHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHUucHV0QnlJZFRy
YW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Jl
cGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3
ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8gUHV0QnlJZCoK
IAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
U3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQdXRCeUlkVHJh
bnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNEaXJlY3QpCiAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVj
dDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAg
ICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwg
cHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9u
LmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlv
bi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKICAg
ICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc1LDExIEBAIHN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgIH0KICAg
ICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2lu
dChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIHJldHVy
biBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdh
dGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0aGlzKTsKKyAg
ICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRpdGlvbik7CiAgICAg
fQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIGlm
ICghbV9rZXkuaXNXYXRjaGFibGUoKSkgeworICAgICAgICBpZiAoREZHOjpzaG91bGRTaG93RGlz
YXNzZW1ibHkoKSkgeworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAiRmly
aW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIs
ICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmlu
Z1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgb3V0LnByaW50KCJBZGFwdGF0aW9uIG9mICIsIG1f
a2V5LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZ0ZpcmVE
ZXRhaWwgZGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgICAgICAKKyAgICAgICAg
bV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVl
VG9VbnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVy
ZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCh0aGlzKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
Ik9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fa2V5KGtl
eSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgeworICAgIH0KKyAgICAK
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4g
bV9rZXk7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29u
c3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAx
ODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBo
YW5kbGVQdXRCeUlkKAogICAgICAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsCiAgICAgICAgIGJvb2wgaXNE
aXJlY3QpOwotICAgIHZvaWQgZW1pdENoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJik7CisgICAgdm9pZCBlbWl0UHJvcGVydHlDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVja1ZlY3RvciYsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAKICAgICB2b2lkIHByZXBh
cmVUb1BhcnNlQmxvY2soKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CkBAIC03MDcsMTEgKzcw
NywyMCBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGUqIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1
cmVDaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcm91dGUgdG8gZW1pdFByb3BlcnR5Q2hlY2ssIG5v
dCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gQnV0IGN1cnJlbnRseSwKKyAgICAgICAgLy8gdGhpcyBn
ZXRzIG5vIHByb2ZpdCBmcm9tIHVzaW5nIGVtaXRQcm9wZXJ0eUNoZWNrKCkgc2luY2Ugd2UnbGwg
bm9uLWFkYXB0aXZlbHkgd2F0Y2ggdGhlCisgICAgICAgIC8vIG9iamVjdCdzIHN0cnVjdHVyZSBh
cyBzb29uIGFzIHdlIG1ha2UgaXQgYSB3ZWFrSlNDb3NudGFudC4KICAgICAgICAgTm9kZSogb2Jq
ZWN0Tm9kZSA9IHdlYWtKU0NvbnN0YW50KG9iamVjdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwg
b2JqZWN0Tm9kZSk7CiAgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwogICAgIH0KICAgICAKKyAg
ICB2b2lkIGVtaXRQcm9wZXJ0eUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAgICAgIGlmICghbV9ncmFw
aC53YXRjaFByZXNlcnZhdGlvbk9mUHJvcGVydHkob2JqZWN0LCB1aWQsIHN0cnVjdHVyZSkpCisg
ICAgICAgICAgICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sob2JqZWN0LCBzdHJ1Y3R1
cmUpOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uV2l0aG91
dE9TUkV4aXQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKQEAgLTIyOTAsMTAgKzIyOTksMTAgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9y
KQordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFByb3BlcnR5Q2hlY2tzKGNvbnN0IENvbnN0YW50
U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAg
ICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sodmVjdG9yW2ldLmNvbnN0YW50KCksIHZl
Y3RvcltpXS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrKHZlY3Rvcltp
XS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCksIHVpZCk7CiB9CiAKIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCkBAIC0yMzIyLDggKzIzMzEsMTEgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5
cGUgc3RydWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1h
eWJlIG5vdCBiZQogICAgICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVs
eSBleGVjdXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAg
IC8vICAgIG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUu
Ci0gICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5
SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCB2YXJpYW50SW5kZXggPSBnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlh
bnRJbmRleC0tOykgeworICAgICAgICAgICAgZW1pdFByb3BlcnR5Q2hlY2tzKAorICAgICAgICAg
ICAgICAgIGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpLAorICAg
ICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7Cisg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIDIpIEVtaXQgYSBNdWx0aUdldEJ5T2Zmc2V0
CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpR2V0
QnlPZmZzZXREYXRhLmFkZCgpOwpAQCAtMjM0NCw3ICsyMzU2LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAgICBhZGRUb0dyYXBoKENo
ZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1
Y3R1cmVTZXQoKSkpLCBiYXNlKTsKICAgICAKLSAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3Rh
bnRDaGVja3MoKSk7CisgICAgZW1pdFByb3BlcnR5Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVj
a3MoKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKIAogICAgIGlm
ICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKICAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50
KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKQEAgLTI0MzgsNyArMjQ1MCw5IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZh
cmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07
KSB7CiAgICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5k
KCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGVtaXRDaGVja3MocHV0QnlJZFN0YXR1c1t2YXJpYW50
SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICAgICAgICAgIGVtaXRQcm9wZXJ0eUNo
ZWNrcygKKyAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNv
bnN0YW50Q2hlY2tzKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtpZGVudGlmaWVyTnVtYmVyXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC0yNDYzLDcgKzI0NzcsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgIAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAg
YWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgIGVtaXRDaGVja3ModmFy
aWFudC5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZW1pdFByb3BlcnR5Q2hlY2tzKAorICAg
ICAgICAgICAgdmFyaWFudC5jb25zdGFudENoZWNrcygpLAorICAgICAgICAgICAgbV9ncmFwaC5p
ZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKIAogICAgICAgICBBU1NFUlQodmFyaWFu
dC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFz
QmVlbkludmFsaWRhdGVkKCkpOwogICAgIApAQCAtMjUxOSw3ICsyNTM1LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAg
ICAgIENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFu
dC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgCi0gICAgICAgIGVtaXRDaGVja3ModmFy
aWFudC5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZW1pdFByb3BlcnR5Q2hlY2tzKHZhcmlh
bnQuY29uc3RhbnRDaGVja3MoKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1i
ZXJdKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKICAg
ICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJl
dmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDkgQEAgdm9pZCBDb21tb25EYXRhOjp2
YWxpZGF0ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2Vz
LmNoZWNrKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7CiAgICAg
ICAgIH0KICAgICB9CisgICAgCisgICAgZm9yIChBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQq
IHdhdGNocG9pbnQgOiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzKQorICAgICAgICB3YXRj
aHBvaW50LT5rZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5n
V2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
IgogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxG
cmFtZVNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTgsNiArOTksNyBAQCBwdWJsaWM6
CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOwog
ICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOworICAg
IEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludHM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsKICAg
ICAKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5jcHAJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEFycmF5QnVmZmVyVmlld1dh
dGNocG9pbnRBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlC
dWZmZXJWaWV3KiB2aWV3LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQog
eworICAgIFdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNv
ZGVCbG9jayk7CiAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50KiBuZXV0ZXJpbmdX
YXRjaHBvaW50ID0KICAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50OjpjcmVh
dGUoKmNvZGVCbG9jay0+dm0oKSk7CiAgICAgbmV1dGVyaW5nV2F0Y2hwb2ludC0+c2V0KCktPmFk
ZCh3YXRjaHBvaW50KTsKQEAgLTQ1LDEwICs0NiwxNyBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dh
dGNocG9pbnRBZGFwdG9yOjphCiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwg
V2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJy
ZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgQ29tbW9uRGF0YSYgY29tbW9uKQogewogICAgIGNvZGVC
bG9jay0+YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0
IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2Vz
IHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBpbmZlcnJlZFZhbHVlLT5hZGQo
d2F0Y2hwb2ludCk7CisgICAgaW5mZXJyZWRWYWx1ZS0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5h
ZGQoY29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRh
cHRvcjo6YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAga2V5Lm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCisgICAgICAgIGNvbW1vbi5h
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jaykpOwogfQogCiBE
ZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiArODIs
MTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVm
ZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6
YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgbV9h
ZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdh
dGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0
cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTg4LDYgKzEwMSw3IEBAIHZvaWQgRGVzaXJl
ZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2lubGluZVNldHMucmVhbGx5QWRk
KGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQo
Y29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2Rl
QmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFk
ZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6
YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC05NSw3ICsxMDksOCBAQCBib29sIERlc2lyZWRXYXRj
aHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgcmV0dXJuIG1fc2V0cy5hcmVTdGlsbFZhbGlk
KCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBt
X2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2J1ZmZlclZpZXdz
LmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlk
KCkKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4Njc5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2lu
Y2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRW
YWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCkBAIC00MSwxNSArNDIsMTUg
QEAgY2xhc3MgR3JhcGg7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2VuZXJpY1Nl
dEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBUIHNldCwgV2F0Y2hw
b2ludCogd2F0Y2hwb2ludCkKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFQgc2V0LCBDb21tb25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0
LT5hZGQod2F0Y2hwb2ludCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hw
b2ludHMuYWRkKGNvZGVCbG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52
YWxpZGF0ZWQoVCBzZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KIH07
CiAKIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENv
ZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGljIHZvaWQg
YWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGlj
IGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUpCiAg
ICAgewogICAgICAgICByZXR1cm4gaW5mZXJyZWRWYWx1ZS0+aGFzQmVlbkludmFsaWRhdGVkKCk7
CkBAIC01NywxMiArNTgsMTggQEAgc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKIH07CiAK
IHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvciB7Ci0gICAgc3RhdGljIHZv
aWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgV2F0Y2hwb2ludCopOworICAg
IHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIENvbW1vbkRh
dGEmKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZp
ZXcqIHZpZXcpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9ICF2aWV3LT5sZW5ndGgoKTsK
LSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIHJldHVybiAhdmlldy0+bGVuZ3RoKCk7CisgICAgfQorfTsKKworc3RydWN0IEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2Rl
QmxvY2sqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvbW1vbkRhdGEmKTsKKyAg
ICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAha2V5LmlzU3RpbGxWYWxpZCgpOwog
ICAgIH0KIH07CiAKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8mIHNldCA6
IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9u
LndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFkZChj
b2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQg
PSB0cnVlOwogICAgIH0KQEAgLTEyMiw2ICsxMjksMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRk
TGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAgICB2b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVy
VmlldyopOwogICAgIAorICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2Fs
bCB0aGlzIGRpcmVjdGx5LiBVc2UKKyAgICAvLyBHcmFwaDo6YWRkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LCB3aGljaCBkb2VzIHRoZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsLgorICAg
IHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAg
ICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChD
b2RlQmxvY2sqLCBDb21tb25EYXRhJik7CkBAIC0xNDQsMTIgKzE1NSwxNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAg
fQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkp
CisgICAgeworICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVk
KGtleSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9p
bnRzPFdhdGNocG9pbnRTZXQqPiBtX3NldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50
czxJbmxpbmVXYXRjaHBvaW50U2V0Kj4gbV9pbmxpbmVTZXRzOwogICAgIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVy
cmVkVmFsdWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZp
ZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKKyAg
ICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ4LDYgKzg0OCw0OSBA
QCB2b2lkIEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCiti
b29sIEdyYXBoOjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1dhdGNoYWJsZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExh
emlseShrZXkub2JqZWN0KCkpOworICAgIGlmIChrZXkuY29uZGl0aW9uKCkgPT0gUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2UpCisgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXpp
bHkoa2V5LnByb3RvdHlwZSgpKTsKKyAgICBtX3BsYW4ud2F0Y2hwb2ludHMuYWRkTGF6aWx5KGtl
eSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGg6OndhdGNoUHJlc2VuY2VPZlBy
b3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKK3sKKyAgICByZXR1cm4g
YWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6cHJlc2VuY2Uob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcykpOworfQor
Citib29sIEdyYXBoOjp3YXRjaEFic2VuY2VPZlByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IGFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmFic2VuY2Uob2JqZWN0LCB1aWQsIHByb3RvdHlwZSkpOworfQorCitib29sIEdy
YXBoOjp3YXRjaFByZXNlcnZhdGlvbk9mUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU09iamVj
dCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIGlmICghb2Jq
ZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgCisgICAgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAKKyAgICBpZiAob2Zm
c2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgICAgIHJldHVybiB3YXRjaEFic2VuY2VPZlByb3Bl
cnR5KG9iamVjdCwgdWlkLCBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICAKKyAg
ICByZXR1cm4gd2F0Y2hQcmVzZW5jZU9mUHJvcGVydHkob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0
cmlidXRlcyk7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVu
aXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNv
ZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3NSw2ICs2NzUsMjQgQEAgcHVibGljOgog
ICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRl
bnRpZmllcnM7IH0KICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1
cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0
aGUga2V5IGlzIGFscmVhZHkgaW52YWxpZC4KKyAgICBib29sIGFkZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAorICAgIC8v
IEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRoaXMgY29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVj
dCBoYXZpbmcgdGhlIGdpdmVuIHByb3BlcnR5IHdpdGgKKyAgICAvLyB0aGUgZ2l2ZW4gb2Zmc2V0
IGFuZCBhdHRyaWJ1dGVzLiBSZXR1cm5zIGZhbHNlIGlmIHdhdGNoaW5nIGZvciB0aGlzIGlzIGlt
cG9zc2libGUuCisgICAgYm9vbCB3YXRjaFByZXNlbmNlT2ZQcm9wZXJ0eSgKKyAgICAgICAgSlNP
YmplY3QqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2YgdGhpcyBjb21w
aWxhdGlvbiBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGxhY2tpbmcgdGhlIGdpdmVuIHByb3BlcnR5Lgor
ICAgIC8vIFJldHVybnMgZmFsc2UgaWYgd2F0Y2hpbmcgZm9yIHRoaXMgaXMgaW1wb3NzaWJsZS4K
KyAgICBib29sIHdhdGNoQWJzZW5jZU9mUHJvcGVydHkoCisgICAgICAgIEpTT2JqZWN0KiwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2Yg
dGhpcyBjb21waWxhdGlvbiBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGVpdGhlciBoYXZpbmcsIG9yIGxh
Y2tpbmcsIHRoZQorICAgIC8vIHByb3BlcnR5IGluIHRoZSBzYW1lIHdheSBhcyB0aGUgZ2l2ZW4g
c3RydWN0dXJlIGNsYWltcyB0byBoYXZlIChvciBsYWNrKSB0aGUgcHJvcGVydHkuCisgICAgYm9v
bCB3YXRjaFByZXNlcnZhdGlvbk9mUHJvcGVydHkoCisgICAgICAgIEpTQ2VsbCosIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKwogICAgIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsx
MDUsNyBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAgICAgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0
aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLAogICAgIGJvb2wgY29tcGFjdCkKIHsKLSAgICBpZiAo
c3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygp
KQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAg
ICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0NyArMTMyLDMwIEBAIHN0
YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgogfQogCi1zdGF0aWMgdm9p
ZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBvYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAotICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3N0YXRpYyB2b2lkIGNoZWNr
T2JqZWN0UHJvcGVydHlDb25kaXRpb24oCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAob2JqZWN0LT5z
dHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBj
b2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0
Ci0gICAgICAgICAgICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgotICAgICAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAg
ICAgICAgICAgICAgICBqaXQsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKTsK
LSAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hw
b2ludCk7Ci0gICAgICAgICAgICBvay5saW5rKCZqaXQpOwotICAgICAgICB9CisgICAgaWYgKGNv
bmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsK
KyAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAg
ICAgICBicmFuY2hTdHJ1Y3R1cmUoaml0LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSkpOwor
ICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICBqaXQsIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkpOwogfQogCi1zdGF0
aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNWYWx1ZSBwcm90b3R5
cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0g
ICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsK
LSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlw
ZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBz
dHViSW5mbywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworc3RhdGlj
IHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIHNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBzZXQpIHsKKyAgICAg
ICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICAgICAgICAgIGNvbmRpdGlvbiwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAg
IH0KIH0KIAogc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFJlcGF0Y2hCdWZmZXImIHJlcGF0
Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHRhcmdldCkKQEAgLTI5NiwxMSArMjc5LDEyIEBAIHN0YXRpYyBGdW5jdGlvblB0
ciBjdXN0b21Gb3IoY29uc3QgUHV0UHIKIAogc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigK
ICAgICBFeGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LAorICAgIEZ1
bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwg
V2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwKICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNj
ZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4mIHN0dWJSb3V0aW5lKQogewotCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5hcmVT
dGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CisgICAgCiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IEpTVmFsdWVSZWdzKApAQCAtMzQ2LDI4ICszMzAsMTQgQEAgc3RhdGljIGJvb2wgZ2VuZXJh
dGVCeUlkU3R1YigKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOwotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVy
dHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIHx8IGNvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpCiAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKICAgICBp
ZiAod2F0Y2hwb2ludFNldCkKICAgICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7IAotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgaWYgKGNo
YWluKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFk
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7
Ci0gICAgICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0
dXJlID0gcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgaWYgKHByb3RvU3Ry
dWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQot
ICAgICAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAg
ICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG9P
YmplY3QsIHByb3RvU3RydWN0dXJlLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LAotICAg
ICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjdXJy
U3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCghcHJvdG9P
YmplY3QgfHwgcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpID09IGN1cnJTdHJ1Y3R1cmUpOwotICAg
IH0KKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9u
U2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7
CiAgICAgCiAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFs
aWRHUFJSZWc7CkBAIC02MjcsOSArNTk3LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFj
dGlvbkZvckNlbGwoVgogICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlP
YmplY3Qodm0pOwogICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KLSAgICBB
U1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAg
aWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5u
ZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+
cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKIAogICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsKQEAgLTgyNywyMSArNzk2LDIyIEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICB9CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBz
bG90LmNhY2hlZE9mZnNldCgpOwotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgCiAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNs
b3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hp
Yml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkpCi0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0
cnVjdHVyZSk7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eU1pc3MoZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5B
Y2Nlc3MoCi0gICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCks
IGlkZW50LCBvZmZzZXQpOwotICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNo
YWluKQorICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
dG90eXBlUHJvcGVydHlIaXQoZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50
LmltcGwoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hh
aW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAg
b2Zmc2V0ID0gY29uZGl0aW9uU2V0LmZvck9iamVjdChzbG90LnNsb3RCYXNlKCkpLm9mZnNldCgp
OwogICAgIH0KICAgICAKICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShzdHViSW5mbyk7CkBAIC04NTIsNyArODIyLDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIAogICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5
SWRTdHViKAotICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNs
b3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIAorICAgICAgICBl
eGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29u
ZGl0aW9uU2V0LCBvZmZzZXQsIAogICAgICAgICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJv
eHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJ
bmZvKSksIHN0dWJSb3V0aW5lKTsKQEAgLTg3MSw3ICs4NDEsNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5
SWRBY2Nlc3MoCiAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNj
ZXNzVHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4s
IGNvdW50KSk7CisgICAgICAgIGNvbmRpdGlvblNldCkpOwogICAgIAogICAgIHBhdGNoSnVtcFRv
R2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlz
RGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rp
b25hcnlLaW5kOyB9CiAgICAgYm9vbCBpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIGNvbnN0IHsg
cmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgPT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZDsgfQogICAK
LSAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB7IHJldHVybiBkaWN0aW9u
YXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQgJiYgIXR5cGVJbmZvKCkucHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nKCk7IH0KKyAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNo
ZWREaWN0aW9uYXJ5S2luZAorICAgICAgICAgICAgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nKCkKKyAgICAgICAgICAgICYmICEodHlwZUluZm8uaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBv
aW50cygpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgp
CisgICAgICAgICAgICAmJiB0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHMoKTsKKyAgICB9CiAKICAgICAvLyBXZSB1c2UgU2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBm
b3Igc3RydWN0dXJlcyB0aGF0IG1heSBnZXQgbmV3IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRv
IHByZXZlbnQKICAgICAvLyBERkcgZnJvbSBpbmxpbmluZyBwcm9wZXJ0eSBhY2Nlc3NlcyBzaW5j
ZSBzdHJ1Y3R1cmVzIGRvbid0IHRyYW5zaXRpb24gd2hlbiBhIG5ldyBpbXB1cmUgcHJvcGVydHkg
YXBwZWFycy4KQEAgLTIwMiw3ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gdHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKTsKICAgICB9Ci0KKyAg
ICAKICAgICAvLyBUeXBlIGFjY2Vzc29ycy4KICAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0
IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9i
bG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3Qo
KSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTE5LDYgKzUxOSw3IEBAIHB1
YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb2RlKCk7CiAKICAg
ICB2b2lkIHJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZp
ZXImLCBXYXRjaHBvaW50Kik7CisgICAgCiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcg
b25jZSBpdCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256919</attachid>
            <date>2015-07-16 13:37:06 -0700</date>
            <delta_ts>2015-07-16 19:54:33 -0700</delta_ts>
            <desc>some more progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>107825</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODUyLDYgKzQ4NTYsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDEyIEBAIHB1YmxpYzoKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
ZXQ7IH0KKworICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGNoZWNrcyBkb24ndCBh
Y3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBleGFjdGx5IHRoaXMKKyAgICAv
LyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVjdHVyZSwgc28gbG9uZyBhcyB0
aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBvbmUgYWJvdXQgdGhl
IHByb3BlcnR5IGJlaW5nIGxvYWRlZC4KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7
IH0KKyAgICAKICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWx0ZXJuYXRlQmFzZTsgfQogICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tl
ZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgb3V0LnByaW50KEpTVmFsdWUobV9vYmplY3QpLCAiOiAiLCBtX2NvbmRp
dGlvbik7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVp
cmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCht
X29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
Ojppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKG1f
b2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246
OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9v
bCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAor
eworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dhdGNoYWJsZShzdHJ1Y3R1cmUpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgpIGNvbnN0Cit7CisgICAg
aWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dh
dGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vYmplY3Qp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlz
U3RpbGxMaXZlKCk7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRl
UmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZCkgY29uc3QKK3sKKyAg
ICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdHJhY2tlZC5jaGVjayht
X29iamVjdCk7CisgICAgbV9jb25kaXRpb24udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uX2gKKyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNl
czsKKworY2xhc3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb24geworcHVibGljOgorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlIHRva2VuKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAg
ICAgICwgbV9jb25kaXRpb24odG9rZW4pCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbihKU09iamVjdCogb2JqZWN0LCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlv
biYgY29uZGl0aW9uKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2Nv
bmRpdGlvbihjb25kaXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5j
ZSh1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAg
ICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAg
ICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKHZtLCBv
d25lciwgdWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAor
ICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICB2bS5o
ZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAg
ICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNl
dHRlcih2bSwgb3duZXIsIHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25k
aXRpb247IH07CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2JqZWN0OyB9CisgICAgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9jb25kaXRpb247IH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9v
bCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9m
ZnNldCgpOyB9CisgICAgdW5zaWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNv
bmRpdGlvbigpLmhhc0F0dHJpYnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBj
b25zdCB7IHJldHVybiBjb25kaXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1By
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9Cisg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3Rv
dHlwZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQ
dHJIYXNoPEpTT2JqZWN0Kj46Omhhc2gobV9vYmplY3QpICsgbV9jb25kaXRpb24uaGFzaCgpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90
aGVyLm1fb2JqZWN0CisgICAgICAgICAgICAmJiBtX2NvbmRpdGlvbiA9PSBvdGhlci5tX2NvbmRp
dGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fY29uZGl0aW9uLmlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNlIHZhbGlkaXR5
LWNoZWNraW5nIG1ldGhvZHMgY2FuIG9wdGlvbmFsbHkgdGFrZSBhIFN0cnV0dXJlKiBpbnN0ZWFk
IG9mIGxvYWRpbmcgdGhlCisgICAgLy8gU3RydWN0dXJlKiBmcm9tIHRoZSBvYmplY3QuIElmIHlv
dSdyZSBpbiB0aGUgY29uY3VycmVudCBKSVQsIHRoZW4geW91IG11c3QgdXNlIHRoZSBmb3Jtcwor
ICAgIC8vIHRoYXQgdGFrZSBhbiBleHBsaWNpdCBTdHJ1Y3R1cmUqIGJlY2F1c2UgeW91IHdhbnQg
dGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZvciB0aGUgc2FtZQorICAgIC8vIHN0cnVjdHVyZSB0
aGF0IHlvdSB2YWxpZGF0ZWQgKGkuZS4gYXZvaWQgYSBUT0NUT1UgcmFjZSkuCisgICAgCisgICAg
Ly8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3Bl
cnR5IHdvbid0IGJlIGludGVyY2VwdGVkLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBpc1N0
aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3Jk
aW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAKKyAg
ICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCBkZWZpbml0ZWx5IGhhcywgb3IgZGVmaW5pdGVseSBk
b2VzIG5vdCBoYXZlLCB0aGUgcHJvcGVydHkgcmlnaHQgbm93LgorICAgIC8vIElmIHRydWUsIHRo
ZW4gd2UgY291bGQgY29udGludWUgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBieSBjaGVja2luZyBp
ZiB0aGUgb2JqZWN0IGhhcyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIE1heSBjb25zZXJ2YXRpdmVs
eSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndAor
ICAgIC8vIGd1YXJhbnRlZSB0aGUgY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2Vu
Y2UgY29uZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlCisgICAgLy8gaW1wdXJlIHBy
b3BlcnRpZXMuCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKikgY29uc3Q7CisgICAg
Ym9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
aXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5n
IGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZSBhbmQgcG9z
c2libHkgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQuCisgICAgYm9vbCBpc1dhdGNoYWJs
ZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAg
IGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0
OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxk
IGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBv
aW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZShTdHJ1Y3R1cmUqKSBj
b25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUuCisg
ICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZl
cmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
SlNPYmplY3QqIG1fb2JqZWN0OworICAgIFByb3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9uOwor
fTsKKworc3RydWN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4g
a2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGIp
CisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKworI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0
aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3QoSlNPYmplY3QqIG9iamVj
dCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLm9iamVjdCgpID09IG9iamVj
dCkKKyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yQ29uZGl0aW9uS2luZCgKKyAgICBQcm9wZXJ0eUNv
bmRpdGlvbjo6S2luZCBraW5kKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24u
a2luZCgpID09IGtpbmQpCisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAg
ICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkg
Y29uc3QKK3sKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWdu
ZWQgbnVtRm91bmQgPSAwOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFBy
b3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0
aW9uOworICAgICAgICAgICAgbnVtRm91bmQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVChudW1Gb3VuZCA9PSAxKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29s
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAg
ICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6YXJlU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6
ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBp
ZiAoY29uZGl0aW9uLnZhbGlkaXR5UmVxdXJpZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFyZVN0aWxsVmFsaWQoKSBjb25zdAor
eworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0
aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCituYW1lc3BhY2Ug
eworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvbigKKyAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKCk7CisgICAgCisgICAgc3dpdGNoIChjb25kaXRpb24p
IHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob2Zmc2V0
ID09IGludmFsaWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb24oKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5j
ZSh2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAg
ICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOiB7CisgICAgICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2Jq
ZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICB9
CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOiB7CisgICAgICAg
IHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKAorICAgICAg
ICAgICAgdm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVk
UHJvdG90eXBlKCkpOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25k
aXRpb246OktpbmQga2luZCkKK3sKKyAgICBBU1NFUlQoISFwcm90b3R5cGUgPT0gKGNvbmRpdGlv
biA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpKTsKKyAgICAKKyAgICBWZWN0b3I8T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IGNvbmRpdGlvbnM7CisgICAgCisgICAgZm9yICg7Oykgewor
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCisgICAgICAgICAgICByZXR1cm4gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgCisgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKTsKKyAgICAg
ICAgCisgICAgICAgIGlmICh2LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBpZiAoIXByb3RvdHlw
ZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odik7CisgICAgICAgIHN0cnVj
dHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNl
IHdlJ3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQg
dGhhdCBpdCBzaG91bGQgbm90IGJlCisgICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5
LgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHN0
cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIG9iamVjdCk7CisgICAgICAg
IAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCB0aGlzQ29uZGl0aW9uS2luZDsKKyAg
ICAgICAgaWYgKGtpbmQgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlICYmIG9iamVjdCAh
PSBwcm90b3R5cGUpCisgICAgICAgICAgICB0aGlzQ29uZGl0aW9uS2luZCA9IFByb3BlcnR5Q29u
ZGl0aW9uOjpBYnNlbmNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzQ29uZGl0aW9u
S2luZCA9IGtpbmQ7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBu
ZXdDb25kaXRpb24gPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBv
YmplY3QsIHVpZCwgdGhpc0NvbmRpdGlvbktpbmQpOworICAgICAgICBpZiAoIW5ld0NvbmRpdGlv
biB8fCAhbmV3Q29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6
OmludmFsaWQoKTsKKyAgICAgICAgCisgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKG5ld0NvbmRp
dGlvbik7CisgICAgICAgIAorICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICAvLyBWYWxpZGF0ZSB0aGUgcmVzdWx0Lgor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNl
OiB7CisgICAgICAgIHVuc2lnbmVkIHByZXNlbmNlQ291bnQgPSAwOworICAgICAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBjb25kaXRpb25zKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICAgICAgICAgIHByZXNlbmNlQ291
bnQrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2U6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJlc2VuY2VD
b3VudCA9PSAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6IHsKKyAgICAg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0
aW9ucykKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5raW5kKCkgPT0ga2lu
ZCk7CisgICAgfSB9CisgICAgCisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
Ojpub25FbXB0eShjb25kaXRpb25zKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
TWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVy
biBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhlYywgaGVhZFN0cnVj
dHVyZSwgbnVsbHB0ciwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSk7Cit9CisKK09i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJl
dHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhlYywgaGVhZFN0
cnVjdHVyZSwgbnVsbHB0ciwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVy
KTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9y
UG90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAor
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0
aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLCBoZWFkU3RydWN0dXJlLCBwcm90b3R5cGUs
IHVpZCwgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9o
CisjZGVmaW5lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKworI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbGR1ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKKy8vIEFuIG9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb24gc2V0IGlzIHVzZWQg
dG8gcmVwcmVzZW50IHRoZSBzZXQgb2YgYWRkaXRpb25hbCBjb25kaXRpb25zCisvLyB0aGF0IG5l
ZWQgdG8gYmUgbWV0IGZvciBzb21lIGhlYXAgYWNjZXNzIHRvIGJlIHZhbGlkLiBUaGUgc2V0IGNh
biBoYXZlIHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZXN0aW5nIHN0YXRlczoKKy8vCisvLyBFbXB0
eTogVGhlcmUgYXJlIG5vIHNwZWNpYWwgY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgbWV0Lgor
Ly8gSW52YWxpZDogVGhlIGhlYXAgYWNjZXNzIGlzIG5ldmVyIHZhbGlkLgorLy8gTm9uLWVtcHR5
OiBUaGVyZSBhcmUgc29tZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJl
IHZhbGlkLgorCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCB7CitwdWJsaWM6Cisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSB7IH0KKyAgICAKKyAgICBzdGF0aWMgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW52YWxpZCgpCisgICAgeworICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9w
dFJlZihuZXcgRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG5vbkVtcHR5KGNvbnN0IFZlY3Rv
cjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIGlmICh2
ZWN0b3IuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0KCk7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihuZXcgRGF0YSgpKTsKKyAg
ICAgICAgKnJlc3VsdC5tX2RhdGEtPnZlY3RvciA9IHZlY3RvcjsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhbV9kYXRhIHx8ICFtX2RhdGEtPmlzRW1wdHkoKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhOwor
ICAgIH0KKyAgICAKKyAgICB0eXBlZGVmIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKiBp
dGVyYXRvcjsKKyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gbV9kYXRhLT5iZWdpbigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YS0+ZW5kKCk7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGZvck9iamVjdChKU09iamVjdCogb2JqZWN0KSBjb25zdDsKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JDb25kaXRpb25LaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpL
aW5kKSBjb25zdDsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGlzIGEgY29uZGl0aW9uIHNldCBmb3Ig
YSBwcm90b3R5cGUgaGl0LCB0aGVuIHRoaXMgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlCisg
ICAgLy8gY29uZGl0aW9uIG9uIHRoZSBwcm90b3R5cGUgaXRzZWxmLiBUaGlzIGFsbG93cyB5b3Ug
dG8gZ2V0IHRoZSBvYmplY3QsIG9mZnNldCwgYW5kCisgICAgLy8gYXR0cmlidXRlcyBmb3IgdGhl
IHByb3RvdHlwZS4gVGhpcyB3aWxsIFJFTEVBU0VfQVNTRVJUIHRoYXQgdGhlcmUgaXMgZXhhY3Rs
eSBvbmUgUHJlc2VuY2UKKyAgICAvLyBpbiB0aGUgc2V0LCBhbmQgaXQgd2lsbCByZXR1cm4gdGhh
dCBwcmVzZW5jZS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBzbG90QmFzZUNvbmRpdGlv
bigpIGNvbnN0OworICAgIAorICAgIGJvb2wgYXJlU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIGJv
b2wgYXJlU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7
CisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgYm9v
bCBhcmVTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICAvLyBIZWxwZXJzIGZvciB1c2luZyB0
aGlzIGluIGEgdW5pb24uCisgICAgdm9pZCogcmVsZWFzZVJhd1BvaW50ZXIoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihtX2RhdGEubGVha1JlZigpKTsKKyAgICB9
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGFkb3B0UmF3UG9pbnRlcih2
b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8
RGF0YSo+KHJhd1BvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
c3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGZyb21SYXdQb2ludGVyKHZvaWQqIHJh
d1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRl
cik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAv
LyBJbnRlcm5hbGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1c2luZyBhIHBvaW50ZXIgdG8g
YSBEYXRhIHRoYXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKyAgICAKKyAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcGFjdCBieSBoYXZpbmcgaXQgaW50ZXJuYWxseSB1c2Ug
YSB2ZWN0b3IgdGhhdCBqdXN0IGhhcworICAgIC8vIHRoZSBub24tdWlkIHBvcnRpb24gb2YgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24sIGFuZCB0aGVuIHJlcXVpcmluZyB0aGF0IHRoZSBjYWxsZXJz
IG9mIGFsbAorICAgIC8vIG9mIHRoZSBBUElzIHN1cHBseSB0aGUgdWlkLgorICAgIAorICAgIGNs
YXNzIERhdGEgOiBSZWZDb3VudGVkPERhdGE+IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRGF0YSk7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAg
ICBwdWJsaWM6CisgICAgICAgIERhdGEoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gdmVjdG9yOworICAgIH07CisgICAgCisgICAgUmVmUHRy
PERhdGE+IG1fZGF0YTsKK307CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhl
YWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90
b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1
cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNywxNCArMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6
OkdldEJ5SWRBY2Nlc3MoCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5
cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQp
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fY2hhaW5Db3Vu
dChjaGFpbkNvdW50KQogICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisg
ICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0
dWJSb3V0aW5lKQogewotICAgIGlmIChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93
bmVyLCBjaGFpbik7CiB9CiAKIEdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcx
LDcgKzcwLDcgQEAgYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1Zgogewog
ICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFy
a2VkKG1fY2hhaW4uZ2V0KCkpKQorICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNTdGlsbExpdmUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRX
ZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAg
cHVibGljOgogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgIFZNJiwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSos
Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9IDAsIHVuc2lnbmVkIGNoYWluQ291bnQgPSAwKTsK
KyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgfkdldEJ5SWRBY2Nlc3MoKTsKICAgICAKQEAg
LTcyLDggKzcyLDcgQEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9Ci0gICAgdW5zaWdu
ZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW5Db3VudDsgfQorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVy
biBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGlu
ZSgpIGNvbnN0CiAgICAgewpAQCAtOTMsNiArOTIsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5
cGUgbV90eXBlOwogICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsKICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2Nv
bmRpdGlvblNldDsgLy8gRklYTUUgd2hhdCBhYm91dCBiYXJyaWVycz8KICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBt
X3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4Njc5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBQdXRCeUlk
QWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAgICAgIHJlc3VsdC5tX3R5cGUg
PSBUcmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1
YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHJl
c3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZvLnUu
cHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAorICAgICAgICAg
ICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwogICAgICAg
ICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCkBAIC02NCw2ICs2NSw5IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHUKIAogYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRj
aEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikgY29uc3QKIHsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgc3dpdGNo
IChtX3R5cGUpIHsKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJr
ZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQpAQCAtNzQsMTUgKzc4LDExIEBAIGJvb2wgUHV0QnlJ
ZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9jaGFp
bi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU2V0dGVyOgogICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgogICAgICAgICBpZiAoIUhlYXA6
OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miwx
NCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0g
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3Vs
dDsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5t
X29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAg
cmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworICAgICAgICByZXN1bHQubV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRl
ciA9IDA7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkBAIC05NSw4ICs5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlND
ZWxsKiBvd25lciwKICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAg
ICB1bnNpZ25lZCBjaGFpbkNvdW50LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYyBjdXN0b21TZXR0ZXIsCiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lKQogICAgIHsKQEAgLTEwNCwxMCArMTAzLDcgQEAgcHVibGljOgogICAgICAgICBQ
dXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2
bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBhY2Nlc3NUeXBl
OwotICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2
bSwgb3duZXIsIGNoYWluKTsKLSAgICAgICAgICAgIHJlc3VsdC5tX2NoYWluQ291bnQgPSBjaGFp
bkNvdW50OwotICAgICAgICB9CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRp
dGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gY3VzdG9tU2V0dGVyOwog
ICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtMTQ2LDE3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X25ld1N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNo
YWluKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1Nl
dHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbi5nZXQoKTsKLSAg
ICB9Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY2hh
aW5Db3VudDsKLSAgICB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAg
SklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlD
b25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQcm9wZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2
b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludChtX2tpbmQsICIgb2YgIiwgbV91
aWQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAg
b3V0LnByaW50KCIgYXQgIiwgbV9vZmZzZXQsICIgd2l0aCBhdHRyaWJ1dGVzICIsIG1fYXR0cmli
dXRlcyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBBYnNl
bmNlT2ZTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiIHdpdGggcHJvdG90eXBlICIsIEpTT2Jq
ZWN0KHByb3RvdHlwZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGls
bFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgIGNhc2UgUHJlc2VuY2U6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7
CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IG9mZnNldCgpIHx8IGN1cnJlbnRBdHRyaWJ1
dGVzICE9IGF0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFic2VuY2U6IHsKKyAgICAgICAgaWYg
KHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
c3RvcmVkUHJvdG90eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBjYXNlIEFic2VuY2VPZlNldHRl
cjogeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgaWYgKHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAg
ICAgICAgICBpZiAoY3VycmVudEF0dHJpYnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3Nv
cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfSB9CisgICAg
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNh
c2UgQWJzZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBhbiBpbXB1cmUgcHJvcGVydHkgY2FuIGNhdXNl
IGEgcHJvcGVydHkgdG8gYXBwZWFyLCBhbmQgY2FuIGFsc28KKyAgICAvLyAic2hhZG93IiBhbiBl
eGlzdGluZyBKUyBwcm9wZXJ0eSBvbiB0aGUgc2FtZSBvYmplY3QuIEhlbmNlIGl0IGFmZmVjdHMg
Ym90aCBwcmVzZW5jZSBhbmQKKyAgICAvLyBhYnNlbmNlLiBJdCBkb2Vzbid0IGFmZmVjdCBBYnNl
bmNlT2ZTZXR0ZXIgYmVjYXVzZSBpbXB1cmUgcHJvcGVydGllcyBhcmVuJ3QgZXZlciBzZXR0ZXJz
LgorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFi
c2VuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAg
ICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRl
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzU3RpbGxWYWxp
ZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wg
UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25z
dAoreworICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbklu
dmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNT
dGlsbFZhbGlkKHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3Rp
bGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFy
a2VkKHByb3RvdHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMo
Y29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1By
b3RvdHlwZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBjb25kaXRpb24p
Cit7CisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25k
aXRpb246OlByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIlByZXNlbmNlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAg
ICAgIG91dC5wcmludCgiQWJzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6
OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgi
QWJzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFByb3BlcnR5Q29uZGl0aW9uX2gKKyNk
ZWZpbmUgUHJvcGVydHlDb25kaXRpb25faAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJl
ZmVyZW5jZXM7CisKK2NsYXNzIFByb3BlcnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVt
IEtpbmQgeworICAgICAgICBQcmVzZW5jZSwKKyAgICAgICAgQWJzZW5jZSwKKyAgICAgICAgQWJz
ZW5jZU9mU2V0dGVyCisgICAgfTsKKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAg
ICAgIDogbV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tpbmQoUHJlc2VuY2UpCisgICAgewor
ICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIFByb3Bl
cnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBt
X3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChBYnNlbmNlKQorICAgIHsKKyAgICAgICAg
bWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVy
dHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5k
ID0gUHJlc2VuY2U7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9IG9mZnNldDsK
KyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRp
dGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlv
biByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEFic2VuY2U7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJv
dG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIAorICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVp
ZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRlcjsKKyAgICAgICAgcmVz
dWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1f
dWlkICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3Qg
eyByZXR1cm4gbV91aWQ7IH0KKyAgICAKKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0
dXJuICEhKnRoaXMgJiYgbV9raW5kID09IFByZXNlbmNlIH07CisgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNPZmZzZXQoKSk7CisgICAg
ICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldDsKKyAgICB9CisgICAgYm9vbCBoYXNBdHRyaWJ1
dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2UgfTsKKyAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNB
dHRyaWJ1dGVzKCkpOworICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAg
IH0KKyAgICAKKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMg
JiYgKG1fa2luZCA9PSBBYnNlbmNlIHx8IG1fa2luZCA9PSBBYnNlbmNlT2ZTZXR0ZXIpOyB9Cisg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFz
UHJvdG90eXBlKCk7CisgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IFdURjo6
UHRySGFzaDxVbmlxdWVkU3RyaW5nSW1wbCo+OjpoYXNoKG1fdWlkKSArIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX2tpbmQpOworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNl
IFByZXNlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHUucHJlc2VuY2Uub2Zmc2V0OworICAg
ICAgICAgICAgcmVzdWx0ICs9IHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFic2VuY2U6CisgICAgICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVy
OgorICAgICAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU09iamVjdCo+OjpoYXNoKHUu
YWJzZW5jZS5wcm90b3R5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Vp
ZCAhPSBvdGhlci5tX3VpZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KG1fa2luZCAhPSBvdGhlci5tX2tpbmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAg
ICByZXR1cm4gdS5wcmVzZW5jZS5vZmZzZXQgPT0gb3RoZXIudS5wcmVzZW5jZS5vZmZzZXQKKyAg
ICAgICAgICAgICAgICAmJiB1LnByZXNlbmNlLmF0dHJpYnV0ZXMgPT0gb3RoZXIudS5wcmVzZW5j
ZS5hdHRyaWJ1dGVzOworICAgICAgICBjYXNlIEFic2VuY2U6CisgICAgICAgIGNhc2UgQWJzZW5j
ZU9mU2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5wcm90b3R5cGUgPT0gb3Ro
ZXIudS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gQ2hl
Y2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3BlcnR5IHdv
bid0IGJlIGludGVyY2VwdGVkLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJl
IHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVy
ZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0
aGUgb2JqZWN0IGRlZmluaXRlbHkgaGFzLCBvciBkZWZpbml0ZWx5IGRvZXMgbm90IGhhdmUsIHRo
ZSBwcm9wZXJ0eSByaWdodCBub3cuCisgICAgLy8gSWYgdHJ1ZSwgdGhlbiB3ZSBjb3VsZCBjb250
aW51ZSB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IGJ5IGNoZWNraW5nIGlmIHRoZSBvYmplY3QgaGFz
IHRoZQorICAgIC8vIHN0cnVjdHVyZS4gTWF5IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwg
aWYgdGhlIG9iamVjdCBhbmQgc3RydWN0dXJlIGFsb25lIGRvbid0CisgICAgLy8gZ3VhcmFudGVl
IHRoZSBjb25kaXRpb24uIFRoaXMgaGFwcGVucyBmb3IgYW4gQWJzZW5jZSBjb25kaXRpb24gb24g
YW4gb2JqZWN0IHRoYXQgbWF5IGhhdmUKKyAgICAvLyBpbXB1cmUgcHJvcGVydGllcy4KKyAgICBi
b29sIGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBi
eSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVy
ZSBhbmQgcG9zc2libHkgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQuCisgICAgYm9vbCBp
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNv
bnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3
ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8g
d2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLgorICAgIGJvb2wgaXNXYXRjaGFibGUoU3RydWN0
dXJlKikgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGlu
dm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNv
bnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZl
cmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlk
OworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBKU09iamVjdCogbV9wcm90b3R5cGU7CisgICAgICAgIH0gYWJzZW5jZTsKKyAgICB9IHU7Cit9
OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9u
JiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvcGVydHlDb25kaXRpb24+
IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4Njc5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsNiArMTAwLDkgQEAgcHVibGljOgogICAgIGJvb2wgcmVhbGxvY2F0ZXNT
dG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAgICAgCisgICAg
Ly8gSXQncyB1bmRlcnN0b29kIHRoYXQgdGhlc2UgY2hlY2tzIGRvbid0IGFjdHVhbGx5IHJlcXVp
cmUgdGhhdCB0aGUgb2JqZWN0IGtlZXBzIGV4YWN0bHkgdGhpcworICAgIC8vIHN0cnVjdHVyZS4g
SXQgY2FuIGhhdmUgd2hhdGV2ZXIgc3RydWN0dXJlLCBzbyBsb25nIGFzIHRoYXQgc3RydWN0dXJl
IGFncmVlcyB3aXRoIHRoZSBnaXZlbgorICAgIC8vIG9uZSBhYm91dCB0aGUgcHJvcGVydHkgYmVp
bmcgc3RvcmVkLgogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0
YW50Q2hlY2tzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NvbnN0YW50Q2hlY2tz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg2
Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NiwxNCArNTYsMTQgQEAgV2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjp+V2F0Y2hwbwogewogfQogCi1TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdh
dGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNP
blN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFkKTsKIH0KIAogU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1
cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9jayogY29kZUJsb2NrLAotICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7CiAgICAgaWYgKCFob2xk
ZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykpOwpAQCAtNzIsNyArNzIsNyBAQCBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvCiAgICAgICAgIEFTU0VSVCho
b2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwogICAgIH0KICAgICAKLSAgICByZXR1
cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAgcmV0dXJuIGhvbGRlclJlZi0+YWRk
V2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludF9oCiAK
KyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9p
bnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSArNDcsMTEgQEAgY2xhc3MgU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCi0gICAgICAg
IFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQotICAgICAgICA6IG1faG9s
ZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXks
CiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4gbmV4dCkK
LSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAgIDogbV9rZXkoa2V5KQorICAgICAg
ICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25leHQoV1RGOjptb3ZlKG5leHQpKQog
ICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKICAgICBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpAQCAtODMsMTEgKzgxLDExIEBAIHB1
YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKCk7CiAgICAg
Ci0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgpOwor
ICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQo
CiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJS
ZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKik7CisgICAgICAgIENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0
IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg2Nzk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgsMTIgQEAgdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgog
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFj
Y2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25k
aXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCA9
IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2Vs
ZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKICAgICBjYXNlIGFjY2Vzc191
bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhhdmUgdG8gcmVsZWFz
ZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgsMTAgQEAgYm9vbCBTdHJ1Y3R1cmVT
dHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJl
Y3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1
dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjpp
c01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgIHx8
ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHUucHV0QnlJZFRyYW5z
aXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxh
Y2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsx
MTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8gUHV0QnlJZCoKIAot
ICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3Ry
dWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNp
dGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNEaXJlY3QpCiAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDsK
QEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgICAg
IHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJl
dmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLmNo
YWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5y
YXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKICAgICB9
CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc1LDExIEBAIHN0cnVj
dCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgIH0KICAgICAg
ICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChD
b2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNo
cG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0aGlzKTsKKyAgICAg
ICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRpdGlvbik7CiAgICAgfQog
ICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpAQCAtMjE3LDIzICsyMTgsMTIgQEAgc3RydWN0
IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAgICAgICB9IGdldEJ5SWRTZWxmOwogICAgICAg
ICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VP
YmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
cHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVjdDsKLSAgICAgICAg
fSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgdW5zaWduZWQg
Y291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgOiAxOwotICAgICAgICB9IGdl
dEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFBvbHltb3JwaGljR2V0
QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0QnlJZExpc3Q7CiAgICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJldmlvdXNTdHJ1Y3R1
cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gc3RydWN0dXJlOwot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAg
ICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7CiAgICAgICAgIH0gcHV0QnlJZFRyYW5zaXRp
b247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAoIW1f
a2V5LmlzV2F0Y2hhYmxlKCkpIHsKKyAgICAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2Vt
Ymx5KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgIkZpcmluZyB3
YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmdQcmlu
dFN0cmVhbSBvdXQ7CisgICAgICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwg
IiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgICAgIAorICAgICAgICBTdHJpbmdGaXJlRGV0YWls
IGRldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAgICAgCisgICAgICAgIG1fY29k
ZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5w
cm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZkZXRhaWwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+
YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICAgICAgOiBtX2tleShrZXkpCisg
ICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZp
cmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg2Nzk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxl
UHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
Tm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0
KTsKLSAgICB2b2lkIGVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYpOworICAgIHZvaWQgZW1pdFByb3BlcnR5Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogCiAgICAgdm9pZCBwcmVwYXJlVG9Q
YXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVhckNhY2hlcygpOwpAQCAtNzA3LDExICs3MDcsMjAg
QEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hl
Y2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhl
IG90aGVyIHdheSBhcm91bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBu
byBwcm9maXQgZnJvbSB1c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1h
ZGFwdGl2ZWx5IHdhdGNoIHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29v
biBhcyB3ZSBtYWtlIGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5v
ZGUgPSB3ZWFrSlNDb25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVj
dE5vZGUpOwogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKICAgICB9CiAgICAgCisgICAgdm9p
ZCBlbWl0UHJvcGVydHlDaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoIW1fZ3JhcGgud2F0
Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KG9iamVjdCwgdWlkLCBzdHJ1Y3R1cmUpKQorICAgICAg
ICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKG9iamVjdCwgc3RydWN0dXJlKTsK
KyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JF
eGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
CkBAIC0yMjkwLDEwICsyMjk5LDEwIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpl
bWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK3Zv
aWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQcm9wZXJ0eUNoZWNrcyhjb25zdCBDb25zdGFudFN0cnVj
dHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgY2Vs
bENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHZlY3RvcltpXS5jb25zdGFudCgpLCB2ZWN0b3Jb
aV0uc3RydWN0dXJlKCkpOworICAgICAgICBlbWl0UHJvcGVydHlDaGVjayh2ZWN0b3JbaV0uY29u
c3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpLCB1aWQpOwogfQogCiB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMyMiw4ICsyMzMxLDExIEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgIC8vIDEpIEVtaXQgcHJvdG90eXBlIHN0
cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMuIFRoaXMgY291bGQgc29ydCBvZiBtYXliZSBu
b3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwgaWYgdGhlcmUgaXMgc29tZSByYXJlbHkgZXhl
Y3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCByZXF1aXJlcyBhIGxvdAogICAgICAgICAvLyAg
ICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBhcmUgbm90IHdhdGNocG9pbnRhYmxlLgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFu
dHMoKTsgdmFyaWFudEluZGV4LS07KQotICAgICAgICAgICAgZW1pdENoZWNrcyhnZXRCeUlkU3Rh
dHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5k
ZXgtLTspIHsKKyAgICAgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAgICAgICAg
ICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyAyKSBFbWl0IGEgTXVsdGlHZXRCeU9mZnNldAogICAg
ICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zm
c2V0RGF0YS5hZGQoKTsKQEAgLTIzNDQsNyArMjM1Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICAgICAgCiAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkpKSwgYmFzZSk7CiAgICAgCi0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hl
Y2tzKCkpOworICAgIGVtaXRQcm9wZXJ0eUNoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCks
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAKICAgICBpZiAodmFy
aWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJp
YW50LmFsdGVybmF0ZUJhc2UoKSk7CkBAIC0yNDM4LDcgKzI0NTAsOSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50
SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewog
ICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4
XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHJvcGVydHlDaGVja3Mo
CisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFu
dENoZWNrcygpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApAQCAt
MjQ2Myw3ICsyNDc3LDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQu
Y29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAg
ICAgIHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xk
U3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5J
bnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1MTksNyArMjUzNSw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICBD
aGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3Ry
dWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIAotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQu
Y29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcyh2YXJpYW50LmNv
bnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7
CiAgICAgICAgIAogICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAg
ICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lv
biAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw5IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRh
dGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVj
ayhpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwogICAgICAgICB9
CiAgICAgfQorICAgIAorICAgIGZvciAoQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRj
aHBvaW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cykKKyAgICAgICAgd2F0Y2hwb2lu
dC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKICNp
bmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVT
ZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk4LDYgKzk5LDcgQEAgcHVibGljOgogICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7CiAgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0dXJlUmVmZXJlbmNlczsKICAgICBC
YWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3YXRjaHBvaW50czsKKyAgICBCYWc8
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRz
OwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7CiAgICAgCiAg
ICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3Bw
CShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBv
aW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVy
VmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAg
ICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxv
Y2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hw
b2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpj
b2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0
Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMTcgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBv
aW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFs
dWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2st
PmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vz
bid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBp
dCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNo
cG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNv
ZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6
OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIGtleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAorICAgICAgICBjb21tb24uYWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spKTsKIH0KIAogRGVzaXJl
ZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KQEAgLTc0LDYgKzgyLDExIEBA
IHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSlNBcnIKICAgICBtX2J1ZmZlclZp
ZXdzLmFkZExhemlseSh2aWV3KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIG1fYWRhcHRp
dmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERlc2lyZWRXYXRjaHBv
aW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1
cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC04OCw2ICsxMDEsNyBAQCB2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmxpbmVTZXRzLnJlYWxseUFkZChjb2Rl
QmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVC
bG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2Nr
LCBjb21tb25EYXRhKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29k
ZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0
aWxsVmFsaWQoKSBjb25zdApAQCAtOTUsNyArMTA5LDggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2lu
dHM6OmFyZVN0aWxsVmFsaWQoKQogICAgIHJldHVybiBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAg
ICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZl
cnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVT
dGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCisg
ICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUu
aCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgpAQCAtNDEsMTUgKzQyLDE1IEBAIGNs
YXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdlbmVyaWNTZXRBZGFw
dG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgVCBzZXQsIFdhdGNocG9pbnQq
IHdhdGNocG9pbnQpCisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBU
IHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNldC0+YWRk
KHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0LT5hZGQoY29tbW9uLndhdGNocG9pbnRz
LmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRh
dGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9CiB9OwogCiBz
dHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29s
IGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwpAQCAt
NTcsMTIgKzU4LDE4IEBAIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7CiB9OwogCiBzdHJ1
Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0
aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7
CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAg
ICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2Nr
KiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3Rh
dGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFsaWQoKTsKICAgICB9
CiB9OwogCkBAIC04Nyw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fcmVhbGx5QWRkZWQpOwogICAgICAgICAKICAgICAgICAgZm9yIChhdXRvJiBzZXQgOiBtX3Nl
dHMpCi0gICAgICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbi53YXRj
aHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CisgICAgICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJs
b2NrLCBzZXQsIGNvbW1vbik7CiAgICAgICAgIAogICAgICAgICBtX3JlYWxseUFkZGVkID0gdHJ1
ZTsKICAgICB9CkBAIC0xMjIsNiArMTI5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExhemls
eShJbmZlcnJlZFZhbHVlKik7CiAgICAgdm9pZCBhZGRMYXppbHkoSlNBcnJheUJ1ZmZlclZpZXcq
KTsKICAgICAKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhp
cyBkaXJlY3RseS4gVXNlCisgICAgLy8gR3JhcGg6OmFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludCwgd2hpY2ggZG9lcyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbC4KKyAgICB2b2lk
IGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAogICAgIGJv
b2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJs
b2NrKiwgQ29tbW9uRGF0YSYpOwpAQCAtMTQ0LDEyICsxNTUsMTcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNXYXRjaGVkKHZpZXcpOwogICAgIH0KKyAg
ICBib29sIGlzV2F0Y2hlZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkp
OworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxX
YXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5s
aW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5lU2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNo
cG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZh
bHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3Kiwg
QXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CisgICAgR2Vu
ZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0OCw2ICs4NDgsNDkgQEAgdm9p
ZCBHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZUZsYQogICAgIH0KIH0KIAorYm9vbCBH
cmFwaDo6YWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNXYXRjaGFibGUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHko
a2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5LmNvbmRpdGlvbigpID09IFByb3BlcnR5Q29uZGl0
aW9uOjpBYnNlbmNlKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtl
eS5wcm90b3R5cGUoKSk7CisgICAgbV9wbGFuLndhdGNocG9pbnRzLmFkZExhemlseShrZXkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjp3YXRjaFByZXNlbmNlT2ZQcm9wZXJ0
eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit7CisgICAgcmV0dXJuIGFkZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OnByZXNlbmNlKG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpKTsKK30KKworYm9v
bCBHcmFwaDo6d2F0Y2hBYnNlbmNlT2ZQcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQoreworICAgIHJldHVybiBhZGRB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uOjphYnNlbmNlKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpKTsKK30KKworYm9vbCBHcmFwaDo6
d2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNPYmplY3QqIG9i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICBpZiAoIW9iamVjdCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
KyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIAorICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgCisgICAgaWYgKG9mZnNldCA9
PSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICByZXR1cm4gd2F0Y2hBYnNlbmNlT2ZQcm9wZXJ0eShv
YmplY3QsIHVpZCwgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgCisgICAgcmV0
dXJuIHdhdGNoUHJlc2VuY2VPZlByb3BlcnR5KG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0
ZXMpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVf
cHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2
ZW5lc3MuZmluZChjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzUsNiArNjc1LDI0IEBAIHB1YmxpYzoKICAgICBE
ZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZp
ZXJzOyB9CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1f
cGxhbi53YXRjaHBvaW50czsgfQogICAgIAorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGtl
eSBpcyBhbHJlYWR5IGludmFsaWQuCisgICAgYm9vbCBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKKyAgICAvLyBHYXRl
IHRoZSB2YWxpZGl0eSBvZiB0aGlzIGNvbXBpbGF0aW9uIG9uIHRoZSBnaXZlbiBvYmplY3QgaGF2
aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSB3aXRoCisgICAgLy8gdGhlIGdpdmVuIG9mZnNldCBhbmQg
YXR0cmlidXRlcy4gUmV0dXJucyBmYWxzZSBpZiB3YXRjaGluZyBmb3IgdGhpcyBpcyBpbXBvc3Np
YmxlLgorICAgIGJvb2wgd2F0Y2hQcmVzZW5jZU9mUHJvcGVydHkoCisgICAgICAgIEpTT2JqZWN0
KiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpOworICAgIAorICAgIC8vIEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRoaXMgY29tcGlsYXRp
b24gb24gdGhlIGdpdmVuIG9iamVjdCBsYWNraW5nIHRoZSBnaXZlbiBwcm9wZXJ0eS4KKyAgICAv
LyBSZXR1cm5zIGZhbHNlIGlmIHdhdGNoaW5nIGZvciB0aGlzIGlzIGltcG9zc2libGUuCisgICAg
Ym9vbCB3YXRjaEFic2VuY2VPZlByb3BlcnR5KAorICAgICAgICBKU09iamVjdCosIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOworICAgIAorICAgIC8vIEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRoaXMg
Y29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVjdCBlaXRoZXIgaGF2aW5nLCBvciBsYWNraW5n
LCB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGdpdmVuIHN0cnVj
dHVyZSBjbGFpbXMgdG8gaGF2ZSAob3IgbGFjaykgdGhlIHByb3BlcnR5LgorICAgIGJvb2wgd2F0
Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KAorICAgICAgICBKU0NlbGwqLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisKICAgICBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcg
QEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0
ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAg
ICBpZiAoc3RydWN0dXJlLT5uZWVkc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAg
ICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0
dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CkBAIC0xMzIsNDcgKzEzMiwzMCBAQCBzdGF0aWMg
dm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgYWRk
U3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgIEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCitzdGF0aWMgdm9pZCBjaGVja09iamVj
dFByb3BlcnR5Q29uZGl0aW9uKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBj
b25kaXRpb24sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sCisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZh
aWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKG9iamVjdC0+c3RydWN0
dXJlKCkgPT0gc3RydWN0dXJlICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJ
c1N0aWxsVmFsaWQoKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBv
aW50KHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIGlmICghQVNT
RVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBleGVjdXRlIHRoaXMgY29kZSwg
dGhlIG9iamVjdCBtdXN0IGhhdmUgdGhlIHN0cnVjdHVyZSB3ZSBleHBlY3QuIEFzc2VydAotICAg
ICAgICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KLSAgICAgICAgICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBicmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAg
ICAgICAgICAgaml0LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbmVmZmVjdGl2ZVdhdGNocG9pbnQp
OwotICAgICAgICAgICAgb2subGluaygmaml0KTsKLSAgICAgICAgfQorICAgIGlmIChjb25kaXRp
b24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAg
ICAgIGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBv
aW50KHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCiAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
b2JqZWN0KSwgc2NyYXRjaEdQUik7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKLSAgICAgICAg
YnJhbmNoU3RydWN0dXJlKGppdCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKKyAgICAg
ICAgYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgaml0LCBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmUpKTsKIH0KIAotc3RhdGljIHZv
aWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgIEpTVmFsdWUgcHJvdG90eXBlLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Ci0gICAg
Ci0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICBwcm90b3R5cGUuYXND
ZWxsKCksIHByb3RvdHlwZS5hc0NlbGwoKS0+c3RydWN0dXJlKCksIGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGppdCwKLSAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKK3N0YXRpYyB2b2lk
IGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBzZXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sCisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogc2V0KSB7CisgICAgICAgIGNo
ZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb24oCisgICAgICAgICAgICBjb25kaXRpb24sIGNvZGVC
bG9jaywgc3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICB9CiB9
CiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVm
ZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciB0YXJnZXQpCkBAIC0yOTYsMTEgKzI3OSwxMiBAQCBzdGF0aWMgRnVuY3Rpb25QdHIgY3Vz
dG9tRm9yKGNvbnN0IFB1dFByCiAKIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAg
RXhlY1N0YXRlKiBleGVjLCBCeUlkU3R1YktpbmQga2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLAotICAgIEZ1bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwKKyAgICBGdW5jdGlv
blB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBib29sIGxvYWRUYXJnZXRGcm9tUHJveHksIFdhdGNo
cG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xh
YmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+JiBzdHViUm91dGluZSkKIHsKLQorICAgIEFTU0VSVChjb25kaXRpb25TZXQuYXJlU3RpbGxW
YWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworICAgIAogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBK
U1ZhbHVlUmVncygKQEAgLTM0NiwzMyArMzMwLDI1IEBAIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJ
ZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5Rmly
ZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVy
dHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCiAgICAgaWYgKHdh
dGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChzdHViSW5mby5hZGRXYXRj
aHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3Ry
dWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGlmIChjaGFpbikg
ewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAg
ICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVG
b3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9
IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVy
ZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAg
ICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVy
dHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAg
YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvT2JqZWN0
LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAg
ICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY3VyclN0cnVj
dHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoIXByb3RvT2JqZWN0
IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKLSAgICB9Cisg
ICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgIGNvbmRpdGlvblNldCwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAg
IAorICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICBpZiAoY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBlbHNlCisg
ICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5v
YmplY3QoKS0+c3RydWN0dXJlKCk7CiAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKKyAgICAKICAgICBHUFJSZWcgYmFz
ZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZp
bmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0
Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0
aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCiAgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7CkBAIC02MjcsOSArNjAz
LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNlbGwoVgogICAgICAgICBh
c09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwogICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KLSAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgaWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdl
dE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0
Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIHJldHVybiBBdHRl
bXB0VG9DYWNoZTsKQEAgLTgyNywyMSArODAyLDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlCdWlsZEdldEJ5SUQKICAgICB9CiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
bG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAg
IFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0g
MDsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAg
ICAgCiAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFs
dWUpIHsKICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8
IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKIAogICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICBjb3VudCA9
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoZXhlYywgc3Ry
dWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb3VudCA9
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoCi0gICAgICAgICAgICAgICAg
ZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LCBvZmZzZXQpOwotICAgICAg
ICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoZXhlYywg
c3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0dWJJbmZv
KTsKQEAgLTg1Miw3ICs4MjgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRH
ZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAg
ICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0
b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9mZnNldCwgCiAgICAgICAgIHN0
cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAogICAg
ICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5j
dXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAtODcxLDcg
Kzg0Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAK
ICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0dXJl
LAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAgY29uZGl0aW9uU2V0
KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZv
LCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYgKzk2OSwyOCBAQCBzdGF0aWMg
Ym9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBT
dHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShFeGVjU3Rh
dGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29sIGVtaXRQdXRUcmFu
c2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3Ry
dWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3QgUHV0UHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwK
KyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IHBy
b3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50
LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0
cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0
aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAgIC8v
IGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYgKEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYmIG9s
ZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNraXAgb3B0aW1pemlu
ZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwpA
QCAtMTAyMCwxNCArOTk4LDEzIEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9u
U3R1YkEKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0
IQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQK
ICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVj
LCBzdHJ1Y3R1cmUpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBl
bWl0UHV0VHJhbnNpdGlvblN0dWIKKyAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKKyAg
ICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAg
IENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwog
ICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJv
dXRpbmU7CkBAIC0xMDgzLDE3ICsxMDYwLDggQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRy
YW5zaXRpb25TdHViQQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKICAgICAgICAgb2xkU3RydWN0dXJlKSk7CiAg
ICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICBvbGRTdHJ1Y3R1
cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJK
aXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgCi0g
ICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0g
ICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
KCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0
dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAg
IGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93UGF0aDsKICAgICAKQEAgLTEyMjgsNyArMTE5Niw3IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAg
ICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNl
UmVnaXN0ZXJzKCkpCkBAIC0xMjU2LDggKzEyMjQsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0
UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJF
eGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAgICAgICAgc3RydWN0
dXJlKTsKLQotICAgIHJldHVybiBvbGRTdHJ1Y3R1cmU7CisgICAgCisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTI4MSwxMiArMTI0OSwxMSBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKHNsb3Qu
YmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKICAgICAgICAg
aWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKIAotICAg
ICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJB
bmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kKTsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKQorICAgICAgICAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNp
dGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRL
aW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAg
ICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxv
Y2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTEyOTQsNyArMTI2
MSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmlu
aXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9s
ZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3Qp
OworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEyLDIwICsxMjc5LDIyIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgJiYgc3R1Yklu
Zm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVk
T2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFs
dWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90
eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVu
dCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hh
aW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0g
YmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1
cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4
ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJh
c2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvZmZz
ZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExp
c3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1
dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0
dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNs
b3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LAorICAgICAgICAgICAgZXhlYywg
a2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlv
blNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAg
ICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSwKQEAgLTEzMzYsNyArMTMwNSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQKICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRl
cigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAg
ICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6
IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJv
dG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwor
ICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCks
IHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwg
Q29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTEzODAs
MTcgKzEzNDksMTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAog
ICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCiAKLSAgICAg
ICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25TdHViQW5k
R2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQpOwotCi0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkgCisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICghZW1pdFB1
dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAg
ICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CiAgICAgICAgICAg
ICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNp
dGlvbigKICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90
eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsCiAgICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7CiAKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTE0MjMsMjEgKzEzOTEsMjQgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8
IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3Bp
bGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lOwotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAg
ICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFz
ZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hh
aW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZz
ZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAg
ICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
KyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkg
IT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAg
ICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUuaW1w
bCgpKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIHByb3RvdHlwZUNoYWlu
ID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAgfQorICAgICAgICAg
ICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsK
ICAgICAgICAgCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAg
IGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsK
IAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBl
eGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1Yklu
Zm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xv
dCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0
LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxp
c3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKQEAgLTE0NDgsNyArMTQxOSw3IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAgbGlzdC0+YWRkQWNj
ZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/
IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAg
ICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNl
dHRlcigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKQEAgLTE0ODcsMTEgKzE0NTgsMTUgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgqdm0pOwogICAgIAotICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgSlNWYWx1ZSBmb3VuZFNsb3RCYXNlID0gd2Fz
Rm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCk7Ci0gICAgc2l6ZV90IGNvdW50ID0g
IWZvdW5kU2xvdEJhc2UgfHwgZm91bmRTbG90QmFzZSAhPSBiYXNlID8gCi0gICAgICAgIG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBmb3VuZFNs
b3RCYXNlLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgOiAwOwotICAgIGlmIChjb3VudCA9PSBJbnZh
bGlkUHJvdG90eXBlQ2hhaW4pCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0
aW9uU2V0OworICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgp
ICE9IGJhc2UpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICB9CisgICAgfSBlbHNl
CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlz
cyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKICAgICBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKQEAg
LTE1MTYsNyArMTQ5MSw2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4o
CiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICB9CiAgICAgCi0gICAgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIAogICAgIHsKQEAgLTE1
NDcsMTggKzE1MjEsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAog
ICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50U2V0KCkpCiAgICAgICAgICAgICBzbG90LndhdGNo
cG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKLSAg
ICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAgSlNPYmpl
Y3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1
cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0gcHJvdG90
eXBlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvU3RydWN0dXJlLCBleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFpbHVyZUNhc2Vz
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8o
KS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2
bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQt
PmdldCgpOwotICAgICAgICB9CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25z
KAorICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvaygpLCBzdHViSW5mbywg
c3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAx
ODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RpY3Rp
b25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5
S2luZDsgfQogICAgIGJvb2wgaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVy
biBkaWN0aW9uYXJ5S2luZCgpID09IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQ7IH0KICAgCi0gICAg
Ym9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgeyByZXR1cm4gZGljdGlvbmFyeUtp
bmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kICYmICF0eXBlSW5mbygpLnByb2hpYml0c1By
b3BlcnR5Q2FjaGluZygpOyB9CisgICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGlj
dGlvbmFyeUtpbmQKKyAgICAgICAgICAgICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZygpCisgICAgICAgICAgICAmJiAhKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3Bl
cnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMo
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
CisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisg
ICAgICAgICAgICAmJiB0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKQorICAg
ICAgICAgICAgJiYgdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCk7
CisgICAgfQogCiAgICAgLy8gV2UgdXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9yIHN0
cnVjdHVyZXMgdGhhdCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBwcmV2
ZW50CiAgICAgLy8gREZHIGZyb20gaW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ugc3Ry
dWN0dXJlcyBkb24ndCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFwcGVh
cnMuCkBAIC0yMDIsNyArMjE0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5
cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAgCiAg
ICAgLy8gVHlwZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFT
U0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50
eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOSw2ICs1MTksNyBAQCBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCiAgICAgdm9p
ZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwg
V2F0Y2hwb2ludCopOworICAgIAogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2Ug
aXQgZ290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256952</attachid>
            <date>2015-07-16 19:54:33 -0700</date>
            <delta_ts>2015-07-17 23:33:57 -0700</delta_ts>
            <desc>this isn&apos;t going to be a tiny incremental change</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>121686</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODUyLDYgKzQ4NTYsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25z
dCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAg
LCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlv
blNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RG
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5SWRWYXJp
YW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zm
c2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlmIChjaGFp
biAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50
ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3Rh
bnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRCeUlkVmFy
aWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50JiBHZXRC
eUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAg
ICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29uc3RhbnRD
aGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90
aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0
aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5p
cXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03Miw2ICs2
NywxNiBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgcmV0
dXJuICp0aGlzOwogfQogCitKU09iamVjdCogR2V0QnlJZFZhcmlhbnQ6OmFsdGVybmF0ZUJhc2Uo
KSBjb25zdAoreworICAgIC8vIFRoaXMgY3VycmVudGx5IGFzc3VtZXMgdGhhdCBHZXRCeUlkVmFy
aWFudCB3aWxsIG9ubHkgYmUgdXNlZCBmb3Igc2VsZiBoaXRzIGFuZCBwcm90b3R5cGUKKyAgICAv
LyBoaXRzLiBXaGVuIHdlIHN1cHBvcnQgbWlzc2VzLCB0aGlzIHNob3VsZCBiZSBzbWFydCBlbm91
Z2ggdG8gcmV0dXJuIG51bGxwdHIgaW5zdGVhZCBvZgorICAgIC8vIGNyYXNoaW5nIGluIHNsb3dC
YXNlQ29uZGl0aW9uKCkuCisgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29u
ZGl0aW9uKCkub2JqZWN0KCk7Cit9CisKIFN0cnVjdHVyZVNldCBHZXRCeUlkVmFyaWFudDo6YmFz
ZVN0cnVjdHVyZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgR2V0QnlJZFZh
cmlhbnQgewogcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50KAogICAgICAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAotICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAK
ICAgICB+R2V0QnlJZFZhcmlhbnQoKTsKQEAgLTU1LDggKzU1LDEwIEBAIHB1YmxpYzoKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
ZXQ7IH0KLSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENo
ZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0KLSAgICBKU09iamVjdCog
YWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRlQmFzZTsgfQorCisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCisgICAgSlNPYmplY3QqIGFsdGVybmF0ZUJh
c2UoKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OwogICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAg
Q2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlu
a1N0YXR1cy5nZXQoKTsgfQpAQCAtNzAsOCArNzIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBHZXRCeUlkU3RhdHVzOwogICAgIAogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNl
dDsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0g
ICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVm
ZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsK
KyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBvdXQucHJpbnQoSlNWYWx1ZShtX29iamVjdCksICI6ICIsIG1fY29uZGl0aW9u
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkg
Y29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgcmV0dXJuIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1f
b2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246
OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLnZhbGlkaXR5UmVxdWlyZXNJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246Omlz
U3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
b25kaXRpb24uaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQobV9vYmpl
Y3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNX
YXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBlZmZvcnQpOworfQorCitib29sIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCht
X29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGUoc3RydWN0dXJlLCBlZmZvcnQpOworfQorCitib29s
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6
V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlKG1fb2JqZWN0
LT5zdHJ1Y3R1cmUoKSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNTdGlsbExpdmUoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2JqZWN0KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsTGl2
ZSgpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5j
ZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKCEq
dGhpcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHRyYWNrZWQuY2hlY2sobV9vYmplY3Qp
OworICAgIG1fY29uZGl0aW9uLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9o
CisjZGVmaW5lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSAiUHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisKK2Ns
YXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSB0b2tlbikKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgICAgICAsIG1f
Y29uZGl0aW9uKHRva2VuKQorICAgIHsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24oSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbikKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9jb25kaXRpb24o
Y29uZGl0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIHByZXNlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQu
bV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcih1
aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAg
ICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAg
ICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgb2Zmc2V0LCBh
dHRyaWJ1dGVzKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIGFic2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0
ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlv
bjo6YWJzZW5jZSh1aWQsIHByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAg
ICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJp
ZXIob2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcigKKyAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25k
aXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIo
dWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICB2bS5oZWFwLndy
aXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0
QmFycmllcihvYmplY3QsIHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9u
ID0gUHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1
ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAg
ICAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgdmFsdWUp
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2Nv
bmRpdGlvbjsgfTsKKyAgICAKKyAgICBKU09iamVjdCogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9vYmplY3Q7IH0KKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2NvbmRpdGlvbjsgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5raW5kKCk7IH0KKyAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkudWlkKCk7IH0KKyAgICBi
b29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc09mZnNldCgpOyB9
CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCku
b2Zmc2V0KCk7IH0KKyAgICB1bnNpZ25lZCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkuaGFzQXR0cmlidXRlcygpOyB9CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygp
IGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmF0dHJpYnV0ZXMoKTsgfQorICAgIGJvb2wgaGFz
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUHJvdG90eXBlKCk7IH0K
KyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkucHJv
dG90eXBlKCk7IH0KKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBj
b25kaXRpb24oKS5oYXNSZXF1aXJlZFZhbHVlKCk7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFs
dWUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5yZXF1aXJlZFZhbHVlKCk7IH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3Qq
Pjo6aGFzaChtX29iamVjdCkgKyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAg
ICAgICAgICAgICYmIG1fY29uZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9k
cyBjYW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUK
KyAgICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25j
dXJyZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtl
IGFuIGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8g
b3B0aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRl
ZCAoaS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhl
IG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50
ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZh
bGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgp
IHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0
aGUgb2JqZWN0IGRlZmluaXRlbHkgaGFzLCBvciBkZWZpbml0ZWx5IGRvZXMgbm90IGhhdmUsIHRo
ZSBwcm9wZXJ0eSByaWdodCBub3cuCisgICAgLy8gSWYgdHJ1ZSwgdGhlbiB3ZSBjb3VsZCBjb250
aW51ZSB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IGJ5IGNoZWNraW5nIGlmIHRoZSBvYmplY3QgaGFz
IHRoZQorICAgIC8vIHN0cnVjdHVyZS4gTWF5IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwg
aWYgdGhlIG9iamVjdCBhbmQgc3RydWN0dXJlIGFsb25lIGRvbid0CisgICAgLy8gZ3VhcmFudGVl
IHRoZSBjb25kaXRpb24uIFRoaXMgaGFwcGVucyBmb3IgYW4gQWJzZW5jZSBjb25kaXRpb24gb24g
YW4gb2JqZWN0IHRoYXQgbWF5IGhhdmUKKyAgICAvLyBpbXB1cmUgcHJvcGVydGllcy4KKyAgICBi
b29sIGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxp
ZCgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlk
IGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisg
ICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUg
cHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFByb3BlcnR5
Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5v
Q2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZm
b3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisgICAgLy8g
VGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFs
aWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBz
dHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwKKyAg
ICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29u
ZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25k
aXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdSZXF1
aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVyaWVzU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRX
YXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRj
aGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAorICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBs
aXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlk
YXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRl
OgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRp
dGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggeworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6T2JqZWN0
UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0
KiBvYmplY3QpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9
PSBvYmplY3QpCisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRp
b24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJv
cGVydHlDb25kaXRpb246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29u
ZGl0aW9uLmtpbmQoKSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAg
ICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRp
dGlvbigpIGNvbnN0Cit7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAg
IHVuc2lnbmVkIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQo
KSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0
Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykg
eworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmFyZVN0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgZm9y
IChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAg
ICAgICAgaWYgKGNvbmRpdGlvbi52YWxpZGl0eVJlcXVyaWVzSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbFZhbGlkKCkg
Y29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworbmFt
ZXNwYWNlIHsKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHN3aXRjaCAoY29u
ZGl0aW9uKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYg
KG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uKCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
cHJlc2VuY2Uodm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAg
ICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAgICAgICB2bSwgb3du
ZXIsIG9iamVjdCwgdWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKSk7
CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogewor
ICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcigK
KyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCkt
PnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uKCk7CisgICAgfQorfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0
ZUNvbmRpdGlvbnMoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQpCit7CisgICAgQVNT
RVJUKCEhcHJvdG90eXBlID09IChjb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNl
bmNlKSk7CisgICAgCisgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBjb25kaXRp
b25zOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94
eSgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZh
bGlkKCk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RydWN0dXJlLT5wcm90
b3R5cGVGb3JMb29rdXAoZXhlYyk7CisgICAgICAgIAorICAgICAgICBpZiAodi5pc051bGwoKSkg
eworICAgICAgICAgICAgaWYgKCFwcm90b3R5cGUpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KHYpOworICAgICAgICBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7
CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUg
cmVwZWF0ZWRseSwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQgc2hvdWxkIG5vdCBiZQorICAgICAg
ICAvLyB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpCisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3Ry
dWN0dXJlKHZtLCBvYmplY3QpOworICAgICAgICAKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246
OktpbmQgdGhpc0NvbmRpdGlvbktpbmQ7CisgICAgICAgIGlmIChraW5kID09IFByb3BlcnR5Q29u
ZGl0aW9uOjpQcmVzZW5jZSAmJiBvYmplY3QgIT0gcHJvdG90eXBlKQorICAgICAgICAgICAgdGhp
c0NvbmRpdGlvbktpbmQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBraW5kOworICAgICAgICAKKyAgICAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbmV3Q29uZGl0aW9uID0KKyAgICAgICAgICAgIGdl
bmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIHRoaXNDb25kaXRpb25LaW5k
KTsKKyAgICAgICAgaWYgKCFuZXdDb25kaXRpb24gfHwgIW5ld0NvbmRpdGlvbi5pc1N0aWxsVmFs
aWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIAorICAgICAg
ICBjb25kaXRpb25zLmFwcGVuZChuZXdDb25kaXRpb24pOworICAgICAgICAKKyAgICAgICAgaWYg
KG9iamVjdCA9PSBwcm90b3R5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdC4KKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBwcmVzZW5j
ZUNvdW50ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uIDogY29uZGl0aW9ucykgeworICAgICAgICAgICAgc3dpdGNoIChjb25kaXRpb24u
a2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToK
KyAgICAgICAgICAgICAgICBwcmVzZW5jZUNvdW50Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHByZXNlbmNlQ291bnQgPT0gMSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlvbnMpCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChjb25kaXRpb24ua2luZCgpID09IGtpbmQpOworICAgIH0gfQorICAgIAorICAgIHJldHVy
biBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9uRW1wdHkoY29uZGl0aW9ucyk7Cit9CisK
K30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAg
ICB2bSwgb3duZXIsIGV4ZWMsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAg
ICAgICB2bSwgb3duZXIsIGV4ZWMsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVy
dHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcik7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBvdG90eXBlUHJvcGVydHlIaXQoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQor
eworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhl
YywgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVz
ZW5jZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2xk
dWUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0
aW9uYWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFj
Y2VzcyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRl
cmVzdGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRp
dGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBp
cyBuZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
KCkgeyB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFs
aWQoKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBub25FbXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2
ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRh
ID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgICpyZXN1bHQubV9kYXRhLT52ZWN0b3Ig
PSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRh
LT5pc0VtcHR5KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gIW1fZGF0YTsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiogaXRlcmF0b3I7CisgICAgCisgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+YmVnaW4oKTsKKyAgICB9Cisg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX2RhdGEtPmVuZCgpOwor
ICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JPYmplY3QoSlNPYmpl
Y3QqIG9iamVjdCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9yQ29uZGl0
aW9uS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisgICAgCisgICAgLy8gSWYg
dGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90eXBlIGhpdCwgdGhlbiB0aGlzIGlz
IGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNvbmRpdGlvbiBvbiB0aGUgcHJvdG90
eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0LCBvZmZzZXQsIGFu
ZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5cGUuIFRoaXMgd2lsbCBSRUxFQVNF
X0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFByZXNlbmNlCisgICAgLy8gaW4gdGhl
IHNldCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2VuY2UuCisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBib29sIGFy
ZVN0aWxsVmFsaWQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxsVmFsaWRBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgYXJlU3RpbGxMaXZlKCkgY29uc3Q7CisgICAg
CisgICAgLy8gSGVscGVycyBmb3IgdXNpbmcgdGhpcyBpbiBhIHVuaW9uLgorICAgIHZvaWQqIHJl
bGVhc2VSYXdQb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lk
Kj4obV9kYXRhLmxlYWtSZWYoKSk7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBhZG9wdFJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
ZGF0YSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBmcm9tUmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0g
c3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gSW50ZXJuYWxseSwgdGhpcyByZXByZXNlbnRz
IEludmFsaWQgdXNpbmcgYSBwb2ludGVyIHRvIGEgRGF0YSB0aGF0IGhhcyBhbiBlbXB0eSB2ZWN0
b3IuCisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXBhY3Qg
YnkgaGF2aW5nIGl0IGludGVybmFsbHkgdXNlIGEgdmVjdG9yIHRoYXQganVzdCBoYXMKKyAgICAv
LyB0aGUgbm9uLXVpZCBwb3J0aW9uIG9mIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBhbmQgdGhl
biByZXF1aXJpbmcgdGhhdCB0aGUgY2FsbGVycyBvZiBhbGwKKyAgICAvLyBvZiB0aGUgQVBJcyBz
dXBwbHkgdGhlIHVpZC4KKyAgICAKKyAgICBjbGFzcyBEYXRhIDogUmVmQ291bnRlZDxEYXRhPiB7
CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9
CisgICAgICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3Rv
cjsKKyAgICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisg
ICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJl
dmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTQgKzM3LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogCiBHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAogICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCB1bnNpZ25lZCBjaGFpbkNvdW50KQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogICAgIDogbV90
eXBlKHR5cGUpCiAgICAgLCBtX2NoYWluQ291bnQoY2hhaW5Db3VudCkKICAgICAsIG1fc3RydWN0
dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQorICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9u
U2V0KQogICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKIHsKLSAgICBpZiAoY2hhaW4p
Ci0gICAgICAgIG1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwogfQogCiBHZXRCeUlkQWNj
ZXNzOjp+R2V0QnlJZEFjY2VzcygpCkBAIC03MSw3ICs3MCw3IEBAIGJvb2wgR2V0QnlJZEFjY2Vz
czo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKIHsKICAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6
OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKKyAgICBpZiAo
IW1fY29uZGl0aW9uU2V0LmlzU3RpbGxMaXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2VhayhyZXBhdGNoQnVmZmVyKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01MywxMyArNTMsMTIgQEAgcHVibGljOgogICAgIAogICAgIEdldEJ5SWRB
Y2Nlc3MoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3Vu
dCgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygKICAgICAgICAgVk0m
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwg
U3RydWN0dXJlKiwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qID0gMCwgdW5zaWduZWQgY2hhaW5D
b3VudCA9IDApOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKICAgICAKICAgICB+R2V0QnlJZEFjY2Vzcygp
OwogICAgIApAQCAtNzIsOCArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQogICAgIAotICAg
IFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0K
LSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbkNvdW50OyB9
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgSklUU3R1YlJvdXRpbmUq
IHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkBAIC05MSw5ICs4OSw4IEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsK
LSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9zdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOwor
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9uU2V0OyAvLyBGSVhNRSB3aGF0
IGFib3V0IGJhcnJpZXJzPwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGlu
ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBQdXRCeUlkQWNjZXNzIFB1
dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0
aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25l
d1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24uY2hhaW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAorICAgICAgICAgICAgc3R1Yklu
Zm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwogICAgICAgICByZXN1bHQu
bV9zdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCkBAIC02NCw2ICs2NSw5IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJv
bVN0cnVjdHUKIAogYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlcikgY29uc3QKIHsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxs
TGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgc3dpdGNoIChtX3R5cGUp
IHsKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRT
dHJ1Y3R1cmUuZ2V0KCkpKQpAQCAtNzQsMTUgKzc4LDExIEBAIGJvb2wgUHV0QnlJZEFjY2Vzczo6
dmlzaXRXZWFrKFJlcGF0Y2hCdWYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0
dGVyOgogICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KG1fb2xkU3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZp
c2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw2IEBA
IHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52
YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAg
ICAKQEAgLTYyLDE0ICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAg
ICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQYXNzUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAgIFB1dEJ5SWRB
Y2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKICAgICAg
ICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0cnVjdHVyZSk7CiAg
ICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUp
OwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAg
IHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1f
Y3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91
dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1LDggKzk0LDcgQEAgcHVibGljOgog
ICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAgIFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0LDEwICsxMDIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1
Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9
IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewotICAgICAgICAgICAgcmVzdWx0Lm1f
Y2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW5D
b3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0
b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlv
bigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWlu
LmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICBy
ZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0K
ICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAg
LTE3OCw4ICsxNjMsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwogICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFp
bj4gbV9jaGFpbjsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0
dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9u
LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5j
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91
dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
b3V0LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsK
KyAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBtX29mZnNldCwg
IiB3aXRoIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnBy
aW50KCIgd2l0aCBwcm90b3R5cGUgIiwgSlNPYmplY3QocHJvdG90eXBlKCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiIHdpdGgg
IiwgSlNWYWx1ZTo6ZW5jb2RlKHJlcXVpcmVkVmFsdWUoKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgUHJvcGVy
dHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QKK3sKKyAg
ICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZTogewor
ICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJy
ZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IG9mZnNldCgpIHx8
IGN1cnJlbnRBdHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFi
c2VuY2U6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKCkpICE9IGludmFsaWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUo
KSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBjYXNlIEFic2VuY2VPZlNldHRl
cjogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1
dGVzOworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpICE9IGlu
dmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50QXR0cmlidXRlcyAmIChBY2Nl
c3NvciB8IEN1c3RvbUFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpICE9IHByb3RvdHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEVxdWl2YWxl
bmNlOiB7CisgICAgICAgIGlmICghYmFzZSB8fCBiYXNlLT5zdHJ1Y3R1cmUoKSAhPSBzdHJ1Y3R1
cmUpIHsKKyAgICAgICAgICAgIC8vIENvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgc2luY2Ug
d2UgY2Fubm90IHZlcmlmeSB0aGlzIG9uZSB3aXRob3V0IGhhdmluZyB0aGUKKyAgICAgICAgICAg
IC8vIG9iamVjdC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc29tZXdoYXQgcmFjeSwgYW5kIG1heWJlIG1v
cmUgcmlza3kgdGhhbiB3ZSB3YW50LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjQxCisgICAgICAgIAorICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpOworICAg
ICAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IGJhc2UtPmdldERpcmVjdChjdXJyZW50T2Zmc2V0
KTsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSByZXF1aXJlZFZhbHVlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBp
ZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEVx
dWl2YWxlbmNlOgorICAgICAgICByZXR1cm4gc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzU3RpbGxWYWxpZEFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgYmFzZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBhbiBpbXB1
cmUgcHJvcGVydHkgY2FuIGNhdXNlIGEgcHJvcGVydHkgdG8gYXBwZWFyLCBhbmQgY2FuIGFsc28K
KyAgICAvLyAic2hhZG93IiBhbiBleGlzdGluZyBKUyBwcm9wZXJ0eSBvbiB0aGUgc2FtZSBvYmpl
Y3QuIEhlbmNlIGl0IGFmZmVjdHMgYm90aCBwcmVzZW5jZSBhbmQKKyAgICAvLyBhYnNlbmNlLiBJ
dCBkb2Vzbid0IGFmZmVjdCBBYnNlbmNlT2ZTZXR0ZXIgYmVjYXVzZSBpbXB1cmUgcHJvcGVydGll
cyBhcmVuJ3QgZXZlciBzZXR0ZXJzLgorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQ
cmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3Qo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdoZW5WYWxpZCgKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBp
ZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICBjYXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHNvbWUgdmFyaWFudCBvZiBpc1Zh
bGlkIHJldHVybmVkIHRydWUsIHdoaWNoCisgICAgICAgIC8vIGltcGxpZXMgdGhhdCB3ZSBhbHJl
YWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBzdHJ1Y3R1cmUga25vd3Mgb2YgdGhlIHByb3BlcnR5LiBX
ZSBzaG91bGQKKyAgICAgICAgLy8gYWxzbyBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlIFN0cnVjdHVy
ZSBpcyBhIGNhY2hlYWJsZSBkaWN0aW9uYXJ5LCB3aGljaCBtZWFucyB3ZQorICAgICAgICAvLyBz
aG9sZG4ndCBoYXZlIGEgVE9DVE9VIHJhY2UgZWl0aGVyLgorICAgICAgICBSRUxFQVNFX0FTU0VS
VChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBXYXRjaHBvaW50
U2V0KiBzZXQ7CisgICAgICAgIHN3aXRjaCAoZWZmb3J0KSB7CisgICAgICAgIGNhc2UgTWFrZU5v
Q2hhbmdlczoKKyAgICAgICAgICAgIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVu
dFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVuc3VyZVdhdGNoYWJpbGl0eToKKyAgICAgICAgICAgIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVy
dHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoCisgICAgICAgICAgICAgICAgKkhlYXA6OmhlYXAo
c3RydWN0dXJlKS0+dm0oKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoIXNldC0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwg
YmFzZSkKKyAgICAgICAgJiYgaXNXYXRjaGFibGVXaGVuVmFsaWQoc3RydWN0dXJlLCBlZmZvcnQp
OworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUsIGJhc2UpCisgICAg
ICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9v
bCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAoreworICAgIGlmIChoYXNQ
cm90b3R5cGUoKSAmJiAhSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKQorICAgICAgICAmJiBy
ZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpLmlzQ2VsbCgpCisgICAg
ICAgICYmICFIZWFwOjppc01hcmtlZChyZXF1aXJlZFZhbHVlKCkuYXNDZWxsKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvcGVy
dHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYg
dHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkpCisgICAgICAgIHRyYWNr
ZWQuY2hlY2socHJvdG90eXBlKCkpOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkp
CisgICAgICAgIHRyYWNrZWQuY2hlY2socmVxdWlyZWRWYWx1ZSgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBjb25kaXRpb24pCit7Cisg
ICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246
OlByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIlByZXNlbmNlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAgICAgIG91
dC5wcmludCgiQWJzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiQWJzZW5j
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpF
cXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJFcXVpdmFsZW5jZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1By
b3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFByb3BlcnR5Q29uZGl0aW9uX2gKKyNkZWZpbmUgUHJvcGVydHlDb25kaXRp
b25faAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisKK2NsYXNzIFBy
b3BlcnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBQcmVz
ZW5jZSwKKyAgICAgICAgQWJzZW5jZSwKKyAgICAgICAgQWJzZW5jZU9mU2V0dGVyLAorICAgICAg
ICBFcXVpdmFsZW5jZSAvLyBBbiBhZGFwdGl2ZSB3YXRjaHBvaW50IG9uIHRoaXMgd2lsbCBiZSBh
IHBhaXIgb2Ygd2F0Y2hwb2ludHMsIGFuZCB3aGVuIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMs
IHdlIHdpbGwgc2V0IHRoZSByZXBsYWNlbWVudCB3YXRjaHBvaW50IG9uIHRoZSBuZXcgc3RydWN0
dXJlLgorICAgIH07CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6IG1f
dWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKFByZXNlbmNlKQorICAgIHsKKyAgICAgICAg
bWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRp
dGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV91aWQobnVs
bHB0cikKKyAgICAgICAgLCBtX2tpbmQoQWJzZW5jZSkKKyAgICB7CisgICAgICAgIG1lbXNldCgm
dSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0
aW9uIHByZXNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0
OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQ
cmVzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2Uub2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICByZXN1bHQudS5wcmVzZW5jZS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9u
IHByZXNlbmNlKAorICAgICAgICBWTSYsIEpTQ2VsbCosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBwcmVzZW5jZVdp
dGhvdXRCYXJyaWVyKHVpZCwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3Bl
cnR5Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24g
cmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBBYnNlbmNlOworICAgICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3Rv
dHlwZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFBy
b3BlcnR5Q29uZGl0aW9uIGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VX
aXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcigKKyAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlk
OworICAgICAgICByZXN1bHQubV9raW5kID0gQWJzZW5jZU9mU2V0dGVyOworICAgICAgICByZXN1
bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNl
dHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJp
ZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25k
aXRpb24gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9u
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9r
aW5kID0gRXF1aXZhbGVuY2U7CisgICAgICAgIHJlc3VsdC5lcXVpdmFsZW5jZS52YWx1ZSA9IEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgfQorICAgICAgICAKKyAgICBzdGF0aWMgUHJvcGVy
dHlDb25kaXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVy
KTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7
CisgICAgfQorICAgICAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFt
X3VpZCAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgCisgICAgS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdWlkOyB9CisgICAgCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZSB9OworICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzT2Zmc2V0KCkpOworICAg
ICAgICByZXR1cm4gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgfQorICAgIGJvb2wgaGFzQXR0cmli
dXRlcygpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IFByZXNlbmNlIH07Cisg
ICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFz
QXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiAhISp0aGlz
ICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQgPT0gQWJzZW5jZU9mU2V0dGVyKTsgfQor
ICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAg
fQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRo
aXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNSZXF1aXJlZFZhbHVlKCkpOworICAg
ICAgICByZXR1cm4gdS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0
cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5kKTsK
KyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVzZW5jZToKKyAgICAg
ICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAgICAgICAgIHJlc3VsdCAr
PSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgICAgIHJl
c3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFic2VuY2UucHJvdG90eXBl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVxdWl2YWxlbmNlLnZh
bHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eUNvbmRp
dGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91aWQgIT0gb3RoZXIubV91
aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tpbmQgIT0gb3Ro
ZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUucHJl
c2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0CisgICAgICAgICAgICAgICAg
JiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2VuY2UuYXR0cmlidXRlczsK
KyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAg
ICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJzZW5jZS5w
cm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgICAgICByZXR1cm4g
YS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNlLnZhbHVlOworICAgICAg
ICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBBYnNlbmNl
OworICAgIH0KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBj
bGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBp
c1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBK
U09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxp
ZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSBy
ZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9i
amVjdCBkZWZpbml0ZWx5IGhhcywgb3IgZGVmaW5pdGVseSBkb2VzIG5vdCBoYXZlLCB0aGUgcHJv
cGVydHkgcmlnaHQgbm93LgorICAgIC8vIElmIHRydWUsIHRoZW4gd2UgY291bGQgY29udGludWUg
dG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBieSBjaGVja2luZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUK
KyAgICAvLyBzdHJ1Y3R1cmUuIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlmIHRo
ZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndAorICAgIC8vIGd1YXJhbnRlZSB0aGUg
Y29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29uZGl0aW9uIG9uIGFuIG9i
amVjdCB0aGF0IG1heSBoYXZlCisgICAgLy8gaW1wdXJlIHByb3BlcnRpZXMuCisgICAgYm9vbCBp
c1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsK
KyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgY29uZGl0aW9uIGlzIG5vdCB3YXRjaGFi
bGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNoYWJsZSBieSBlbmFibGluZyB0aGUKKyAgICAvLyBh
cHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3IgZXhhbXBsZSwgcmVwbGFjZW1lbnQgd2F0Y2hwb2lu
dHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNvbWUKKyAgICAvLyBhY2Nlc3MgaXMgY2FjaGVkIG9u
IHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBtYWlubHkgdG8gc2F2ZSBz
cGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5IHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0
IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBpdCdzIGFsd2F5cyBzYWZlIHRvCisgICAgLy8gZW5h
YmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0IHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIG1haW4g
dGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmlsaXR5RWZmb3J0IHsKKyAgICAgICAgLy8gVGhpcyBp
cyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBjaGFuZ2UgdGhlIHN0YXRlIG9m
IGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAgLy8gb2JqZWN0LCBhbmQgaW1wbGllcyB0aGF0IGlm
IHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0byBiZSB3YXRjaGFibGUgdGhlbiB3ZSBkb24ndCBt
YWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJsZS4gVGhpcyBpcyBtYW5kYXRvcnkgaWYgY2FsbGlu
ZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBpcyBhbHNvIHNvbWV3aGF0CisgICAgICAgIC8vIHBy
ZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGluZyB3aGV0aGVyIHRvIHdhdGNoIGEgY29uZGl0aW9u
IGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgorICAgICAgICAvLyBub3QgZnJvbSBhIHdhdGNocG9p
bnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBzZWUgaWYgd2Ugc2hvdWxkIGFkYXB0KSwgc2luY2Ug
YQorICAgICAgICAvLyB3YXRjaHBvaW50IG5vdCBiZWluZyBpbml0aWFsaXplZCBmb3Igd2F0Y2hp
bmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRvbid0IGtub3cgZW5vdWdoCisgICAgICAgIC8vIHll
dCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8gd2F0Y2ggLS0gYXMgaW4sIHRoZSB0aGluZyBiZWlu
ZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAgICAgICAvLyBzdGFiaWxpemVkIHlldC4gV2UgcHJl
ZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBjb25kaXRpb24gd2lsbCBob2xkIGlmIGl0IGhhcyBi
ZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhvbGQgZm9yIGEgd2hpbGUgYWxyZWFkeS4KKyAgICAg
ICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAgCisgICAgICAgIC8vIERvIHdoYXQgaXQgdGFrZXMg
dG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5IGNhbiBiZSB3YXRjaGVkLCBpZiBkb2luZyBzbyBo
YXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNlcnZhYmxlIGVmZmVjdC4gRm9yIG5vdyB0aGlzIGp1
c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3VyZSB0aGF0IGEgcHJvcGVydHkKKyAgICAgICAgLy8g
cmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBlbmFibGVkIGlmIGl0IGhhZG4ndCBiZWVuIGVuYWJs
ZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlzCisgICAgICAgIC8vIGZyb20gSklUIHRocmVhZHMs
IHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcgd2F0Y2hwb2ludHMgaXMgbm90IHRocmVhZC1zYWZl
LgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxpdHkKKyAgICB9OworICAgIAorICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5
IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0
dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29s
IGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0
cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0g
TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mg
c3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRy
YW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBp
c1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRy
LCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBi
b29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBDdXJyZW50bHksIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBv
ZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAgfQorICAgIGJv
b2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gRXF1aXZhbGVuY2U7CisgICAgfQor
ICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlz
IGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAg
ICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIGJvb2wgaXNXYXRjaGFibGVXaGVuVmFsaWQoU3RydWN0dXJlKiwg
V2F0Y2hhYmlsaXR5RWZmb3J0KSBjb25zdDsKKworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3Vp
ZDsKKyAgICBLaW5kIG1fa2luZDsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOworICAgICAgICB9IHByZXNlbmNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgSlNPYmplY3QqIHByb3RvdHlwZTsKKyAgICAgICAgfSBhYnNlbmNlOworICAgICAgICBzdHJ1
Y3QgeworICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7CisgICAgICAgIH0gZXF1aXZh
bGVuY2U7CisgICAgfSB1OworfTsKKworc3RydWN0IFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGtleSkgeyBy
ZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25z
dCBQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGIpCisgICAg
eworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6
OlByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OlByb3BlcnR5Q29uZGl0aW9u
SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6UHJvcGVydHlDb25kaXRpb24+IDog
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShy
ZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw5IEBAIHB1YmxpYzoKICAg
ICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygp
IGNvbnN0OwogICAgIAorICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGNoZWNrcyBk
b24ndCBhY3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBleGFjdGx5IHRoaXMK
KyAgICAvLyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVjdHVyZSwgc28gbG9u
ZyBhcyB0aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBvbmUgYWJv
dXQgdGhlIHByb3BlcnR5IGJlaW5nIHN0b3JlZC4KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVy
ZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gbV9jb25zdGFudENoZWNrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5jcHAJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
MjQgKzQ2LDI5IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFN0cnVjdHUKIAog
dm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3Qg
RmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3du
IGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KLSAgICAvLyBUaGF0
IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhl
IHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmly
aW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0gICAgbV9ob2xkZXIuY29k
ZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAgaWYgKCFtX2tl
eS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgewor
ICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVtaXNlOiBzdHVi
IHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAgICAvLyBUaGF0IHdvcmtzLCBi
ZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxp
c3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9yIGZpcmluZyBp
cyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAgICAgICBtX2hvbGRlci5jb2Rl
QmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5z
aXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKQogewogfQogCi1TdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFk
ZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFkKTsKIH0KIAogU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpl
bnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJlZlB0cjxXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9jayogY29kZUJsb2NrLAotICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7CiAgICAgaWYgKCFo
b2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykpOwpAQCAtNzIsNyArNzcsNyBA
QCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvCiAgICAgICAgIEFTU0VS
VChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwogICAgIH0KICAgICAKLSAgICBy
ZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAgcmV0dXJuIGhvbGRlclJlZi0+
YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludF9o
CiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNo
cG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSArNDcsMTEgQEAgY2xhc3MgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCi0gICAg
ICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQotICAgICAgICA6IG1f
aG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4gbmV4
dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAgIDogbV9rZXkoa2V5KQorICAg
ICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25leHQoV1RGOjptb3ZlKG5leHQp
KQogICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKIAogcHJpdmF0
ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKICAgICBXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpAQCAtODMsMTEgKzgxLDExIEBA
IHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKCk7CiAg
ICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgp
OworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgc3RhdGljIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9p
bnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xk
ZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKik7CisgICAgICAg
IENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNv
bnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg2Nzk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgsMTIgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxm
OgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdD
b25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNl
dCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
c2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKICAgICBjYXNlIGFjY2Vz
c191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhhdmUgdG8gcmVs
ZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgsMTAgQEAgYm9vbCBTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90
cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9k
aXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5w
cmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1
LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFw
Ojppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAg
IHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHUucHV0QnlJZFRy
YW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Jl
cGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3
ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8gUHV0QnlJZCoK
IAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
U3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQdXRCeUlkVHJh
bnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNEaXJlY3QpCiAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVj
dDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAg
ICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwg
cHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9u
LmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlv
bi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKICAg
ICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc1LDExIEBAIHN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgIH0KICAg
ICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2lu
dChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIHJldHVy
biBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdh
dGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0aGlzKTsKKyAg
ICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRpdGlvbik7CiAgICAg
fQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpAQCAtMjE3LDIzICsyMTgsMTIgQEAgc3Ry
dWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3Ry
dWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAgICAgICB9IGdldEJ5SWRTZWxmOwogICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJh
c2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVy
ZT4gcHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVjdDsKLSAgICAg
ICAgfSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJh
cnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdy
aXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgdW5zaWdu
ZWQgY291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgOiAxOwotICAgICAgICB9
IGdldEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0QnlJZExpc3Q7CiAgICAgICAgIHN0cnVj
dCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJldmlvdXNTdHJ1
Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gc3RydWN0dXJl
OwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Cisg
ICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7CiAgICAgICAgIH0gcHV0QnlJZFRyYW5z
aXRpb247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0
cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6
OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9rZXkoa2V5
KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGtl
eS53YXRjaGluZ1JlcXVyaWVzU3RyY3V0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIWtleS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50
KCkpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFs
KGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAoIW1fa2V5LmlzV2F0Y2hhYmxl
KFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGlmIChE
Rkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgi
LCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICBvdXQucHJpbnQoIkFk
YXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgICAgICAKKyAg
ICAgICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7Cisg
ICAgICAgIAorICAgICAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgICAgICBQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0
aW9uLCAmZGV0YWlsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5v
YmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKyNk
ZWZpbmUgREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJX
YXRjaHBvaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworcHVibGlj
OgorICAgIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOwor
ICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJl
dHVybiBtX2tleTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5h
bChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlz
aW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9v
bCBpc0RpcmVjdCk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImKTsKKyAgICB2b2lkIGVtaXRQcm9wZXJ0eUNoZWNrcyhjb25zdCBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yJiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKIAogICAgIHZvaWQg
cHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJDYWNoZXMoKTsKQEAgLTcwNywx
MSArNzA3LDIwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0aFN0
cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0ZSB0byBlbWl0UHJvcGVydHlDaGVj
aywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3VycmVudGx5LAorICAgICAgICAvLyB0
aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFByb3BlcnR5Q2hlY2soKSBzaW5jZSB3
ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKKyAgICAgICAgLy8gb2JqZWN0J3Mgc3RydWN0
dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nvc250YW50LgogICAgICAgICBOb2Rl
KiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgYWRkVG9HcmFw
aChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVy
ZSkpLCBvYmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CiAgICAgfQogICAg
IAorICAgIHZvaWQgZW1pdFByb3BlcnR5Q2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2dyYXBoLndhdGNoUHJlc2VydmF0aW9uT2ZQcm9wZXJ0eShvYmplY3QsIHVpZCwgc3RydWN0dXJl
KSkKKyAgICAgICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhvYmplY3QsIHN0
cnVjdHVyZSk7CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25X
aXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5tX2xvY2spOwpAQCAtMjI5MCwxMCArMjI5OSwxMCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlPZmZzZXQoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6ZW1pdENoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2
ZWN0b3IpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHJvcGVydHlDaGVja3MoY29uc3QgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQo
KSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgZW1pdFByb3BlcnR5Q2hlY2sodmVj
dG9yW2ldLmNvbnN0YW50KCksIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKSwgdWlkKTsKIH0KIAogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKQEAgLTIzMjIsOCArMjMzMSwxMSBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAvLyAxKSBFbWl0IHBy
b3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwgY2hhaW5zLiBUaGlzIGNvdWxkIHNvcnQg
b2YgbWF5YmUgbm90IGJlCiAgICAgICAgIC8vICAgIG9wdGltYWwsIGlmIHRoZXJlIGlzIHNvbWUg
cmFyZWx5IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNoYWluIHRoYXQgcmVxdWlyZXMgYSBsb3QKICAg
ICAgICAgLy8gICAgb2YgY2hlY2tzIGFuZCB0aG9zZSBjaGVja3MgYXJlIG5vdCB3YXRjaHBvaW50
YWJsZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBnZXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykKLSAgICAgICAgICAgIGVtaXRDaGVja3Mo
Z2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsg
dmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICBlbWl0UHJvcGVydHlDaGVja3MoCisgICAg
ICAgICAgICAgICAgZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCks
CisgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJd
KTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0QnlP
ZmZzZXQKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVs
dGlHZXRCeU9mZnNldERhdGEuYWRkKCk7CkBAIC0yMzQ0LDcgKzIzNTYsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgICAgIAogICAgIGFkZFRvR3Jh
cGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50
LnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOwogICAgIAotICAgIGVtaXRDaGVja3ModmFyaWFudC5j
b25zdGFudENoZWNrcygpKTsKKyAgICBlbWl0UHJvcGVydHlDaGVja3ModmFyaWFudC5jb25zdGFu
dENoZWNrcygpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogCiAg
ICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQogICAgICAgICBiYXNlID0gd2Vha0pTQ29u
c3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwpAQCAtMjQzOCw3ICsyNDUwLDkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5k
ZXgtLTspIHsKICAgICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhd
LmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZW1pdENoZWNrcyhwdXRCeUlkU3RhdHVzW3Zh
cmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgICAgICAgICAgZW1pdFByb3Bl
cnR5Q2hlY2tzKAorICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRl
eF0uY29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlm
aWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKQEAgLTI0NjMsNyArMjQ3Nyw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dEJ5SWQoCiAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewogICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgZW1pdENoZWNr
cyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICBlbWl0UHJvcGVydHlDaGVja3Mo
CisgICAgICAgICAgICB2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCksCisgICAgICAgICAgICBtX2dy
YXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogCiAgICAgICAgIEFTU0VSVCh2
YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgCkBAIC0yNTE5LDcgKzI1MzUsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBhZGRUb0dyYXBoKAogICAg
ICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2
YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICAKLSAgICAgICAgZW1pdENoZWNr
cyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICBlbWl0UHJvcGVydHlDaGVja3Mo
dmFyaWFudC5jb25zdGFudENoZWNrcygpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmll
ck51bWJlcl0pOwogICAgICAgICAKICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KQogICAgICAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFz
ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNw
cAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksOSBAQCB2b2lkIENvbW1vbkRh
dGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVy
ZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsK
ICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCisgICAgICAg
IHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmgiCiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5l
Q2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05OCw2ICs5OSw3IEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOwog
ICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8U3RydWN0dXJlPj4gd2Vha1N0cnVjdHVyZVJlZmVyZW5j
ZXM7CiAgICAgQmFnPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gd2F0Y2hwb2ludHM7
CisgICAgQmFnPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gYWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRz
OwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw5
IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgQXJyYXlCdWZmZXJW
aWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNB
cnJheUJ1ZmZlclZpZXcqIHZpZXcsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBDb21tb25EYXRhJiBjb21t
b24pCiB7CisgICAgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5h
ZGQoY29kZUJsb2NrKTsKICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQqIG5ldXRl
cmluZ1dhdGNocG9pbnQgPQogICAgICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQ6
OmNyZWF0ZSgqY29kZUJsb2NrLT52bSgpKTsKICAgICBuZXV0ZXJpbmdXYXRjaHBvaW50LT5zZXQo
KS0+YWRkKHdhdGNocG9pbnQpOwpAQCAtNDUsMTAgKzQ2LDE3IEBAIHZvaWQgQXJyYXlCdWZmZXJW
aWV3V2F0Y2hwb2ludEFkYXB0b3I6OmEKIH0KIAogdm9pZCBJbmZlcnJlZFZhbHVlQWRhcHRvcjo6
YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZh
bHVlLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJ
bmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBDb21tb25EYXRhJiBjb21tb24pCiB7CiAgICAg
Y29kZUJsb2NrLT5hZGRDb25zdGFudChpbmZlcnJlZFZhbHVlKTsgLy8gRm9yIGNvbW1vbiB1c2Vy
cywgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBvciBub3QuIElmIHJlZmVy
ZW5jZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgotICAgIGluZmVycmVkVmFsdWUt
PmFkZCh3YXRjaHBvaW50KTsKKyAgICBpbmZlcnJlZFZhbHVlLT5hZGQoY29tbW9uLndhdGNocG9p
bnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRBZGFwdG9yOjphZGQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3sKKyAgICBrZXkub2Jq
ZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgKKyAgICAgICAgY29t
bW9uLmFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29kZUJsb2NrKSk7CiB9
CiAKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CkBAIC03NCw2
ICs4MiwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJyCiAgICAg
bV9idWZmZXJWaWV3cy5hZGRMYXppbHkodmlldyk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9p
bnRzOjphZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAg
ICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlm
ICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtODgsNiArMTAxLDcgQEAgdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5saW5lU2V0cy5yZWFs
bHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRk
KGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9p
bnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTk1LDcgKzEwOSw4IEBAIGJvb2wgRGVzaXJl
ZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0aWxs
VmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAg
ICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYnVmZmVy
Vmlld3MuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxs
VmFsaWQoKQorICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlk
KCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg2
Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJJbmZl
cnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKQEAgLTQxLDE1ICs0
MiwxNSBAQCBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0cnVjdCBHZW5l
cmljU2V0QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIFQgc2V0LCBX
YXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgVCBzZXQsIENvbW1vbkRhdGEmIGNvbW1vbikKICAgICB7Ci0gICAgICAgIHJldHVy
biBzZXQtPmFkZCh3YXRjaHBvaW50KTsKKyAgICAgICAgcmV0dXJuIHNldC0+YWRkKGNvbW1vbi53
YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGhhc0Jl
ZW5JbnZhbGlkYXRlZChUIHNldCkgeyByZXR1cm4gc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsg
fQogfTsKIAogc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBh
ZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMg
dm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIENvbW1vbkRhdGEmKTsKICAgICBz
dGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBpbmZlcnJlZFZhbHVlLT5oYXNCZWVuSW52YWxpZGF0
ZWQoKTsKQEAgLTU3LDEyICs1OCwxOCBAQCBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3Igewog
fTsKIAogc3RydWN0IEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yIHsKLSAgICBzdGF0
aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBXYXRjaHBvaW50Kik7
CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgQ29t
bW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChKU0FycmF5QnVm
ZmVyVmlldyogdmlldykKICAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gIXZpZXctPmxlbmd0
aCgpOwotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuICF2aWV3LT5sZW5ndGgoKTsKKyAgICB9Cit9OworCitzdHJ1Y3Qg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRk
KENvZGVCbG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgQ29tbW9uRGF0YSYp
OworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFrZXkuaXNTdGlsbFZhbGlk
KCk7CiAgICAgfQogfTsKIApAQCAtODcsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYg
c2V0IDogbV9zZXRzKQotICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBj
b21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworICAgICAgICAgICAgQWRhcHRvcjo6
YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24pOwogICAgICAgICAKICAgICAgICAgbV9yZWFsbHlB
ZGRlZCA9IHRydWU7CiAgICAgfQpAQCAtMTIyLDYgKzEyOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJyYXlC
dWZmZXJWaWV3Kik7CiAgICAgCisgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24n
dCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZQorICAgIC8vIEdyYXBoOjphZGRBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQsIHdoaWNoIGRvZXMgdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwu
CisgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAg
ICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIAogICAgIHZvaWQgcmVhbGx5
QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEmKTsKQEAgLTE0NCwxMiArMTU1LDE3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsK
ICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dh
dGNoZWQoa2V5KTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHM8V2F0Y2hwb2ludFNldCo+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNo
cG9pbnRzPElubGluZVdhdGNocG9pbnRTZXQqPiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rl
c2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1f
aW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVm
ZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdz
OworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24s
IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVT
ZXRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNiArODQ4
LDQ5IEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVGbGEKICAgICB9CiB9
CiAKK2Jvb2wgR3JhcGg6OmFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMu
YWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAgaWYgKGtleS5jb25kaXRpb24oKSA9PSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFk
ZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXpp
bHkoa2V5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaDo6d2F0Y2hQcmVzZW5j
ZU9mUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAgIHJl
dHVybiBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpwcmVzZW5jZShvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKSk7
Cit9CisKK2Jvb2wgR3JhcGg6OndhdGNoQWJzZW5jZU9mUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKK3sKKyAgICBy
ZXR1cm4gYWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZShvYmplY3QsIHVpZCwgcHJvdG90eXBlKSk7Cit9CisKK2Jv
b2wgR3JhcGg6OndhdGNoUHJlc2VydmF0aW9uT2ZQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGws
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgaWYg
KCFvYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAKKyAgICBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgIAorICAgIGlm
IChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgcmV0dXJuIHdhdGNoQWJzZW5jZU9m
UHJvcGVydHkob2JqZWN0LCB1aWQsIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkpOworICAg
IAorICAgIHJldHVybiB3YXRjaFByZXNlbmNlT2ZQcm9wZXJ0eShvYmplY3QsIHVpZCwgb2Zmc2V0
LCBhdHRyaWJ1dGVzKTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVz
c0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0
ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9i
eXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4Njc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSwyNCBAQCBwdWJs
aWM6CiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxh
bi5pZGVudGlmaWVyczsgfQogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7
IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNl
IGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkLgorICAgIGJvb2wgYWRkQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCisg
ICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2YgdGhpcyBjb21waWxhdGlvbiBvbiB0aGUgZ2l2ZW4g
b2JqZWN0IGhhdmluZyB0aGUgZ2l2ZW4gcHJvcGVydHkgd2l0aAorICAgIC8vIHRoZSBnaXZlbiBv
ZmZzZXQgYW5kIGF0dHJpYnV0ZXMuIFJldHVybnMgZmFsc2UgaWYgd2F0Y2hpbmcgZm9yIHRoaXMg
aXMgaW1wb3NzaWJsZS4KKyAgICBib29sIHdhdGNoUHJlc2VuY2VPZlByb3BlcnR5KAorICAgICAg
ICBKU09iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0LCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKTsKKyAgICAKKyAgICAvLyBHYXRlIHRoZSB2YWxpZGl0eSBvZiB0aGlz
IGNvbXBpbGF0aW9uIG9uIHRoZSBnaXZlbiBvYmplY3QgbGFja2luZyB0aGUgZ2l2ZW4gcHJvcGVy
dHkuCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB3YXRjaGluZyBmb3IgdGhpcyBpcyBpbXBvc3Np
YmxlLgorICAgIGJvb2wgd2F0Y2hBYnNlbmNlT2ZQcm9wZXJ0eSgKKyAgICAgICAgSlNPYmplY3Qq
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICAKKyAgICAvLyBHYXRlIHRoZSB2YWxpZGl0
eSBvZiB0aGlzIGNvbXBpbGF0aW9uIG9uIHRoZSBnaXZlbiBvYmplY3QgZWl0aGVyIGhhdmluZywg
b3IgbGFja2luZywgdGhlCisgICAgLy8gcHJvcGVydHkgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBn
aXZlbiBzdHJ1Y3R1cmUgY2xhaW1zIHRvIGhhdmUgKG9yIGxhY2spIHRoZSBwcm9wZXJ0eS4KKyAg
ICBib29sIHdhdGNoUHJlc2VydmF0aW9uT2ZQcm9wZXJ0eSgKKyAgICAgICAgSlNDZWxsKiwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworCiAgICAgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg2Nzk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3Qg
RnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQogewotICAg
IGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9p
bnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZHNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSkKICAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVy
dHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgIAogICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwpAQCAtMTMyLDQ3ICsxMzIsMzAg
QEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRp
YyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQorc3RhdGljIHZvaWQg
Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChvYmpl
Y3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0
aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0
aGlzIGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBB
c3NlcnQKLSAgICAgICAgICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAgICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gYnJhbmNoU3RydWN0dXJl
KAotICAgICAgICAgICAgICAgIGppdCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5lZmZlY3RpdmVX
YXRjaHBvaW50KTsKLSAgICAgICAgICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KKyAgICBp
ZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSkgeworICAgICAgICBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0
aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
Ci0gICAgICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJl
KSk7CisgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAK
LXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHBy
b3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxs
KCkpOwotICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJv
dG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Citz
dGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgewor
ICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0
aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7
CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgdGFyZ2V0KQpAQCAtMjk2LDExICsyNzksMTIgQEAgc3RhdGljIEZ1bmN0
aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRT
dHViKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisg
ICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVBy
b3h5LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVs
IHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0
LmFyZVN0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKKyAgICAK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CiAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzID0gSlNWYWx1ZVJlZ3MoCkBAIC0zNDYsMzMgKzMzMCwyNSBAQCBzdGF0aWMgYm9vbCBn
ZW5lcmF0ZUJ5SWRTdHViKAogICAgIH0KIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQ
cm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkKICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAog
ICAgIGlmICh3YXRjaHBvaW50U2V0KQogICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQoc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAgIFN0cnVjdHVyZSogY3VyclN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsgCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBp
ZiAoY2hhaW4pIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4t
PmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsr
aXQpIHsKLSAgICAgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+
cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9T
dHJ1Y3R1cmUgPSBwcm90b09iamVjdC0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBpZiAocHJv
dG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRz
KCkpCi0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAg
ICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBw
cm90b09iamVjdCwgcHJvdG9TdHJ1Y3R1cmUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQs
Ci0gICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
IGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKCFw
cm90b09iamVjdCB8fCBwcm90b09iamVjdC0+c3RydWN0dXJlKCkgPT0gY3VyclN0cnVjdHVyZSk7
Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICBjb25k
aXRpb25TZXQsIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNo
R1BSKTsKICAgICAKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgaWYgKGNvbmRp
dGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Cisg
ICAgZWxzZQorICAgICAgICBjdXJyU3RydWN0dXJlID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29u
ZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOwogICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0
V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIG9mZnNldCk7CisgICAgCiAgICAg
R1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIGlmIChraW5kICE9
IEdldFVuZGVmaW5lZCkgewotICAgICAgICBpZiAoY2hhaW4pIHsKKyAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGNsb2Ji
ZXJlZCBzY3JhdGNoR1BSIGVhcmxpZXIsIHNvIHdlIGhhdmUgdG8gcmVsb2FkIGZyb20gYmFzZUdQ
UiB0byBnZXQgdGhlIHRhcmdldC4KICAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5
KQogICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIGJhc2VGb3JHZXRHUFIpOwpAQCAt
NjI3LDkgKzYwMyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFYK
ICAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9Ci0gICAgQVNTRVJUKCFzdHJ1Y3R1
cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAgIGlmICh0eXBlSW5mby5o
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVy
dHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICBy
ZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7CkBAIC04MjcsMjEgKzgwMiwyMiBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgIHNpemVf
dCBjb3VudCA9IDA7CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0
aW9uU2V0OwogICAgIAogICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkg
IT0gYmFzZVZhbHVlKSB7CiAgICAgICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CiAKICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAg
ICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNz
KGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKAotICAgICAg
ICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0
KTsKLSAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJl
LT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgCisgICAgICAgIG9mZnNldCA9IGNvbmRp
dGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwogICAgIH0KICAgICAKICAgICBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJv
bShzdHViSW5mbyk7CkBAIC04NTIsNyArODI4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUJ1aWxkR2V0QnlJRAogICAgIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmU7CiAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICBleGVj
LCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90
eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIAorICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBp
ZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBvZmZzZXQsIAog
ICAgICAgICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNl
dCgpLCAKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsK
QEAgLTg3MSw3ICs4NDcsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRC
eUlECiAgICAgCiAgICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4sIGNvdW50KSk7CisgICAgICAgIGNv
bmRpdGlvblNldCkpOwogICAgIAogICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwogICAgIApAQCAtOTkzLDI2ICs5NjksMjgg
QEAgc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1
cmUoRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgYm9vbCBl
bWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVj
dHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAorICAgIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5k
IHB1dEtpbmQsCisgICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogewogICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVu
dCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgb2xkU3Ry
dWN0dXJlID0gc3RydWN0dXJlOwogICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8
IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQcm9wZXJ0
eU9mZnNldCBwcm9wZXJ0eU9mZnNldDsKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0
dXJlLCBpZGVudC5pbXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsKIAogICAgIGlmICghc3RydWN0
dXJlIHx8ICFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSB8fCAhc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTa2lwIG9w
dGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhh
dmUKICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgogICAgIGlmIChH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQogICAg
ICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBTa2lw
IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVj
dHVyZSBoYXMKQEAgLTEwMjAsMTQgKzk5OCwxMyBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0
VHJhbnNpdGlvblN0dWJBCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIElt
cGxlbWVudCBpdCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMwOTE0CiAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobm9ybWFsaXplUHJvdG90eXBl
Q2hhaW4oZXhlYywgc3RydWN0dXJlKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0g
c3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgLy8gZW1pdFB1dFRyYW5zaXRpb25TdHViCisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGly
ZWN0KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5U2V0dGVyTWlzcyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJ
bmZvLnN0dWJSb3V0aW5lOwpAQCAtMTA4MywxNyArMTA2MCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUq
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG9sZFN0cnVj
dHVyZSkpOwogICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAg
b2xkU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgICAgIAotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3IgKFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsg
KytpdCkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UjEpOwotICAgICAgICB9Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25z
KAorICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1
YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCkBAIC0xMjI4LDcgKzExOTYsNyBAQCBzdGF0aWMgU3Ry
dWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRv
ci5kaWRSZXVzZVJlZ2lzdGVycygpKQpAQCAtMTI1Niw4ICsxMjI0LDggQEAgc3RhdGljIFN0cnVj
dHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2Nr
KCktPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAgICAg
ICAgIHN0cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gb2xkU3RydWN0dXJlOworICAgIAorICAgIHJl
dHVybiB0cnVlOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTEyODEsMTIg
KzEyNDksMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAg
IGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7
CiAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5
KSB7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5z
aXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkK
KyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICghZW1p
dFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHVi
SW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4
ZWMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY29kZUJsb2NrKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAogICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCkBAIC0x
Mjk0LDcgKzEyNjEsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlE
CiAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBz
dHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQg
PT0gRGlyZWN0KTsKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJl
LCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQpAQCAtMTMxMiwyMCArMTI3
OSwyMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAg
ICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAgICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKIAotICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
bG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBp
ZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJh
c2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFBy
b3RvdHlwZUNoYWluKQorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3Qu
YmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgZXhl
Yywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLSAgICAgICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihleGVjKTsKLSAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlz
dDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5l
cmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1
c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZv
LCBjb25kaXRpb25TZXQsCiAgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51
bGxwdHIsCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSksCkBAIC0xMzM2LDcgKzEzMDUsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNj
ZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNz
OjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1
Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJv
dXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3Rv
bVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CkBAIC0xMzgwLDE3ICsxMzQ5LDE2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWls
ZFB1dEJ5SWQKICAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUgdG8gcmVjdXJzaW9u
LgogCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0
aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLQotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1
Y3R1cmUpIAorICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBp
ZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4o
ZXhlYyk7CiAgICAgICAgICAgICBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwog
ICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAogICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nl
c3M6OnRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0
cnVjdHVyZSwgY29uZGl0aW9uU2V0LAogICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkp
OwogCiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDIzLDIxICsxMzkxLDI0IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCiAgICAgICAgICYmIHN0dWJJbmZv
LnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNo
YWluID0gMDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZSAh
PSBzbG90LmJhc2UoKSkgewotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVD
aGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIHByb3BlcnR5
TmFtZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBl
Q2hhaW4pCisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAg
ICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgK
KyAgICAgICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgcHJvcGVy
dHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90
b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9m
ZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVk
T2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0
OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBz
dHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAg
ICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xv
dCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBr
aW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNv
bmRpdGlvblNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0
ciwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCkBAIC0xNDQ4LDcgKzE0MTks
NyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxp
c3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxl
U2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21T
ZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xv
dC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAg
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBAIC0xNDg3LDExICsxNDU4LDE1IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAK
LSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90
QmFzZSA9IHdhc0ZvdW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVf
dCBjb3VudCA9ICFmb3VuZFNsb3RCYXNlIHx8IGZvdW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAg
ICAgICBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVy
ZSwgZm91bmRTbG90QmFzZSwgaWRlbnQsIG9mZnNldElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291
bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Qu
c2xvdEJhc2UoKSAhPSBiYXNlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICBleGVj
LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZQorICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eU1pc3MoZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAg
CiAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3Q7CkBAIC0xNTE2LDcgKzE0OTEsNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
UmVwYXRjaEluKAogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgfQogICAg
IAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4o
ZXhlYyk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAKICAg
ICB7CkBAIC0xNTQ3LDE4ICsxNTIxLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJl
cGF0Y2hJbigKICAgICAgICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgpKQogICAgICAgICAgICAg
c2xvdC53YXRjaHBvaW50U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9j
aykpOwogCi0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAg
ICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVy
ZSA9IHByb3RvdHlwZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b1N0cnVjdHVyZSwg
ZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAgIGZh
aWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAg
ICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBz
dHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAgY3VyclN0cnVj
dHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQorICAgICAgICBjaGVja09iamVjdFByb3BlcnR5
Q29uZGl0aW9ucygKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2soKSwg
c3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAgICAgIAog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3Vs
dEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
cmV2aXNpb24gMTg2Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsMTkgQEAgcHVibGljOgogICAgIGJv
b2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBOb25l
RGljdGlvbmFyeUtpbmQ7IH0KICAgICBib29sIGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgY29u
c3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSA9PSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kOyB9
CiAgIAotICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHsgcmV0dXJuIGRp
Y3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZCAmJiAhdHlwZUluZm8oKS5w
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKTsgfQorICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBV
bmNhY2hlZERpY3Rpb25hcnlLaW5kCisgICAgICAgICAgICAmJiAhdHlwZUluZm8oKS5wcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICAgICAgJiYgISh0eXBlSW5mby5oYXNJbXB1cmVH
ZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dh
dGNocG9pbnRzKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKQorICAgICAgICAgICAgJiYgdHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlT
bG90KCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRj
aHBvaW50cygpOworICAgIH0KIAogICAgIC8vIFdlIHVzZSBTbG93UGF0aCBpbiBHZXRCeUlkU3Rh
dHVzIGZvciBzdHJ1Y3R1cmVzIHRoYXQgbWF5IGdldCBuZXcgaW1wdXJlIHByb3BlcnRpZXMgbGF0
ZXIgdG8gcHJldmVudAogICAgIC8vIERGRyBmcm9tIGlubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IHNpbmNlIHN0cnVjdHVyZXMgZG9uJ3QgdHJhbnNpdGlvbiB3aGVuIGEgbmV3IGltcHVyZSBwcm9w
ZXJ0eSBhcHBlYXJzLgpAQCAtMjAyLDcgKzIxNCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiB0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpOwogICAgIH0K
LQorICAgIAogICAgIC8vIFR5cGUgYWNjZXNzb3JzLgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkg
Y29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJldHVy
biBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBpc09i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODY3OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTksNiArNTE5LDcg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsK
IAogICAgIHZvaWQgcmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRl
bnRpZmllciYsIFdhdGNocG9pbnQqKTsKKyAgICAKICAgICAvLyBGSVhNRTogVXNlIEF0b21pY1N0
cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlmaWVyLgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgU3RyaW5nJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257024</attachid>
            <date>2015-07-17 23:33:57 -0700</date>
            <delta_ts>2015-07-18 13:40:03 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>129997</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY5ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODU0LDYgKzQ4NTgsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25z
dCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAg
LCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlv
blNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RG
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5SWRWYXJp
YW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zm
c2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlmIChjaGFp
biAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50
ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3Rh
bnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRCeUlkVmFy
aWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50JiBHZXRC
eUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAg
ICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29uc3RhbnRD
aGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90
aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0
aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5p
cXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03MiwxNCAr
NjcsMTQgQEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJl
dHVybiAqdGhpczsKIH0KIAotU3RydWN0dXJlU2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0
dXJlKCkgY29uc3QKK0pTT2JqZWN0KiBHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSgpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVTZXQoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvciht
X2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0
cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICAvLyBUaGlzIGN1cnJlbnRseSBh
c3N1bWVzIHRoYXQgR2V0QnlJZFZhcmlhbnQgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHNlbGYgaGl0
cyBhbmQgcHJvdG90eXBlCisgICAgLy8gaGl0cy4gV2hlbiB3ZSBzdXBwb3J0IG1pc3NlcywgdGhp
cyBzaG91bGQgYmUgc21hcnQgZW5vdWdoIHRvIHJldHVybiBudWxscHRyIGluc3RlYWQgb2YKKyAg
ICAvLyBjcmFzaGluZyBpbiBzbG93QmFzZUNvbmRpdGlvbigpLgorICAgIGlmIChtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2Nv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpOwogfQogCiBib29sIEdldEJ5
SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
aAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgR2V0
QnlJZFZhcmlhbnQgewogcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50KAogICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAotICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsK
ICAgICAKICAgICB+R2V0QnlJZFZhcmlhbnQoKTsKQEAgLTU1LDkgKzU1LDEwIEBAIHB1YmxpYzoK
ICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVy
ZVNldDsgfQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1
Y3R1cmVTZXQ7IH0KLSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25z
dGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0KLSAgICBKU09i
amVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRlQmFzZTsgfQot
ICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CisKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KKyAgICAKKyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0
OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9
CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAtNzAsOCArNzEsNyBAQCBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBHZXRCeUlkU3RhdHVzOwogICAgIAogICAgIFN0cnVjdHVyZVNldCBt
X3N0cnVjdHVyZVNldDsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3Rh
bnRDaGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29m
ZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0
dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlm
ICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoSlNWYWx1ZShtX29iamVjdCksICI6ICIs
IG1fY29uZGl0aW9uKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGls
bFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZEFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLnZhbGlk
aXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9v
bCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYg
KCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxs
VmFsaWQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVm
Zm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxl
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBlZmZvcnQpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGUoc3RydWN0dXJlLCBlZmZvcnQp
OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZShQcm9wZXJ0
eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hh
YmxlKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2Jq
ZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtX2NvbmRpdGlv
bi5pc1N0aWxsTGl2ZSgpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxp
ZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7
CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHRyYWNrZWQuY2hl
Y2sobV9vYmplY3QpOworICAgIG1fY29uZGl0aW9uLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2Vk
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbl9oCisjZGVmaW5lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVy
ZW5jZXM7CisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSB0b2tlbikKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQor
ICAgICAgICAsIG1fY29uZGl0aW9uKHRva2VuKQorICAgIHsKKyAgICB9CisgICAgCisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24oSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbikKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwg
bV9jb25kaXRpb24oY29uZGl0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAg
ICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRo
b3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7IAorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJl
c2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIo
b3duZXIpOworICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVp
ZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSh1aWQsIHByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBh
YnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3Qs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNl
V2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFy
cmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
SlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICBy
ZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyV2l0
aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0
dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlT2ZT
ZXR0ZXJXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJh
cnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0
Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJp
ZXIodWlkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZSgKKyAgICAgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIo
b3duZXIpOworICAgICAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcihvYmplY3Qs
IHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuICFtX2NvbmRpdGlvbjsgfTsKKyAgICAKKyAgICBKU09iamVjdCogb2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvbjsgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0
aW9uOjpLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5raW5kKCk7IH0KKyAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkudWlk
KCk7IH0KKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhh
c09mZnNldCgpOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkub2Zmc2V0KCk7IH0KKyAgICB1bnNpZ25lZCBoYXNBdHRyaWJ1dGVzKCkgY29u
c3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzQXR0cmlidXRlcygpOyB9CisgICAgdW5zaWduZWQg
YXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmF0dHJpYnV0ZXMoKTsgfQor
ICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUHJv
dG90eXBlKCk7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29u
ZGl0aW9uKCkucHJvdG90eXBlKCk7IH0KKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNSZXF1aXJlZFZhbHVlKCk7IH0KKyAgICBKU1ZhbHVl
IHJlcXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5yZXF1aXJlZFZhbHVl
KCk7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhh
c2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkgKyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIu
bV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29uZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9u
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hl
Y2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2Yg
bG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3Jl
IGluIHRoZSBjb25jdXJyZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAg
Ly8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUg
Y29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQg
eW91IHZhbGlkYXRlZCAoaS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBD
aGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkg
d29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxW
YWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQg
dG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdU
b1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgdmFsaWRp
dHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIC8v
IENoZWNrcyBpZiB0aGUgb2JqZWN0IGRlZmluaXRlbHkgaGFzLCBvciBkZWZpbml0ZWx5IGRvZXMg
bm90IGhhdmUsIHRoZSBwcm9wZXJ0eSByaWdodCBub3cuCisgICAgLy8gSWYgdHJ1ZSwgdGhlbiB3
ZSBjb3VsZCBjb250aW51ZSB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IGJ5IGNoZWNraW5nIGlmIHRo
ZSBvYmplY3QgaGFzIHRoZQorICAgIC8vIHN0cnVjdHVyZS4gTWF5IGNvbnNlcnZhdGl2ZWx5IHJl
dHVybiBmYWxzZSwgaWYgdGhlIG9iamVjdCBhbmQgc3RydWN0dXJlIGFsb25lIGRvbid0CisgICAg
Ly8gZ3VhcmFudGVlIHRoZSBjb25kaXRpb24uIFRoaXMgaGFwcGVucyBmb3IgYW4gQWJzZW5jZSBj
b25kaXRpb24gb24gYW4gb2JqZWN0IHRoYXQgbWF5IGhhdmUKKyAgICAvLyBpbXB1cmUgcHJvcGVy
dGllcy4KKyAgICBib29sIGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29s
IGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdz
IHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0
cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJs
eSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosCisgICAg
ICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRp
dGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0
Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0
OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxk
IGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBv
aW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3Ry
dWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9
IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0
Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0g
UHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wg
d2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVyaWVzU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVz
UmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25k
aXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQor
ICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlz
IGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAg
ICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRp
dGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhh
c2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgK
KyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBE
ZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRz
PEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2Jq
ZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlv
bi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAg
IH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktp
bmQoCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAg
ICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNv
bmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9
CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpz
bG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
cmVzdWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29u
ZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAg
IH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxW
YWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsVmFsaWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFyZVN0aWxsVmFsaWRBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0
aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0
Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDog
KnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi52YWxpZGl0eVJlcXVyaWVzSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVT
dGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxs
TGl2ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworbmFtZXNwYWNlIHsKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZ2VuZXJhdGVD
b25kaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24pCit7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAg
IHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2Vu
Y2U6IHsKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsK
KyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6cHJlc2VuY2Uodm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRy
aWJ1dGVzKTsKKyAgICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogewor
ICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAg
ICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQ
cm90b3R5cGUoKSk7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VP
ZlNldHRlcjogeworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2Vu
Y2VPZlNldHRlcigKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+
c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgfQorfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAor
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQp
Cit7CisgICAgQVNTRVJUKCEhcHJvdG90eXBlID09IChjb25kaXRpb24gPT0gUHJvcGVydHlDb25k
aXRpb246OlByZXNlbmNlKSk7CisgICAgCisgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uPiBjb25kaXRpb25zOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aXNQcm94eSgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Ry
dWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYyk7CisgICAgICAgIAorICAgICAgICBpZiAo
di5pc051bGwoKSkgeworICAgICAgICAgICAgaWYgKCFwcm90b3R5cGUpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6
OmludmFsaWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGpzQ2FzdDxKU09iamVjdCo+KHYpOworICAgICAgICBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0
cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3Npbmcg
YSBwcm90b3R5cGUgcmVwZWF0ZWRseSwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQgc2hvdWxkIG5v
dCBiZQorICAgICAgICAvLyB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KKyAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5E
aWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBvYmplY3QpOworICAgICAgICAKKyAgICAgICAgUHJvcGVy
dHlDb25kaXRpb246OktpbmQgdGhpc0NvbmRpdGlvbktpbmQ7CisgICAgICAgIGlmIChraW5kID09
IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSAmJiBvYmplY3QgIT0gcHJvdG90eXBlKQorICAg
ICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBraW5kOworICAg
ICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbmV3Q29uZGl0aW9uID0KKyAg
ICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIHRoaXND
b25kaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFuZXdDb25kaXRpb24gfHwgIW5ld0NvbmRpdGlv
bi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAg
ICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAg
ICAgIAorICAgICAgICBjb25kaXRpb25zLmFwcGVuZChuZXdDb25kaXRpb24pOworICAgICAgICAK
KyAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdC4KKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNp
Z25lZCBwcmVzZW5jZUNvdW50ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0aW9ucykgeworICAgICAgICAgICAgc3dpdGNo
IChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9u
OjpQcmVzZW5jZToKKyAgICAgICAgICAgICAgICBwcmVzZW5jZUNvdW50Kys7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNl
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByZXNlbmNlQ291bnQgPT0gMSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlvbnMpCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IGtpbmQpOworICAgIH0gfQorICAg
IAorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9uRW1wdHkoY29uZGl0
aW9ucyk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVy
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRp
b25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVp
ZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIs
IHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcik7Cit9CisKK09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBvdG90eXBlUHJvcGVydHlI
aXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZt
LCBvd25lciwgZXhlYywgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQsIFByb3BlcnR5Q29u
ZGl0aW9uOjpQcmVzZW5jZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5oIgorI2luY2xkdWUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBB
biBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUg
c2V0IG9mIGFkZGl0aW9uYWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Ig
c29tZSBoZWFwIGFjY2VzcyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93
aW5nCisvLyBpbnRlcmVzdGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBz
cGVjaWFsIGNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBo
ZWFwIGFjY2VzcyBpcyBuZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3Mg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0KCkgeyB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGludmFsaWQoKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBub25FbXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlD
b25kaXRpb24+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAg
ICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgICpyZXN1bHQubV9k
YXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0
YSB8fCAhbV9kYXRhLT5pc0VtcHR5KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YTsKKyAgICB9CisgICAgCisgICAg
dHlwZWRlZiBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiogaXRlcmF0b3I7CisgICAgCisg
ICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+YmVnaW4o
KTsKKyAgICB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
bV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX2Rh
dGEtPmVuZCgpOworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JP
YmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24gZm9yQ29uZGl0aW9uS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisgICAg
CisgICAgLy8gSWYgdGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90eXBlIGhpdCwg
dGhlbiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNvbmRpdGlvbiBv
biB0aGUgcHJvdG90eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0
LCBvZmZzZXQsIGFuZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5cGUuIFRoaXMg
d2lsbCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFByZXNlbmNlCisg
ICAgLy8gaW4gdGhlIHNldCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2VuY2UuCisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAK
KyAgICBib29sIGFyZVN0aWxsVmFsaWQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxsVmFsaWRB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgbmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgYXJlU3RpbGxMaXZlKCkg
Y29uc3Q7CisgICAgCisgICAgLy8gSGVscGVycyBmb3IgdXNpbmcgdGhpcyBpbiBhIHVuaW9uLgor
ICAgIHZvaWQqIHJlbGVhc2VSYXdQb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDx2b2lkKj4obV9kYXRhLmxlYWtSZWYoKSk7CisgICAgfQorICAgIHN0YXRpYyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBhZG9wdFJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikK
KyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVy
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBmcm9tUmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9kYXRhID0gc3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gSW50ZXJuYWxseSwgdGhp
cyByZXByZXNlbnRzIEludmFsaWQgdXNpbmcgYSBwb2ludGVyIHRvIGEgRGF0YSB0aGF0IGhhcyBh
biBlbXB0eSB2ZWN0b3IuCisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBt
b3JlIGNvbXBhY3QgYnkgaGF2aW5nIGl0IGludGVybmFsbHkgdXNlIGEgdmVjdG9yIHRoYXQganVz
dCBoYXMKKyAgICAvLyB0aGUgbm9uLXVpZCBwb3J0aW9uIG9mIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLCBhbmQgdGhlbiByZXF1aXJpbmcgdGhhdCB0aGUgY2FsbGVycyBvZiBhbGwKKyAgICAvLyBv
ZiB0aGUgQVBJcyBzdXBwbHkgdGhlIHVpZC4KKyAgICAKKyAgICBjbGFzcyBEYXRhIDogUmVmQ291
bnRlZDxEYXRhPiB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAg
ICBEYXRhKCkgeyB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25k
aXRpb24+IHZlY3RvcjsKKyAgICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9
OworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9w
ZXJ0eU1pc3MoCisgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQo
CisgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJv
dG90eXBlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTQgKzM3
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAog
ICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjaGFpbkNvdW50KQorICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
KQogICAgIDogbV90eXBlKHR5cGUpCiAgICAgLCBtX2NoYWluQ291bnQoY2hhaW5Db3VudCkKICAg
ICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQorICAgICwgbV9jb25kaXRpb25T
ZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKIHsKLSAg
ICBpZiAoY2hhaW4pCi0gICAgICAgIG1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwogfQog
CiBHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCkBAIC03MSw3ICs3MCw3IEBAIGJvb2wg
R2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKIHsKICAgICBpZiAobV9zdHJ1Y3R1
cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgp
KSkKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzU3RpbGxMaXZlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2VhayhyZXBhdGNoQnVmZmVy
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShyZXZpc2lvbiAx
ODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MywxMyArNTMsMTIgQEAgcHVibGljOgogICAgIAog
ICAgIEdldEJ5SWRBY2Nlc3MoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAs
IG1fY2hhaW5Db3VudCgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygK
ICAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qID0gMCwgdW5z
aWduZWQgY2hhaW5Db3VudCA9IDApOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKICAgICAKICAgICB+R2V0
QnlJZEFjY2VzcygpOwogICAgIApAQCAtNzIsOCArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsg
fQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hh
aW4uZ2V0KCk7IH0KLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9j
aGFpbkNvdW50OyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgSklU
U3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkBAIC05MSw5ICs4OSw4IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKICAgICAKICAgICBBY2Nlc3NU
eXBlIG1fdHlwZTsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CiAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWlu
PiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9uU2V0OyAv
LyBGSVhNRSB3aGF0IGFib3V0IGJhcnJpZXJzPwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
bV9zdHViUm91dGluZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4
Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBQdXRC
eUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAgICAgIHJlc3VsdC5tX3R5
cGUgPSBUcmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20o
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAg
IHJlc3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0
aW9uLnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25T
ZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAorICAgICAg
ICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwogICAg
ICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCkBAIC02NCw2ICs2NSw5IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJ
ZEFjY2Vzczo6ZnJvbVN0cnVjdHUKIAogYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikgY29uc3QKIHsKKyAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIGlmICghSGVhcDo6aXNN
YXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQpAQCAtNzQsMTUgKzc4LDExIEBAIGJvb2wgUHV0
QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9j
aGFpbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU2V0dGVyOgogICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgogICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
Myw3ICs1Myw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAgICAg
OiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAgICAg
ewogICAgIH0KICAgICAKQEAgLTYyLDE0ICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2Vs
bCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAg
ICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAg
ICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAg
ICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNp
dGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0
cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBu
ZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFp
bik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAg
ICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRp
bmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1LDggKzk0LDcg
QEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisgICAgICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAgIFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFzc1Jl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0LDEwICsxMDIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1
bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAgcmVz
dWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewotICAgICAgICAg
ICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAgICAgICAgcmVz
dWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmVzdWx0
Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0b21T
ZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1
YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAgIH0KICAgICAK
LSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJl
dHVybiBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkp
OwotICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25k
aXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25z
dAogICAgIHsKQEAgLTE3OCw4ICsxNjMsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5cGUgbV90
eXBlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3Bl
cnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJh
Y2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgUHJvcGVydHlDb25k
aXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7
CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgb3V0LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNo
IChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAi
LCBtX29mZnNldCwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAg
ICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5cGUgIiwgSlNPYmplY3QocHJvdG90eXBlKCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5w
cmludCgiIHdpdGggIiwgSlNWYWx1ZTo6ZW5jb2RlKHJlcXVpcmVkVmFsdWUoKSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSkg
Y29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQ
cmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9
IG9mZnNldCgpIHx8IGN1cnJlbnRBdHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEFic2VuY2U6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpICE9IGludmFsaWRPZmZzZXQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBjYXNlIEFi
c2VuY2VPZlNldHRlcjogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGN1
cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKCkpICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50QXR0cmli
dXRlcyAmIChBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZSgpICE9IHByb3RvdHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAgIGlmICghYmFzZSB8fCBiYXNlLT5zdHJ1Y3R1cmUo
KSAhPSBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIENvbnNlcnZhdGl2ZWx5IHJldHVybiBm
YWxzZSwgc2luY2Ugd2UgY2Fubm90IHZlcmlmeSB0aGlzIG9uZSB3aXRob3V0IGhhdmluZyB0aGUK
KyAgICAgICAgICAgIC8vIG9iamVjdC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc29tZXdoYXQgcmFjeSwg
YW5kIG1heWJlIG1vcmUgcmlza3kgdGhhbiB3ZSB3YW50LgorICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjQxCisgICAgICAgIAorICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKCkpOworICAgICAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IGJhc2UtPmdldERpcmVjdChj
dXJyZW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSByZXF1aXJlZFZhbHVl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToK
KyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICByZXR1cm4gc3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QKK3sKKyAgICBpZiAoIWlz
U3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgYmFz
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUg
dGhhdCBhbiBpbXB1cmUgcHJvcGVydHkgY2FuIGNhdXNlIGEgcHJvcGVydHkgdG8gYXBwZWFyLCBh
bmQgY2FuIGFsc28KKyAgICAvLyAic2hhZG93IiBhbiBleGlzdGluZyBKUyBwcm9wZXJ0eSBvbiB0
aGUgc2FtZSBvYmplY3QuIEhlbmNlIGl0IGFmZmVjdHMgYm90aCBwcmVzZW5jZSBhbmQKKyAgICAv
LyBhYnNlbmNlLiBJdCBkb2Vzbid0IGFmZmVjdCBBYnNlbmNlT2ZTZXR0ZXIgYmVjYXVzZSBpbXB1
cmUgcHJvcGVydGllcyBhcmVuJ3QgZXZlciBzZXR0ZXJzLgorICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFs
ZW5jZToKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Q
cm9wZXJ0eVNsb3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdoZW5WYWxpZCgK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29u
c3QKK3sKKyAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5J
bnZhbGlkYXRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoICht
X2tpbmQpIHsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHNvbWUgdmFy
aWFudCBvZiBpc1ZhbGlkIHJldHVybmVkIHRydWUsIHdoaWNoCisgICAgICAgIC8vIGltcGxpZXMg
dGhhdCB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBzdHJ1Y3R1cmUga25vd3Mgb2YgdGhl
IHByb3BlcnR5LiBXZSBzaG91bGQKKyAgICAgICAgLy8gYWxzbyBoYXZlIHZlcmlmaWVkIHRoYXQg
dGhlIFN0cnVjdHVyZSBpcyBhIGNhY2hlYWJsZSBkaWN0aW9uYXJ5LCB3aGljaCBtZWFucyB3ZQor
ICAgICAgICAvLyBzaG9sZG4ndCBoYXZlIGEgVE9DVE9VIHJhY2UgZWl0aGVyLgorICAgICAgICBS
RUxFQVNFX0FTU0VSVChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7CisgICAgICAgIAorICAgICAg
ICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgICAgIHN3aXRjaCAoZWZmb3J0KSB7CisgICAgICAg
IGNhc2UgTWFrZU5vQ2hhbmdlczoKKyAgICAgICAgICAgIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVy
dHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVuc3VyZVdhdGNoYWJpbGl0eToKKyAgICAgICAgICAgIHNldCA9IHN0cnVj
dHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoCisgICAgICAgICAgICAgICAg
KkhlYXA6OmhlYXAoc3RydWN0dXJlKS0+dm0oKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXNldC0+aXNTdGlsbFZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFi
bGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSwgYmFzZSkKKyAgICAgICAgJiYgaXNXYXRjaGFibGVXaGVuVmFsaWQoc3RydWN0
dXJlLCBlZmZvcnQpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVm
Zm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUs
IGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0
KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAorewor
ICAgIGlmIChoYXNQcm90b3R5cGUoKSAmJiAhSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKQor
ICAgICAgICAmJiByZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpLmlz
Q2VsbCgpCisgICAgICAgICYmICFIZWFwOjppc01hcmtlZChyZXF1aXJlZFZhbHVlKCkuYXNDZWxs
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2Vk
UmVmZXJlbmNlcyYgdHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkpCisg
ICAgICAgIHRyYWNrZWQuY2hlY2socHJvdG90eXBlKCkpOworICAgIAorICAgIGlmIChoYXNSZXF1
aXJlZFZhbHVlKCkpCisgICAgICAgIHRyYWNrZWQuY2hlY2socmVxdWlyZWRWYWx1ZSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBjb25k
aXRpb24pCit7CisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIEpTQzo6UHJvcGVy
dHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIlByZXNlbmNlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6
CisgICAgICAgIG91dC5wcmludCgiQWJzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgIG91dC5w
cmludCgiQWJzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjpFcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJFcXVpdmFsZW5jZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFByb3BlcnR5Q29uZGl0aW9uX2gKKyNkZWZpbmUgUHJv
cGVydHlDb25kaXRpb25faAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7
CisKK2NsYXNzIFByb3BlcnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgewor
ICAgICAgICBQcmVzZW5jZSwKKyAgICAgICAgQWJzZW5jZSwKKyAgICAgICAgQWJzZW5jZU9mU2V0
dGVyLAorICAgICAgICBFcXVpdmFsZW5jZSAvLyBBbiBhZGFwdGl2ZSB3YXRjaHBvaW50IG9uIHRo
aXMgd2lsbCBiZSBhIHBhaXIgb2Ygd2F0Y2hwb2ludHMsIGFuZCB3aGVuIHRoZSBzdHJ1Y3R1cmUg
dHJhbnNpdGlvbnMsIHdlIHdpbGwgc2V0IHRoZSByZXBsYWNlbWVudCB3YXRjaHBvaW50IG9uIHRo
ZSBuZXcgc3RydWN0dXJlLgorICAgIH07CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb24oKQor
ICAgICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKFByZXNlbmNlKQorICAg
IHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAgICAKKyAgICBQ
cm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAg
IDogbV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tpbmQoQWJzZW5jZSkKKyAgICB7CisgICAg
ICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFBy
b3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25k
aXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBQcmVzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2Uub2Zmc2V0ID0g
b2Zmc2V0OworICAgICAgICByZXN1bHQudS5wcmVzZW5jZS5hdHRyaWJ1dGVzID0gYXR0cmlidXRl
czsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3Bl
cnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYsIEpTQ2VsbCosIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVy
biBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcihVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVy
dHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBBYnNlbmNlOworICAgICAgICByZXN1bHQudS5hYnNlbmNlLnByb3Rv
dHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0
dXJuIGFic2VuY2VXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmll
cigKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gQWJzZW5jZU9mU2V0dGVyOwor
ICAgICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9u
IGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVy
V2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAg
ICByZXN1bHQubV9raW5kID0gRXF1aXZhbGVuY2U7CisgICAgICAgIHJlc3VsdC5lcXVpdmFsZW5j
ZS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgfQorICAgICAgICAKKyAgICBz
dGF0aWMgUHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIo
dWlkLCB2YWx1ZSk7CisgICAgfQorICAgICAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgCisgICAgS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisgICAgCisgICAgYm9vbCBoYXNPZmZzZXQo
KSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZSB9OworICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzT2Zm
c2V0KCkpOworICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgfQorICAgIGJv
b2wgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IFBy
ZXNlbmNlIH07CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaGFzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2UuYXR0
cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7IHJl
dHVybiAhISp0aGlzICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQgPT0gQWJzZW5jZU9m
U2V0dGVyKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5wcm90
b3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9CisgICAgSlNWYWx1ZSBy
ZXF1aXJlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNSZXF1aXJlZFZh
bHVlKCkpOworICAgICAgICByZXR1cm4gdS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhh
c2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obV9raW5kKTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVz
ZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAgICAg
ICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFic2Vu
Y2UucHJvdG90eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2YWxl
bmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVx
dWl2YWxlbmNlLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQ
cm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91aWQg
IT0gb3RoZXIubV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICht
X2tpbmQgIT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAgICAg
cmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0CisgICAg
ICAgICAgICAgICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2VuY2Uu
YXR0cmlidXRlczsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VP
ZlNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVy
LnUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAg
ICAgICByZXR1cm4gYS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNlLnZh
bHVlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1fa2lu
ZCA9PSBBYnNlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdz
IHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQu
CisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChT
dHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRv
IGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9T
dHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICAKKyAgICAvLyBDaGVj
a3MgaWYgdGhlIG9iamVjdCBkZWZpbml0ZWx5IGhhcywgb3IgZGVmaW5pdGVseSBkb2VzIG5vdCBo
YXZlLCB0aGUgcHJvcGVydHkgcmlnaHQgbm93LgorICAgIC8vIElmIHRydWUsIHRoZW4gd2UgY291
bGQgY29udGludWUgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBieSBjaGVja2luZyBpZiB0aGUgb2Jq
ZWN0IGhhcyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndAorICAgIC8vIGd1
YXJhbnRlZSB0aGUgY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29uZGl0
aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlCisgICAgLy8gaW1wdXJlIHByb3BlcnRpZXMu
CisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxs
cHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgY29uZGl0aW9uIGlz
IG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNoYWJsZSBieSBlbmFibGluZyB0
aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3IgZXhhbXBsZSwgcmVwbGFjZW1l
bnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNvbWUKKyAgICAvLyBhY2Nlc3Mg
aXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBtYWlu
bHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5IHByb3BlcnRpZXMgb3IgcHJv
cGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBpdCdzIGFsd2F5cyBzYWZlIHRv
CisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0IHRoaXMgaXMgY2FsbGVkIGZy
b20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmlsaXR5RWZmb3J0IHsKKyAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBjaGFuZ2Ug
dGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAgLy8gb2JqZWN0LCBhbmQgaW1w
bGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0byBiZSB3YXRjaGFibGUgdGhl
biB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJsZS4gVGhpcyBpcyBtYW5kYXRv
cnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBpcyBhbHNvIHNvbWV3aGF0Cisg
ICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGluZyB3aGV0aGVyIHRvIHdhdGNo
IGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgorICAgICAgICAvLyBub3QgZnJv
bSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBzZWUgaWYgd2Ugc2hvdWxkIGFk
YXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5vdCBiZWluZyBpbml0aWFsaXpl
ZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRvbid0IGtub3cgZW5vdWdoCisg
ICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8gd2F0Y2ggLS0gYXMgaW4sIHRo
ZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAgICAgICAvLyBzdGFiaWxpemVk
IHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBjb25kaXRpb24gd2lsbCBob2xk
IGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhvbGQgZm9yIGEgd2hpbGUgYWxy
ZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAgCisgICAgICAgIC8vIERvIHdo
YXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5IGNhbiBiZSB3YXRjaGVkLCBp
ZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNlcnZhYmxlIGVmZmVjdC4gRm9y
IG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3VyZSB0aGF0IGEgcHJvcGVydHkK
KyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBlbmFibGVkIGlmIGl0IGhhZG4n
dCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlzCisgICAgICAgIC8vIGZyb20g
SklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcgd2F0Y2hwb2ludHMgaXMgbm90
IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxpdHkKKyAgICB9OworICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZv
cmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBv
biB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2lu
dC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
CisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwgV2F0Y2hhYmls
aXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkg
c2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUu
CisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNPYmplY3QqIGJh
c2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2VzKSBjb25zdDsK
KyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50bHksIHRoaXMgaXMgcmVxdWly
ZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAgcmV0dXJuICEhKnRoaXM7Cisg
ICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gRXF1aXZhbGVu
Y2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZv
bHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25z
dDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJl
bmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaXNXYXRjaGFibGVXaGVuVmFsaWQo
U3RydWN0dXJlKiwgV2F0Y2hhYmlsaXR5RWZmb3J0KSBjb25zdDsKKworICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiBtX3VpZDsKKyAgICBLaW5kIG1fa2luZDsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB9IHByZXNlbmNlOworICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZTsKKyAgICAgICAgfSBhYnNlbmNlOwor
ICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7CisgICAg
ICAgIH0gZXF1aXZhbGVuY2U7CisgICAgfSB1OworfTsKKworc3RydWN0IFByb3BlcnR5Q29uZGl0
aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvcGVydHlDb25kaXRp
b24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAor
ICAgICAgICBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgUHJvcGVydHlDb25kaXRp
b24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6UHJvcGVydHlD
b25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6UHJvcGVydHlDb25kaXRpb24+
IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBQcm9wZXJ0eUNvbmRpdGlv
bl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw5IEBA
IHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAgIGJvb2wg
bWFrZXNDYWxscygpIGNvbnN0OwogICAgIAorICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHRo
ZXNlIGNoZWNrcyBkb24ndCBhY3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIG9iamVjdCBrZWVwcyBl
eGFjdGx5IHRoaXMKKyAgICAvLyBzdHJ1Y3R1cmUuIEl0IGNhbiBoYXZlIHdoYXRldmVyIHN0cnVj
dHVyZSwgc28gbG9uZyBhcyB0aGF0IHN0cnVjdHVyZSBhZ3JlZXMgd2l0aCB0aGUgZ2l2ZW4KKyAg
ICAvLyBvbmUgYWJvdXQgdGhlIHByb3BlcnR5IGJlaW5nIHN0b3JlZC4KICAgICBjb25zdCBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9jb25zdGFudENoZWNrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDYsMjQgKzQ2LDI5IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQq
IFN0cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50
ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkg
Y2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4K
LSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVz
IGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZl
cnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0gICAg
bV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7Cisg
ICAgaWYgKCFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hh
YmlsaXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24g
ZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAgICAvLyBU
aGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20g
dGhlIHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwg
Zm9yIGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAgICAgICBt
X2hvbGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJl
KCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKQogewogfQog
Ci1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJl
U3R1YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJuIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFkKTsKIH0K
IAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVy
ZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJlZlB0cjxX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9jayogY29k
ZUJsb2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7
CiAgICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVmKG5ldyBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykpOwpAQCAt
NzIsNyArNzcsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvCiAg
ICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwogICAgIH0K
ICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAgcmV0dXJu
IGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg2OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2lu
Y2x1ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSArNDcsMTEg
QEAgY2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQot
ICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYg
aG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAgIDogbV9r
ZXkoa2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25leHQoV1RG
Ojptb3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKICAgICBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpAQCAtODMs
MTEgKzgxLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRk
V2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdh
dGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAg
c3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFu
ZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
Kik7CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2so
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgsMTIgQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1h
bDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJh
bnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFjY2Vz
c19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKICAg
ICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0
IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgsMTAgQEAg
Ym9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
dHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlk
VHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFw
Ojppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAg
ICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkK
KyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVj
dHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAg
IHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAg
Ly8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGlu
aXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJl
dmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAo
aXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm8gewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5
SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1Bv
aW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCAr
MTc1LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVl
OwogICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCog
YWRkV2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKICAgICB7CiAg
ICAgICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVy
ZW5jZUFuZEFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2Nr
LCB0aGlzKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRp
dGlvbik7CiAgICAgfQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpAQCAtMjE3LDIzICsy
MTgsMTIgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAgICAgICB9IGdldEJ5
SWRTZWxmOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxT
dHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJC
YXNlPFN0cnVjdHVyZT4gcHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAgICAgYm9vbCBpc0Rp
cmVjdDsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAg
ICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAg
ICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgOiAx
OwotICAgICAgICB9IGdldEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAg
IFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0QnlJZExpc3Q7CiAg
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
cHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVy
ZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFp
bj4gY2hhaW47CisgICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7CiAgICAgICAgIH0g
cHV0QnlJZFRyYW5zaXRpb247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJh
cnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQo
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9j
aykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9u
OjpFcXVpdmFsZW5jZSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNo
YWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5z
aXRpb25XYXRjaHBvaW50KCZtX3N0cnVjdHVyZVdhdGNocG9pbnQpOworICAgIAorICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IG1fa2V5LT5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENvbmN1
cnJlbnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXkub2Jq
ZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZz
ZXQpOworICAgIHNldC0+YWRkV2F0Y2hwb2ludCgmbV9wcm9wZXJ0eVdhdGNocG9pbnQpOworfQor
Cit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6ZmlyZShjb25z
dCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgLy8gT25lIG9mIHRoZSB3YXRjaHBvaW50cyBm
aXJlZCwgYnV0IHRoZSBvdGhlciBvbmUgZGlkbid0LiBNYWtlIHN1cmUgdGhhdCBuZWl0aGVyIG9m
IHRoZW0gYXJlCisgICAgLy8gaW4gYW55IHNldCBhbnltb3JlLiBUaGlzIHNpbXBsaWZpZXMgdGhp
bmdzIGJ5IGFsbG93aW5nIHVzIHRvIHJlaW5zdGFsbCB0aGUgd2F0Y2hwb2ludHMKKyAgICAvLyB3
aGVyZXZlciBmcm9tIHNjcmF0Y2guCisgICAgaWYgKG1fc3RydWN0dXJlV2F0Y2hwb2ludC5pc09u
TGlzdCgpKQorICAgICAgICBtX3N0cnVjdHVyZVdhdGNocG9pbnQucmVtb3ZlKCk7CisgICAgaWYg
KG1fcHJvcGVydHlXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fcHJvcGVydHlXYXRj
aHBvaW50LnJlbW92ZSgpOworICAgIAorICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0
eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fz
c2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hw
b2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJs
b2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAg
IG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7
CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEo
KSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAm
ZGV0YWlsKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0
YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9G
KAorICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fc3Ry
dWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwp
OworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6UHJv
cGVydHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0
YWlsKQoreworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAg
ICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3Byb3BlcnR5V2F0
Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJX
YXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9r
ZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBT
dHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAg
dmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7Cisg
ICAgfTsKKyAgICBjbGFzcyBQcm9wZXJ0eVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7
CisgICAgcHVibGljOgorICAgICAgICBQcm9wZXJ0eVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFp
bCYpIG92ZXJyaWRlOworICAgIH07CisgICAgCisgICAgdm9pZCBmaXJlKGNvbnN0IEZpcmVEZXRh
aWwmKTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnQgbV9zdHJ1Y3R1cmVX
YXRjaHBvaW50OworICAgIFByb3BlcnR5V2F0Y2hwb2ludCBtX3Byb3BlcnR5V2F0Y2hwb2ludDsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LndhdGNoaW5nUmVxdXJpZXNTdHJj
dXR1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgha2V5Lndh
dGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7Cit9CisKK3ZvaWQgQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2tleS5pc1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJl
KCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkK
K3sKKyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdh
dGNoYWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAg
IGRhdGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0
aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgfQor
ICAgIAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFkYXB0YXRp
b24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0cmluZ0Zp
cmVEZXRhaWwgZGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAgIG1fY29k
ZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2Zp
bGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9p
bnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5OyB9CisgICAgCisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRT
dGF0dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0KTsKLSAgICB2b2lkIGVtaXRDaGVja3MoY29u
c3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYpOworICAgIHZvaWQgZW1pdFByb3BlcnR5
Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImLCBVbmlxdWVkU3RyaW5n
SW1wbCopOwogCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVh
ckNhY2hlcygpOwpAQCAtNzA3LDExICs3MDcsMjAgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2Rl
KiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJvdXRl
IHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIEJ1dCBjdXJy
ZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJvbSB1c2luZyBlbWl0UHJv
cGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRoZQorICAgICAg
ICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEgd2Vha0pTQ29z
bnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25zdGFudChvYmplY3Qp
OwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAgICByZXR1cm4gb2Jq
ZWN0Tm9kZTsKICAgICB9CiAgICAgCisgICAgdm9pZCBlbWl0UHJvcGVydHlDaGVjayhKU0NlbGwq
IG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisg
ICAgeworICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hQcmVzZXJ2YXRpb25PZlByb3BlcnR5KG9i
amVjdCwgdWlkLCBzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVj
dHVyZUNoZWNrKG9iamVjdCwgc3RydWN0dXJlKTsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRl
ZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
CiAgICAgewogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CkBAIC0yMjkwLDEwICsyMjk5LDEwIEBAIE5v
ZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQcm9w
ZXJ0eUNoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZl
Y3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNr
KHZlY3RvcltpXS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCkpOworICAgICAgICBl
bWl0UHJvcGVydHlDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVy
ZSgpLCB1aWQpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAt
MjMyMiw4ICsyMzMxLDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAg
ICAgICAgIC8vIDEpIEVtaXQgcHJvdG90eXBlIHN0cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFp
bnMuIFRoaXMgY291bGQgc29ydCBvZiBtYXliZSBub3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1h
bCwgaWYgdGhlcmUgaXMgc29tZSByYXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhh
dCByZXF1aXJlcyBhIGxvdAogICAgICAgICAvLyAgICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNr
cyBhcmUgbm90IHdhdGNocG9pbnRhYmxlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJ
bmRleCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KQotICAg
ICAgICAgICAgZW1pdENoZWNrcyhnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRD
aGVja3MoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGVtaXRQ
cm9wZXJ0eUNoZWNrcygKKyAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRl
eF0uY29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJz
KClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyAy
KSBFbWl0IGEgTXVsdGlHZXRCeU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSog
ZGF0YSA9IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKQEAgLTIzNDQsNyAr
MjM1Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAg
ICAgICAgCiAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7CiAgICAgCi0gICAg
ZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgIGVtaXRQcm9wZXJ0eUNo
ZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXSk7CiAKICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAg
ICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7CkBAIC0y
NDM4LDcgKzI0NTAsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZh
cmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlk
U3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hl
Y2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAg
ICAgICAgICAgICBlbWl0UHJvcGVydHlDaGVja3MoCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5
SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpLAorICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIApAQCAtMjQ2Myw3ICsyNDc3LDkgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50
OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2Up
OwotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAg
IGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAgICAgIHZhcmlhbnQuY29uc3RhbnRDaGVja3Mo
KSwKKyAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7
CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1
MTksNyArMjUzNSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAg
ICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICBDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAg
IAotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAg
IGVtaXRQcm9wZXJ0eUNoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRl
bnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAgICAgICAgIAogICAgICAgICBpZiAodmFy
aWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQo
dmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4
OSw5IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAg
ICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJl
Y292ZXJ5LmNvbnN0YW50KCkpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZvciAoQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRjaHBvaW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50cykKKyAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2Vz
KHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4
Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNs
dWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQu
aCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIK
QEAgLTk4LDYgKzEwMCw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2Vs
bD4+IHdlYWtSZWZlcmVuY2VzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8U3RydWN0dXJlPj4g
d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgQmFnPENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludD4gd2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dD4gYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBhZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7
CiAgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkg
QEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZp
ZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0Fy
cmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1v
bikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFk
ZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVy
aW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6
Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgp
LT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMjMgQEAgdm9pZCBBcnJheUJ1ZmZlclZp
ZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjph
ZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFs
dWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElu
ZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBj
b2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJz
LCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJl
bmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+
YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2lu
dHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIHN3aXRjaCAo
a2V5LmtpbmQoKSkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgor
ICAgICAgICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cy5h
ZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFkZChrZXks
IGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBEZXNp
cmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiArODgsMTEg
QEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVmZmVy
Vmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRk
TGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgbV9hZGFw
dGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNo
cG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVj
dHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTg4LDYgKzEwNyw3IEBAIHZvaWQgRGVzaXJlZFdh
dGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNv
ZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29k
ZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxv
Y2ssIGNvbW1vbkRhdGEpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChj
b2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJl
U3RpbGxWYWxpZCgpIGNvbnN0CkBAIC05NSw3ICsxMTUsOCBAQCBib29sIERlc2lyZWRXYXRjaHBv
aW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgcmV0dXJuIG1fc2V0cy5hcmVTdGlsbFZhbGlkKCkK
ICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lu
ZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFy
ZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCkK
KyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4Njk4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAj
aW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3Lmgi
CisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBv
aW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIApAQCAtNDEsMTUgKzQyLDE1IEBAIGNs
YXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdlbmVyaWNTZXRBZGFw
dG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgVCBzZXQsIFdhdGNocG9pbnQq
IHdhdGNocG9pbnQpCisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBU
IHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNldC0+YWRk
KHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0LT5hZGQoY29tbW9uLndhdGNocG9pbnRz
LmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRh
dGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9CiB9OwogCiBz
dHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29s
IGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwpAQCAt
NTcsMTIgKzU4LDE4IEBAIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7CiB9OwogCiBzdHJ1
Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0
aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7
CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAg
ICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2Nr
KiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3Rh
dGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1dhdGNoYWJsZSgpOwogICAgIH0K
IH07CiAKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8mIHNldCA6IG1fc2V0
cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uLndhdGNo
cG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxv
Y2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQgPSB0cnVl
OwogICAgIH0KQEAgLTEyMiw2ICsxMjksMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5
KEluZmVycmVkVmFsdWUqKTsKICAgICB2b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyop
OwogICAgIAorICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlz
IGRpcmVjdGx5LiBVc2UKKyAgICAvLyBHcmFwaDo6YWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LCB3aGljaCBkb2VzIHRoZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsLgorICAgIHZvaWQg
YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9v
bCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxv
Y2sqLCBDb21tb25EYXRhJik7CkBAIC0xNDQsMTIgKzE1NSwxNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAgfQorICAg
IGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7
CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPFdh
dGNocG9pbnRTZXQqPiBtX3NldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmxp
bmVXYXRjaHBvaW50U2V0Kj4gbV9pbmxpbmVTZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFs
dWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBB
cnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKKyAgICBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ4LDYgKzg0OCw0OSBAQCB2b2lk
IEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCitib29sIEdy
YXBoOjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1dhdGNoYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShr
ZXkub2JqZWN0KCkpOworICAgIGlmIChrZXkuY29uZGl0aW9uKCkgPT0gUHJvcGVydHlDb25kaXRp
b246OkFic2VuY2UpCisgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5
LnByb3RvdHlwZSgpKTsKKyAgICBtX3BsYW4ud2F0Y2hwb2ludHMuYWRkTGF6aWx5KGtleSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGg6OndhdGNoUHJlc2VuY2VPZlByb3BlcnR5
KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKK3sKKyAgICByZXR1cm4gYWRkQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6cHJlc2VuY2Uob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcykpOworfQorCitib29s
IEdyYXBoOjp3YXRjaEFic2VuY2VPZlByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIGFkZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OmFic2VuY2Uob2JqZWN0LCB1aWQsIHByb3RvdHlwZSkpOworfQorCitib29sIEdyYXBoOjp3
YXRjaFByZXNlcnZhdGlvbk9mUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU09iamVjdCogb2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIGlmICghb2JqZWN0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0Owor
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgCisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAKKyAgICBpZiAob2Zmc2V0ID09
IGludmFsaWRPZmZzZXQpCisgICAgICAgIHJldHVybiB3YXRjaEFic2VuY2VPZlByb3BlcnR5KG9i
amVjdCwgdWlkLCBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICAKKyAgICByZXR1
cm4gd2F0Y2hQcmVzZW5jZU9mUHJvcGVydHkob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRl
cyk7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9w
dHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZl
bmVzcy5maW5kKGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3NSw2ICs2NzUsMjQgQEAgcHVibGljOgogICAgIERl
c2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmll
cnM7IH0KICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9w
bGFuLndhdGNocG9pbnRzOyB9CiAgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUga2V5
IGlzIGFscmVhZHkgaW52YWxpZC4KKyAgICBib29sIGFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAorICAgIC8vIEdhdGUg
dGhlIHZhbGlkaXR5IG9mIHRoaXMgY29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVjdCBoYXZp
bmcgdGhlIGdpdmVuIHByb3BlcnR5IHdpdGgKKyAgICAvLyB0aGUgZ2l2ZW4gb2Zmc2V0IGFuZCBh
dHRyaWJ1dGVzLiBSZXR1cm5zIGZhbHNlIGlmIHdhdGNoaW5nIGZvciB0aGlzIGlzIGltcG9zc2li
bGUuCisgICAgYm9vbCB3YXRjaFByZXNlbmNlT2ZQcm9wZXJ0eSgKKyAgICAgICAgSlNPYmplY3Qq
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgdW5zaWduZWQgYXR0cmli
dXRlcyk7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2YgdGhpcyBjb21waWxhdGlv
biBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGxhY2tpbmcgdGhlIGdpdmVuIHByb3BlcnR5LgorICAgIC8v
IFJldHVybnMgZmFsc2UgaWYgd2F0Y2hpbmcgZm9yIHRoaXMgaXMgaW1wb3NzaWJsZS4KKyAgICBi
b29sIHdhdGNoQWJzZW5jZU9mUHJvcGVydHkoCisgICAgICAgIEpTT2JqZWN0KiwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCk7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2YgdGhpcyBj
b21waWxhdGlvbiBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGVpdGhlciBoYXZpbmcsIG9yIGxhY2tpbmcs
IHRoZQorICAgIC8vIHByb3BlcnR5IGluIHRoZSBzYW1lIHdheSBhcyB0aGUgZ2l2ZW4gc3RydWN0
dXJlIGNsYWltcyB0byBoYXZlIChvciBsYWNrKSB0aGUgcHJvcGVydHkuCisgICAgYm9vbCB3YXRj
aFByZXNlcnZhdGlvbk9mUHJvcGVydHkoCisgICAgICAgIEpTQ2VsbCosIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKwogICAgIEZ1bGxCeXRlY29kZUxpdmVu
ZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYg
bGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBA
QCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAgICAgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRy
ICZzbG93UGF0aEZ1bmN0aW9uLAogICAgIGJvb2wgY29tcGFjdCkKIHsKLSAgICBpZiAoc3RydWN0
dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAg
IGlmIChzdHJ1Y3R1cmUtPm5lZWRzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAgICAgICAg
IHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0NyArMTMyLDMwIEBAIHN0YXRpYyB2
b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAotICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0
UHJvcGVydHlDb25kaXRpb24oCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFp
bHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1
cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElz
U3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9p
bnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0
aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAg
ICAgICAgICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgotICAgICAgICAgICAgaml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAg
ICAgICAgICBqaXQsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2ludCk7
Ci0gICAgICAgICAgICBvay5saW5rKCZqaXQpOwotICAgICAgICB9CisgICAgaWYgKGNvbmRpdGlv
bi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAg
ICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9p
bnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihv
YmplY3QpLCBzY3JhdGNoR1BSKTsKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBi
cmFuY2hTdHJ1Y3R1cmUoaml0LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSkpOworICAgICAg
ICBicmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICBqaXQsIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkpOwogfQogCi1zdGF0aWMgdm9p
ZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFj
cm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAK
LSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0Nl
bGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5m
bywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworc3RhdGljIHZvaWQg
Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIHNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyAgICBmb3IgKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBzZXQpIHsKKyAgICAgICAgY2hl
Y2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICAgICAgICAgIGNvbmRpdGlvbiwgY29kZUJs
b2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIH0KIH0K
IAogc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZm
ZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHRhcmdldCkKQEAgLTI5NiwxMSArMjc5LDEyIEBAIHN0YXRpYyBGdW5jdGlvblB0ciBjdXN0
b21Gb3IoY29uc3QgUHV0UHIKIAogc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKICAgICBF
eGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LAorICAgIEZ1bmN0aW9u
UHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwgV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludFNldCwKICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFi
ZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4mIHN0dWJSb3V0aW5lKQogewotCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5hcmVTdGlsbFZh
bGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CisgICAgCiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IEpT
VmFsdWVSZWdzKApAQCAtMzQ2LDMzICszMzAsMjUgQEAgc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlk
U3R1YigKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJl
c1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpIHx8IGNvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CiAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0
eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKICAgICBpZiAod2F0
Y2hwb2ludFNldCkKICAgICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFkZFdhdGNo
cG9pbnQoY29kZUJsb2NrKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7IAotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgaWYgKGNoYWluKSB7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAg
ICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0g
cHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJl
LT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAg
ICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0
eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBh
ZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG9PYmplY3Qs
IHByb3RvU3RydWN0dXJlLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAg
ICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjdXJyU3RydWN0
dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCghcHJvdG9PYmplY3Qg
fHwgcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpID09IGN1cnJTdHJ1Y3R1cmUpOwotICAgIH0KKyAg
ICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9uU2V0LCBj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAg
CisgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOworICAgIGlmIChjb25kaXRpb25TZXQuaXNF
bXB0eSgpKQorICAgICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIGVsc2UKKyAg
ICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9i
amVjdCgpLT5zdHJ1Y3R1cmUoKTsKICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJv
cGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOworICAgIAogICAgIEdQUlJlZyBiYXNl
Rm9yQWNjZXNzR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICBpZiAoa2luZCAhPSBHZXRVbmRlZmlu
ZWQpIHsKLSAgICAgICAgaWYgKGNoYWluKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRj
aEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRo
ZSB0YXJnZXQuCiAgICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsKQEAgLTYyNyw5ICs2MDMs
OCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWCiAgICAgICAgIGFz
T2JqZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQotICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0
T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRj
aHBvaW50cygpKQorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgcmV0dXJuIEF0dGVt
cHRUb0NhY2hlOwpAQCAtODI3LDIxICs4MDIsMjIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUJ1aWxkR2V0QnlJRAogICAgIH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNs
b3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAg
U3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAw
OworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAg
ICAKICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1
ZSkgewogICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwg
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogCiAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvdW50ID0g
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyhleGVjLCBzdHJ1
Y3R1cmUsIGlkZW50LmltcGwoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvdW50ID0g
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcygKLSAgICAgICAgICAgICAgICBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgICAg
IGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgICAgICBjb25kaXRp
b25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdChleGVjLCBz
dHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBl
Q2hhaW4oZXhlYyk7CisgICAgICAgIAorICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8p
OwpAQCAtODUyLDcgKzgyOCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdl
dEJ5SUQKICAgICAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAg
IGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihz
bG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBj
b3VudCwgb2Zmc2V0LCAKKyAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3Rv
bUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgb2Zmc2V0LCAKICAgICAgICAgc3Ry
dWN0dXJlLCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgCiAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1
cnJlbnRTbG93UGF0aFRhcmdldChzdHViSW5mbykpLCBzdHViUm91dGluZSk7CkBAIC04NzEsNyAr
ODQ3LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIAog
ICAgIGxpc3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAogICAgICAgICAqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUs
Ci0gICAgICAgIHByb3RvdHlwZUNoYWluLCBjb3VudCkpOworICAgICAgICBjb25kaXRpb25TZXQp
KTsKICAgICAKICAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0dWJSb3V0aW5lLmdldCgpKTsKICAgICAKQEAgLTk5MywyNiArOTY5LDI4IEBAIHN0YXRpYyBi
b29sIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFN0
cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKEV4ZWNTdGF0
ZSogZXhlYywgVk0qIHZtLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCAKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIGJvb2wgZW1pdFB1dFRyYW5z
aXRpb25TdHViKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgVk0qIHZtLCBTdHJ1Y3R1cmUqJiBzdHJ1
Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCAKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kLAor
ICAgIFN0cnVjdHVyZSomIG9sZFN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCkKIHsKICAgICBQcm9wZXJ0eU5hbWUgcG5hbWUoaWRlbnQpOwotICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIG9sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBvbGRTdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpIHx8IHBhcnNlSW5kZXgocG5hbWUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUHJvcGVydHlPZmZzZXQgcHJv
cGVydHlPZmZzZXQ7CiAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgaWRlbnQu
aW1wbCgpLCAwLCBwcm9wZXJ0eU9mZnNldCk7CiAKICAgICBpZiAoIXN0cnVjdHVyZSB8fCAhc3Ry
dWN0dXJlLT5pc09iamVjdCgpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgIXN0cnVj
dHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRo
ZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCiAgICAgLy8g
ZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KICAgICBpZiAoR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMgPCA2CiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKICAgICAgICAgJiYgb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gU2tpcCBvcHRpbWl6aW5n
IHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCkBA
IC0xMDIwLDE0ICs5OTgsMTMgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25T
dHViQQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQh
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAog
ICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMs
IHN0cnVjdHVyZSkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YgorICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgeworICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3MoZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91
dGluZTsKQEAgLTEwODMsMTcgKzEwNjAsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJh
bnNpdGlvblN0dWJBCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKICAg
ICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIG9sZFN0cnVjdHVy
ZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwgZmFpbHVyZUNhc2VzLAotICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAKLSAg
ICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAo
Kml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1
YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAg
Y29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1
cmVDYXNlcywgc2NyYXRjaEdQUjEpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOwogICAgIApAQCAtMTIyOCw3ICsxMTk2LDcgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1p
dFB1dFRyYW5zaXRpb25TdHViQQogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAg
ICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VS
ZWdpc3RlcnMoKSkKQEAgLTEyNTYsOCArMTIyNCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4
ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCiAgICAgICAgICAgICBzdHJ1Y3R1
cmUpOwotCi0gICAgcmV0dXJuIG9sZFN0cnVjdHVyZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0xMjgxLDEyICsxMjQ5LDExIEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAoc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewogICAgICAgICBp
ZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewogCi0gICAg
ICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFu
ZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1Yklu
Zm8sIHB1dEtpbmQpOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0
aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtp
bmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4q
IHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAg
ICAgICAgIAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKICAgICAgICAgICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KApAQCAtMTI5NCw3ICsxMjYx
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7CiAgICAgICAgICAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8uaW5p
dFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xk
U3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7
CisgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBwdXRLaW5kID09IERpcmVjdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KQEAgLTEzMTIsMjAgKzEyNzksMjIgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAmJiBzdHViSW5m
by5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmU7CiAKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlw
ZUNoYWluID0gMDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRP
ZmZzZXQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGJhc2VWYWx1
ZSAhPSBzbG90LmJhc2UoKSkgewotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50
LCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFp
bikKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBi
YXNlVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFz
ZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNl
dCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlz
dCogbGlzdDsKICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0
S2luZCwgc3R1YkluZm8pOwogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1
YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xv
dCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBr
aW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9u
U2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpLApAQCAtMTMzNiw3ICsxMzA1LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlUHV0QnlJRAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVy
KAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAg
ICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDog
UHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90
b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7Cisg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwg
c3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29k
ZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTM4MCwx
NyArMTM0OSwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAg
ICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAotICAgICAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRH
ZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKSAKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0
VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAg
ICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgICAg
IGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0
aW9uKAogICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwKICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAogICAgICAg
ICB9IGVsc2UgewpAQCAtMTQyMywyMSArMTM5MSwyNCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwg
c2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGls
bE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1
YlJvdXRpbmU7Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAg
ICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNl
KCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFp
bkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNl
dCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAg
ICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owor
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAh
PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAg
ICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFtZS5pbXBs
KCkpOworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAg
ICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwog
ICAgICAgICAKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAg
bGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwog
CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4
ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5m
bywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LAorICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90
KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQs
CiAgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAg
ICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlz
dC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLApAQCAtMTQ0OCw3ICsxNDE5LDcgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICBsaXN0LT5hZGRBY2Nl
c3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8g
UHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAg
ICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0
dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwpAQCAtMTQ4NywxMSArMTQ1OCwxNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CiAgICAgCi0gICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKLSAgICBKU1ZhbHVlIGZvdW5kU2xvdEJhc2UgPSB3YXNG
b3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKTsKLSAgICBzaXplX3QgY291bnQgPSAh
Zm91bmRTbG90QmFzZSB8fCBmb3VuZFNsb3RCYXNlICE9IGJhc2UgPyAKLSAgICAgICAgbm9ybWFs
aXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIGZvdW5kU2xv
dEJhc2UsIGlkZW50LCBvZmZzZXRJZ25vcmVkKSA6IDA7Ci0gICAgaWYgKGNvdW50ID09IEludmFs
aWRQcm90b3R5cGVDaGFpbikKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQ7CisgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkg
IT0gYmFzZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJl
LCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UK
KyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNz
KGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwpAQCAt
MTUxNiw3ICsxNDkxLDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigK
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIH0KICAgICAKLSAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgCiAgICAgewpAQCAtMTU0
NywxOCArMTUyMSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAg
ICAgICAgIGlmIChzbG90LndhdGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNsb3Qud2F0Y2hw
b2ludFNldCgpLT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAg
ICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgICAgICBKU09iamVj
dCogcHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3Vw
KGV4ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b3R5
cGUtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJvdG9TdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMs
IHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygp
Lm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgICAgIHZt
LT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1YkluZm8uYWRk
V2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+
Z2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMo
CisgICAgICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9rKCksIHN0dWJJbmZvLCBz
dHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAgICAgICAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4
Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGljdGlv
bmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rpb25hcnlL
aW5kOyB9CiAgICAgYm9vbCBpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJu
IGRpY3Rpb25hcnlLaW5kKCkgPT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZDsgfQogICAKLSAgICBi
b29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB7IHJldHVybiBkaWN0aW9uYXJ5S2lu
ZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nKCk7IH0KKyAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0
aW9uYXJ5S2luZAorICAgICAgICAgICAgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlD
YWNoaW5nKCkKKyAgICAgICAgICAgICYmICEodHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVy
dHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkK
KyAgICB7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAg
ICAgICAgICAgICYmIHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpCisgICAg
ICAgICAgICAmJiB0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKTsK
KyAgICB9CiAKICAgICAvLyBXZSB1c2UgU2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBmb3Igc3Ry
dWN0dXJlcyB0aGF0IG1heSBnZXQgbmV3IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRvIHByZXZl
bnQKICAgICAvLyBERkcgZnJvbSBpbmxpbmluZyBwcm9wZXJ0eSBhY2Nlc3NlcyBzaW5jZSBzdHJ1
Y3R1cmVzIGRvbid0IHRyYW5zaXRpb24gd2hlbiBhIG5ldyBpbXB1cmUgcHJvcGVydHkgYXBwZWFy
cy4KQEAgLTIwMiw3ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gdHlw
ZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKTsKICAgICB9Ci0KKyAgICAKICAg
ICAvLyBUeXBlIGFjY2Vzc29ycy4KICAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgQVNT
RVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9ibG9iLnR5
cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25z
dCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCw3IEBAIHB1YmxpYzoK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb2RlKCk7CiAKICAgICB2b2lk
IHJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImLCBX
YXRjaHBvaW50Kik7CisgICAgCiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBp
dCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257031</attachid>
            <date>2015-07-18 13:40:03 -0700</date>
            <delta_ts>2015-07-18 21:02:51 -0700</delta_ts>
            <desc>a little more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>135402</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY5ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODU0LDYgKzQ4NTgsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25z
dCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAg
LCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlv
blNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RG
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5SWRWYXJp
YW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zm
c2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlmIChjaGFp
biAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50
ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3Rh
bnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRCeUlkVmFy
aWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50JiBHZXRC
eUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAg
ICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29uc3RhbnRD
aGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90
aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0
aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5p
cXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03MiwxNCAr
NjcsMTQgQEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJl
dHVybiAqdGhpczsKIH0KIAotU3RydWN0dXJlU2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0
dXJlKCkgY29uc3QKK0pTT2JqZWN0KiBHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSgpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVTZXQoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvciht
X2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0
cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICAvLyBUaGlzIGN1cnJlbnRseSBh
c3N1bWVzIHRoYXQgR2V0QnlJZFZhcmlhbnQgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHNlbGYgaGl0
cyBhbmQgcHJvdG90eXBlCisgICAgLy8gaGl0cy4gV2hlbiB3ZSBzdXBwb3J0IG1pc3NlcywgdGhp
cyBzaG91bGQgYmUgc21hcnQgZW5vdWdoIHRvIHJldHVybiBudWxscHRyIGluc3RlYWQgb2YKKyAg
ICAvLyBjcmFzaGluZyBpbiBzbG93QmFzZUNvbmRpdGlvbigpLgorICAgIGlmIChtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2Nv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpOwogfQogCiBib29sIEdldEJ5
SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBA
IC05MCwxMCArODUsMTMgQEAgYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29u
cwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghYXJl
Q29tcGF0aWJsZShtX2NvbnN0YW50Q2hlY2tzLCBvdGhlci5tX2NvbnN0YW50Q2hlY2tzKSkKKyAg
ICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQgPQor
ICAgICAgICBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsK
KyAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKLSAgICBtZXJnZUludG8ob3RoZXIubV9jb25zdGFudENoZWNrcywgbV9jb25z
dGFudENoZWNrcyk7CisgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CiAg
ICAgbV9zdHJ1Y3R1cmVTZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOwogICAgIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMTEyLDggKzExMCw3IEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1
bXBJbkNvbnRleHQoUHJpbnQKICAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KAotICAgICAgICAi
PCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsCi0gICAgICAgICJb
IiwgbGlzdER1bXBJbkNvbnRleHQobV9jb25zdGFudENoZWNrcywgY29udGV4dCksICJdIik7Cisg
ICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5D
b250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSk7CiAgICAgaWYgKG1fYWx0ZXJuYXRlQmFz
ZSkKICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNW
YWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNl
dCA9ICIsIG9mZnNldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyAr
NDMsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiBwdWJsaWM6CiAgICAgR2V0QnlJZFZhcmlh
bnQoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJl
U2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsCi0gICAgICAgIGNv
bnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQoKSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0
YXR1cyA9IG51bGxwdHIpOwogICAgIAogICAgIH5HZXRCeUlkVmFyaWFudCgpOwpAQCAtNTUsOSAr
NTUsMTAgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQo
KSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENo
ZWNrczsgfQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9h
bHRlcm5hdGVCYXNlOyB9Ci0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsK
KworICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpTT2JqZWN0KiBhbHRl
cm5hdGVCYXNlKCkgY29uc3Q7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAgICAgCkBAIC03MCw4ICs3
MSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdldEJ5SWRTdGF0dXM7CiAgICAgCiAg
ICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNl
OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFBy
b3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMp
IHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KEpTVmFsdWUobV9vYmplY3QpLCBjb250
ZXh0KSwgIjogIiwgaW5Db250ZXh0KG1fY29uZGl0aW9uLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRp
dGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1
cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVx
dWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1
Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQo
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jv
b2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0
aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2Nv
bmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVj
dHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlQXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpLCBlZmZv
cnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVm
Zm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxl
KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQp
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2Vz
JiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52YWxpZGF0
ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29u
ZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6IG1f
b2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAgICAgIDog
bV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9vYmplY3Qo
b2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRC
YXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29i
amVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25k
aXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOyAK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91
dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIo
CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0
Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2UodWlkLCBwcm90b3R5cGUp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAg
ICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5j
ZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9
IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246
OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBK
U09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAg
ICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3Rv
dHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBl
cXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmpl
Y3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjplcXVp
dmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZh
bGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0
aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisgICAgSlNP
YmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJvcGVydHlD
b25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0KKyAgICAK
KyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0
dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5zaWduZWQg
aGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJpYnV0ZXMo
KTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24o
KS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9vbCBoYXNS
ZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWlyZWRWYWx1
ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkgKyBtX2Nv
bmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29uZGl0aW9u
ID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYg
bV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAg
Ly8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9y
IGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJlbnQgb2Jq
ZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVz
b2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzIGEgUHJl
c2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0
aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBjYXNlcyB5
b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAgLy8gd2ls
bCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5k
IEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50aW9uLCBp
bnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4KKyAgICBi
b29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1aWQoKSAh
PSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9CisgICAg
CisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9uYWxseSB0
YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUq
IGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwgdGhlbiB5
b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0IFN0cnVj
dHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBz
YW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9pZCBhIFRP
Q1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVy
ZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9v
bCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUq
KSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4g
aW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAg
ICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisg
ICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVy
ZSopIGNvbnN0OworICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0IGRlZmluaXRl
bHkgaGFzLCBvciBkZWZpbml0ZWx5IGRvZXMgbm90IGhhdmUsIHRoZSBwcm9wZXJ0eSByaWdodCBu
b3cuCisgICAgLy8gSWYgdHJ1ZSwgdGhlbiB3ZSBjb3VsZCBjb250aW51ZSB0byB2ZXJpZnkgdGhl
IHZhbGlkaXR5IGJ5IGNoZWNraW5nIGlmIHRoZSBvYmplY3QgaGFzIHRoZQorICAgIC8vIHN0cnVj
dHVyZS4gTWF5IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgaWYgdGhlIG9iamVjdCBhbmQg
c3RydWN0dXJlIGFsb25lIGRvbid0CisgICAgLy8gZ3VhcmFudGVlIHRoZSBjb25kaXRpb24uIFRo
aXMgaGFwcGVucyBmb3IgYW4gQWJzZW5jZSBjb25kaXRpb24gb24gYW4gb2JqZWN0IHRoYXQgbWF5
IGhhdmUKKyAgICAvLyBpbXB1cmUgcHJvcGVydGllcy4KKyAgICBib29sIGlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZv
cmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBv
biB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2lu
dC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
CisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFi
aWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7Cisg
ICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25k
aXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0
J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBh
IHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9v
bCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25k
aXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFu
Z2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5n
ZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24o
KS53YXRjaGluZ1JlcXVyaWVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9
CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNT
dGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25z
dCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBt
X29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0cnVj
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFz
aCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsg
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0
KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5v
YmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0K
KyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktpbmQo
CisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAg
ICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvbmRp
dGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90
QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0
aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAgIH0K
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlQ29tcGF0aWJs
ZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAg
aWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEgOiAqdGhpcykgewor
ICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiIDogb3RoZXIpIHsK
KyAgICAgICAgICAgIGlmICghYS5pc0NvbXBhdGlibGVXaXRoKGIpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om1l
cmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBj
b25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFvdGhlci5pc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3RoZXIpIHsKKyAgICAgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3RpbmdDb25kaXRpb24gOiAqdGhpcykgewor
ICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0Nv
bmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBub25FbXB0eShyZXN1bHQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjphcmVTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3Rp
bGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxWYWxp
ZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLnZhbGlkaXR5UmVx
dXJpZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmFyZVN0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25k
aXRpb24uaXNTdGlsbExpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoIlsiKTsKKyAg
ICBpZiAobV9kYXRhKQorICAgICAgICBvdXQucHJpbnQobGlzdER1bXBJbkNvbnRleHQobV9kYXRh
LT52ZWN0b3IsIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworbmFtZXNwYWNlIHsKKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisgICAgVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9w
ZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBv
YmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAg
Y2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7
CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2Uodm0sIG93
bmVyLCBvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlk
LCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICByZXR1cm4g
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcigKKyAgICAgICAgICAgIHZt
LCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlw
ZSgpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAg
fQorfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnMoCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQpCit7CisgICAgQVNTRVJUKCEhcHJvdG90eXBl
ID09IChjb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKSk7CisgICAgCisg
ICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBjb25kaXRpb25zOworICAgIAorICAg
IGZvciAoOzspIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQorICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAg
IAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAo
ZXhlYyk7CisgICAgICAgIAorICAgICAgICBpZiAodi5pc051bGwoKSkgeworICAgICAgICAgICAg
aWYgKCFwcm90b3R5cGUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHYpOwor
ICAgICAgICBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAg
ICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgcmVwZWF0ZWRseSwgaXQn
cyBhIGdvb2QgYmV0IHRoYXQgaXQgc2hvdWxkIG5vdCBiZQorICAgICAgICAvLyB0cmVhdGVkIGFz
IGEgZGljdGlvbmFyeS4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBvYmpl
Y3QpOworICAgICAgICAKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQgdGhpc0NvbmRp
dGlvbktpbmQ7CisgICAgICAgIGlmIChraW5kID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZSAmJiBvYmplY3QgIT0gcHJvdG90eXBlKQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQg
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dGhpc0NvbmRpdGlvbktpbmQgPSBraW5kOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gbmV3Q29uZGl0aW9uID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9u
KHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIHRoaXNDb25kaXRpb25LaW5kKTsKKyAgICAgICAgaWYg
KCFuZXdDb25kaXRpb24gfHwgIW5ld0NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIAorICAgICAgICBjb25kaXRpb25zLmFw
cGVuZChuZXdDb25kaXRpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90
b3R5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgLy8gVmFsaWRhdGUg
dGhlIHJlc3VsdC4KKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0
aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBwcmVzZW5jZUNvdW50ID0gMDsKKyAg
ICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29u
ZGl0aW9ucykgeworICAgICAgICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAg
ICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgICAg
ICBwcmVzZW5jZUNvdW50Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHByZXNlbmNlQ291bnQgPT0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZh
dWx0OiB7CisgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6IGNvbmRpdGlvbnMpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24u
a2luZCgpID09IGtpbmQpOworICAgIH0gfQorICAgIAorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6bm9uRW1wdHkoY29uZGl0aW9ucyk7Cit9CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
K3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4
ZWMsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2Vu
Y2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIs
IGV4ZWMsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFi
c2VuY2VPZlNldHRlcik7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclBvdG90eXBlUHJvcGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3Qq
IHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBn
ZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhlYywgaGVhZFN0cnVjdHVy
ZSwgcHJvdG90eXBlLCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2xkdWUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9u
IHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0aW9uYWwgY29uZGl0aW9u
cworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFjY2VzcyB0byBiZSB2YWxp
ZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmVzdGluZyBzdGF0ZXM6
CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRpdGlvbnMgdGhhdCBuZWVk
IHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBpcyBuZXZlciB2YWxpZC4K
Ky8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25zIHRo
YXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
eworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkgeyB9CisgICAgCisg
ICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFsaWQoKQorICAgIHsKKyAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBub25FbXB0
eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2ZWN0b3IpCisgICAgewor
ICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3
IERhdGEoKSk7CisgICAgICAgICpyZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRhLT52ZWN0b3IuaXNFbXB0
eSgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX2RhdGE7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdpbigpOworICAgIH0KKyAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmVu
ZCgpOworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JPYmplY3Qo
SlNPYmplY3QqIG9iamVjdCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9y
Q29uZGl0aW9uS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisgICAgCisgICAg
Ly8gSWYgdGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90eXBlIGhpdCwgdGhlbiB0
aGlzIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNvbmRpdGlvbiBvbiB0aGUg
cHJvdG90eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0LCBvZmZz
ZXQsIGFuZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5cGUuIFRoaXMgd2lsbCBS
RUxFQVNFX0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFByZXNlbmNlCisgICAgLy8g
aW4gdGhlIHNldCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2VuY2UuCisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAv
LyBUd28gY29uZGl0aW9uIHNldHMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgYm90aCB2YWxp
ZCBhbmQgZWFjaCBjb25kaXRpb24gaW4gKnRoaXMgaXMKKyAgICAvLyBjb21wYXRpYmxlIHdpdGgg
ZWFjaCBjb25kaXRpb24gaW4gb3RoZXIuCisgICAgYm9vbCBhcmVDb21wYXRpYmxlV2l0aChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0OworICAgIAorICAgIC8v
IEF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3IGNvbmRpdGlvbiBzZXQgYnkgbWVyZ2luZyB0aGlzIG9u
ZSB3aXRoIHRoZSBvdGhlciBvbmUuIFRoaXMgd2lsbAorICAgIC8vIGZhaWwgaWYgIXRoaXMuYXJl
Q29tcGF0aWJsZVdpdGgob3RoZXIpLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1l
cmdlZFdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdDsK
KyAgICAKKyAgICBib29sIGFyZVN0aWxsVmFsaWQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxs
VmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wg
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgYXJlU3RpbGxM
aXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwg
RHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKKyAgICAvLyBIZWxwZXJzIGZvciB1c2luZyB0aGlzIGluIGEgdW5pb24uCisgICAgdm9p
ZCogcmVsZWFzZVJhd1BvaW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHZvaWQqPihtX2RhdGEubGVha1JlZigpKTsKKyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGFkb3B0UmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9kYXRhID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGZyb21SYXdQb2ludGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcik7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBJbnRlcm5hbGx5LCB0aGlzIHJlcHJl
c2VudHMgSW52YWxpZCB1c2luZyBhIHBvaW50ZXIgdG8gYSBEYXRhIHRoYXQgaGFzIGFuIGVtcHR5
IHZlY3Rvci4KKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgY29t
cGFjdCBieSBoYXZpbmcgaXQgaW50ZXJuYWxseSB1c2UgYSB2ZWN0b3IgdGhhdCBqdXN0IGhhcwor
ICAgIC8vIHRoZSBub24tdWlkIHBvcnRpb24gb2YgT2JqZWN0UHJvcGVydHlDb25kaXRpb24sIGFu
ZCB0aGVuIHJlcXVpcmluZyB0aGF0IHRoZSBjYWxsZXJzIG9mIGFsbAorICAgIC8vIG9mIHRoZSBB
UElzIHN1cHBseSB0aGUgdWlkLgorICAgIAorICAgIGNsYXNzIERhdGEgOiBSZWZDb3VudGVkPERh
dGE+IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YSk7CisgICAgICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIERhdGEo
KSB7IH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4g
dmVjdG9yOworICAgIH07CisgICAgCisgICAgUmVmUHRyPERhdGE+IG1fZGF0YTsKK307CisKK09i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlz
cygKKyAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVh
ZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNw
cAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxNCArMzcsMTMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCiAgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQpCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiAgICAg
OiBtX3R5cGUodHlwZSkKICAgICAsIG1fY2hhaW5Db3VudChjaGFpbkNvdW50KQogICAgICwgbV9z
dHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25k
aXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQogewotICAgIGlmIChj
aGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7CiB9CiAKIEdldEJ5
SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcxLDcgKzcwLDcgQEAgYm9vbCBHZXRCeUlk
QWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogewogICAgIGlmIChtX3N0cnVjdHVyZSAmJiAh
SGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQorICAg
IGlmICghbV9jb25kaXRpb25TZXQuaXNTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4Njk4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEzICs1MywxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgR2V0
QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAgICAgICwgbV9jaGFp
bkNvdW50KDApCiAgICAgewogICAgIH0KICAgICAKICAgICBHZXRCeUlkQWNjZXNzKAogICAgICAg
ICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRp
bmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogPSAwLCB1bnNpZ25lZCBj
aGFpbkNvdW50ID0gMCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwogICAgIAogICAgIH5HZXRCeUlkQWNj
ZXNzKCk7CiAgICAgCkBAIC03Miw4ICs3MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9CiAgICAg
Ci0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbi5nZXQo
KTsgfQotICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2NoYWluQ291
bnQ7IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91
dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAgLTkxLDkgKzg5LDggQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgIAogICAgIEFjY2Vzc1R5cGUgbV90
eXBlOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX3N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hh
aW47CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9jb25kaXRpb25TZXQ7IC8vIEZJWE1F
IHdoYXQgYWJvdXQgYmFycmllcnM/CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJS
b3V0aW5lOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljUHV0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg2OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw4IEBAIFB1dEJ5SWRBY2Nl
c3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRy
YW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5m
by51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0
Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3Ry
dWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uY29weUZyb20oc3R1YkluZm8udS5wdXRC
eUlkVHJhbnNpdGlvbi5jaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIoCisgICAgICAgICAgICBz
dHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CiAgICAgICAgIHJl
c3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKQEAgLTY0LDYgKzY1LDkgQEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNz
Ojpmcm9tU3RydWN0dQogCiBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoQnVmZmVyKSBjb25zdAogeworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJl
U3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgUmVwbGFjZToKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCht
X29sZFN0cnVjdHVyZS5nZXQoKSkpCkBAIC03NCwxNSArNzgsMTEgQEAgYm9vbCBQdXRCeUlkQWNj
ZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fbmV3U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX2NoYWluLmdl
dCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBTZXR0ZXI6CiAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CiAgICAgICAgIGlmICghSGVhcDo6aXNN
YXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJ
KHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUz
LDYgQEAgcHVibGljOgogICAgIAogICAgIFB1dEJ5SWRBY2Nlc3MoKQogICAgICAgICA6IG1fdHlw
ZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudChVSU5UX01BWCkKICAgICB7CiAgICAg
fQogICAgIApAQCAtNjIsMTQgKzYxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgSlNDZWxsKiBvd25l
ciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCisgICAgICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAgIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0
QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwog
ICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgb2xkU3RydWN0dXJl
KTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVj
dHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAg
ICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1
bHQubV9jdXN0b21TZXR0ZXIgPSAwOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0
dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTUsOCArOTQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwKKyAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAgICAgUHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAogICAgICAgICBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CkBAIC0xMDQsMTAgKzEwMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX29s
ZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQubV90
eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICByZXN1
bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Ci0gICAgICAgICAgICByZXN1bHQubV9j
aGFpbkNvdW50ID0gY2hhaW5Db3VudDsKLSAgICAgICAgfQorICAgICAgICByZXN1bHQubV9jb25k
aXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9
IGN1c3RvbVNldHRlcjsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGlu
ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0NiwxNyArMTQxLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIFN0
cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNUcmFu
c2l0aW9uKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgcmV0dXJuIG1f
Y2hhaW4uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAg
ICAgIHJldHVybiBtX2NoYWluQ291bnQ7Ci0gICAgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNl
dDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAg
ewpAQCAtMTc4LDggKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZUNoYWluPiBtX2NoYWluOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvcGVydHlDb25k
aXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVm
ZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KG1fa2luZCwgIiBv
ZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgor
ICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBtX29mZnNldCwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwg
bV9hdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzZW5jZToKKyAgICBj
YXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5cGUg
IiwgaW5Db250ZXh0KEpTT2JqZWN0KHByb3RvdHlwZSgpKSwgY29udGV4dCkpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCAi
LCBpbkNvbnRleHQoSlNWYWx1ZTo6ZW5jb2RlKHJlcXVpcmVkVmFsdWUoKSksIGNvbnRleHQpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7Cisg
ICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghc3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6IHsK
KyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSwgY3Vy
cmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVudE9mZnNldCAhPSBvZmZzZXQoKSB8
fCBjdXJyZW50QXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBB
YnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBl
KCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0
ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmli
dXRlczsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKSAhPSBp
bnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJpYnV0ZXMgJiAoQWNj
ZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5
cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBFcXVpdmFs
ZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJlKCkgIT0gc3RydWN0
dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIHNpbmNl
IHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICAg
ICAvLyBvYmplY3QuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJhY3ksIGFuZCBtYXliZSBt
b3JlIHJpc2t5IHRoYW4gd2Ugd2FudC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQorICAgICAgICAKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKTsKKyAg
ICAgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUgPSBiYXNlLT5nZXREaXJlY3QoY3VycmVudE9mZnNl
dCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gcmVxdWlyZWRWYWx1ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAg
aWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBF
cXVpdmFsZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWRB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgYW4gaW1w
dXJlIHByb3BlcnR5IGNhbiBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwgYW5kIGNhbiBhbHNv
CisgICAgLy8gInNoYWRvdyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24gdGhlIHNhbWUgb2Jq
ZWN0LiBIZW5jZSBpdCBhZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAgLy8gYWJzZW5jZS4g
SXQgZG9lc24ndCBhZmZlY3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1wdXJlIHByb3BlcnRp
ZXMgYXJlbid0IGV2ZXIgc2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2Ug
UHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQoCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAg
aWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7Cisg
ICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZhcmlhbnQgb2YgaXNW
YWxpZCByZXR1cm5lZCB0cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVzIHRoYXQgd2UgYWxy
ZWFkeSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eS4g
V2Ugc2hvdWxkCisgICAgICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZSBTdHJ1Y3R1
cmUgaXMgYSBjYWNoZWFibGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UKKyAgICAgICAgLy8g
c2hvbGRuJ3QgaGF2ZSBhIFRPQ1RPVSByYWNlIGVpdGhlci4KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgV2F0Y2hwb2lu
dFNldCogc2V0OworICAgICAgICBzd2l0Y2ggKGVmZm9ydCkgeworICAgICAgICBjYXNlIE1ha2VO
b0NoYW5nZXM6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFbnN1cmVXYXRjaGFiaWxpdHk6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPnByb3Bl
cnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KAorICAgICAgICAgICAgICAgICpIZWFwOjpoZWFw
KHN0cnVjdHVyZSktPnZtKCksIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKCFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVy
biBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUs
IGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0
KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0
KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQorICAg
ICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jv
b2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFz
UHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYg
cmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKS5pc0NlbGwoKQorICAg
ICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2VsbCgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb3Bl
cnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMm
IHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpKQorICAgICAgICB0cmFj
a2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFzUmVxdWlyZWRWYWx1ZSgp
KQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQgY29uZGl0aW9uKQorewor
ICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICBv
dXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIkFic2Vu
Y2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6
RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIFByb3BlcnR5Q29uZGl0
aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBQ
cm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgUHJl
c2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VPZlNldHRlciwKKyAgICAg
ICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0aGlzIHdpbGwgYmUg
YSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb25z
LCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0aGUgbmV3IHN0cnVj
dHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKCkKKyAgICAgICAgOiBt
X3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkKKyAgICB7CisgICAgICAg
IG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlDb25k
aXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fdWlkKG51
bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQo
JnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRp
dGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0g
UHJlc2VuY2U7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9IG9mZnNldDsKKyAg
ICAgICAgcmVzdWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlv
biBwcmVzZW5jZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gcHJlc2VuY2VX
aXRob3V0QmFycmllcih1aWQsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9w
ZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9u
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9r
aW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90
b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNl
V2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVp
ZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRlcjsKKyAgICAgICAgcmVz
dWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZT
ZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJy
aWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29u
ZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlv
biByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQuZXF1aXZhbGVuY2UudmFsdWUgPSBK
U1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgc3RhdGljIFByb3Bl
cnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25l
cik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUp
OworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
bV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIAorICAgIEtpbmQga2luZCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25z
dCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2UgfTsKKyAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09mZnNldCgpKTsKKyAg
ICAgICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBib29sIGhhc0F0dHJp
YnV0ZXMoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZSB9Owor
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c0F0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gISEqdGhp
cyAmJiAobV9raW5kID09IEFic2VuY2UgfHwgbV9raW5kID09IEFic2VuY2VPZlNldHRlcik7IH0K
KyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCho
YXNQcm90b3R5cGUoKSk7CisgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlOworICAg
IH0KKyAgICAKKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAhISp0
aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsgfQorICAgIEpTVmFsdWUgcmVxdWlyZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUmVxdWlyZWRWYWx1ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8VW5pcXVl
ZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5k
KTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVzZW5jZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAgICAgICAgIHJlc3Vs
dCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgICAg
IHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFic2VuY2UucHJvdG90
eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAg
ICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVxdWl2YWxlbmNl
LnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eUNv
bmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91aWQgIT0gb3RoZXIu
bV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tpbmQgIT0g
b3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUu
cHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0CisgICAgICAgICAgICAg
ICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2VuY2UuYXR0cmlidXRl
czsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJzZW5j
ZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgICAgICByZXR1
cm4gYS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNlLnZhbHVlOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBBYnNl
bmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBp
ZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcy4g
SWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0byBy
ZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzCisgICAgLy8gYSBQ
cmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3YW50
IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGluIG90aGVyIGNhc2Vz
IHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRoaXMgd2lsbCBhbHNv
IHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5jZSBh
bmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQKKyAgICAv
LyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcuCisgICAgYm9vbCBp
c0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkgIT0gb3RoZXIudWlk
KCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJl
IGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4KKyAgICBib29s
IGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSos
IEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZh
bGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgp
IHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUg
b2JqZWN0IGRlZmluaXRlbHkgaGFzLCBvciBkZWZpbml0ZWx5IGRvZXMgbm90IGhhdmUsIHRoZSBw
cm9wZXJ0eSByaWdodCBub3cuCisgICAgLy8gSWYgdHJ1ZSwgdGhlbiB3ZSBjb3VsZCBjb250aW51
ZSB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IGJ5IGNoZWNraW5nIGlmIHRoZSBvYmplY3QgaGFzIHRo
ZQorICAgIC8vIHN0cnVjdHVyZS4gTWF5IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgaWYg
dGhlIG9iamVjdCBhbmQgc3RydWN0dXJlIGFsb25lIGRvbid0CisgICAgLy8gZ3VhcmFudGVlIHRo
ZSBjb25kaXRpb24uIFRoaXMgaGFwcGVucyBmb3IgYW4gQWJzZW5jZSBjb25kaXRpb24gb24gYW4g
b2JqZWN0IHRoYXQgbWF5IGhhdmUKKyAgICAvLyBpbXB1cmUgcHJvcGVydGllcy4KKyAgICBib29s
IGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0
OworICAgIAorICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNo
YWJsZSwgYnV0IGNvdWxkIGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8v
IGFwcHJvcHJpYXRlIHdhdGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBv
aW50cyBhcmUgZW5hYmxlZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQg
b24gdGhlIHByb3BlcnR5IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZl
IHNwYWNlIGZvcgorICAgIC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRo
YXQgbmV2ZXIgZ2V0IHZlcnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBl
bmFibGUgd2F0Y2hpbmcsIHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFp
biB0aHJlYWQuCisgICAgZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlz
IGlzIHRoZSBkZWZhdWx0LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUg
b2YgYW55IFN0cnVjdHVyZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQg
aWYgdGhlIHByb3BlcnR5IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0
IG1ha2UKKyAgICAgICAgLy8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxs
aW5nIGZyb20gYSBKSVQgdGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8g
cHJlZmVyYWJsZSB3aGVuIGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRp
b24gZm9yIHRoZSBmaXJzdCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hw
b2ludCBmaXJlIHRoYXQgY2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5j
ZSBhCisgICAgICAgIC8vIHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRj
aGluZyBpbXBsaWVzIHRoYXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8g
eWV0IHRvIG1ha2UgaXQgcHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJl
aW5nIHdhdGNoZWQgbWF5IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBw
cmVmZXIgdG8gb25seSBhc3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFz
IGJlZW4KKyAgICAgICAgLy8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAg
ICAgICBNYWtlTm9DaGFuZ2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtl
cyB0byBlbnN1cmUgdGhhdCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNv
IGhhcyBubworICAgICAgICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMg
anVzdCBtZWFucyB0aGF0IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAv
LyByZXBsYWNlbWVudCB3YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5h
YmxlZCBhbHJlYWR5LiBEbyBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFk
cywgc2luY2UgdGhlIGFjdCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNh
ZmUuCisgICAgICAgIEVuc3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhp
cyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRp
dHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1
Y3R1cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJv
b2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAg
U3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQg
PSBNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQn
cyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEg
dHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29s
IGlzV2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxw
dHIsIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAg
IGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxs
IG9mIG91ciBjb25kaXRpb25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAg
Ym9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9
CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRo
aXMgYXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAor
ICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUq
LCBXYXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1f
dWlkOworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVp
dmFsZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsK
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7
IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNv
bnN0IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRp
b25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0
czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4g
OiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDkgQEAgcHVibGljOgog
ICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxz
KCkgY29uc3Q7CiAgICAgCisgICAgLy8gSXQncyB1bmRlcnN0b29kIHRoYXQgdGhlc2UgY2hlY2tz
IGRvbid0IGFjdHVhbGx5IHJlcXVpcmUgdGhhdCB0aGUgb2JqZWN0IGtlZXBzIGV4YWN0bHkgdGhp
cworICAgIC8vIHN0cnVjdHVyZS4gSXQgY2FuIGhhdmUgd2hhdGV2ZXIgc3RydWN0dXJlLCBzbyBs
b25nIGFzIHRoYXQgc3RydWN0dXJlIGFncmVlcyB3aXRoIHRoZSBnaXZlbgorICAgIC8vIG9uZSBh
Ym91dCB0aGUgcHJvcGVydHkgYmVpbmcgc3RvcmVkLgogICAgIGNvbnN0IENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX2NvbnN0YW50Q2hlY2tzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmNwcAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NiwyNCArNDYsMjkgQEAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogU3RydWN0dQog
CiB2b2lkIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbChjb25z
dCBGaXJlRGV0YWlsJikKIHsKLSAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBv
d24gZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgotICAgIC8vIFRo
YXQgd29ya3MsIGJlY2F1c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0
aGUgc2V0J3MgbGlzdCwgYW5kCi0gICAgLy8gdGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBm
aXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2luZy4KLSAgICBtX2hvbGRlci5j
b2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICBpZiAoIW1f
a2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7
CisgICAgICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1pc2U6IHN0
dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCisgICAgICAgIC8vIFRoYXQgd29ya3Ms
IGJlY2F1c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3Mg
bGlzdCwgYW5kCisgICAgICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5n
IGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCisgICAgICAgIG1faG9sZGVyLmNv
ZGVCbG9jaygpLT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJh
bnNpdGlvbldhdGNocG9pbnQodGhpcyk7CiB9CiAKIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbzo6fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygpCiB7CiB9CiAKLVN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6
YWRkV2F0Y2hwb2ludCgpCitTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludDo6cHVzaCgqdGhpcywgbV9oZWFkKTsKKyAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludDo6cHVzaChrZXksICp0aGlzLCBtX2hlYWQpOwogfQogCiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86
OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgUmVmUHRyPFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCi0g
ICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKICAgICBpZiAo
IWhvbGRlclJlZikKICAgICAgICAgaG9sZGVyUmVmID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbyhjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CkBAIC03Miw3ICs3Nyw3
IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAgICAgQVNT
RVJUKGhvbGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAgIAotICAg
IHJldHVybiBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoKTsKKyAgICByZXR1cm4gaG9sZGVyUmVm
LT5hZGRXYXRjaHBvaW50KGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
X2gKIAorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0
Y2hwb2ludC5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTQ2LDE1ICs0NywxMSBAQCBjbGFzcyBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50IDogCiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgKLSAg
ICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIpCi0gICAgICAgIDog
bV9ob2xkZXIoaG9sZGVyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBu
ZXh0KQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKKyAgICAgICAgOiBtX2tleShrZXkpCisg
ICAgICAgICwgbV9ob2xkZXIoaG9sZGVyKQogICAgICAgICAsIG1fbmV4dChXVEY6Om1vdmUobmV4
dCkpCiAgICAgewogICAgIH0KQEAgLTY5LDYgKzY2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OwogICAgIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbyYgbV9ob2xkZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG1fbmV4dDsKIH07CkBAIC04MywxMSArODEsMTEg
QEAgcHVibGljOgogICAgIAogICAgIH5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKTsK
ICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50
KCk7CisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAgICBzdGF0aWMgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hw
b2ludCgKICAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhv
bGRlclJlZiwKLSAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyAgICAg
ICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5KTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODY5
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwxMiBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVy
ZXM7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCk7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgogICAgIGNhc2UgYWNj
ZXNzX3Vuc2V0OgogICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byBy
ZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5CkBAIC03NSw4ICs3OCwxMCBAQCBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X2RpcmVjdDoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9u
LnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2Vk
KHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhl
YXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKQorICAgICAgICAg
ICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAgICAvLyBQdXRCeUlk
KgogCi0gICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLCBib29sIGlzRGlyZWN0KQorICAgIHZvaWQgaW5pdFB1dEJ5SWRU
cmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVj
dHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldCwgYm9vbCBpc0RpcmVjdCkKICAgICB7CiAgICAgICAgIGlmIChpc0RpcmVjdCkK
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGly
ZWN0OwpAQCAtMTIyLDcgKzEyMiw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAg
ICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBwcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0
dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRp
b24uY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldC5yZWxlYXNlUmF3UG9pbnRlcigpOwog
ICAgIH0KIAogICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlKQpAQCAtMTc1LDEwICsxNzUsMTEgQEAg
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgfQog
ICAgICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBv
aW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQqIGFkZFdhdGNocG9pbnQoCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgcmV0
dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRk
V2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMpOwor
ICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29uZGl0aW9uKTsKICAg
ICB9CiAgICAgCiAgICAgaW50OF90IGFjY2Vzc1R5cGU7CkBAIC0yMTcsMjMgKzIxOCwxMiBAQCBz
dHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxT
dHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIH0gZ2V0QnlJZFNlbGY7CiAg
ICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
YmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBwcm90b3R5cGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBib29sIGlzRGlyZWN0OwotICAg
ICAgICB9IGdldEJ5SWRQcm90bzsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAgICAgICAgICB1bnNp
Z25lZCBjb3VudCA6IDMxOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA6IDE7Ci0gICAgICAg
IH0gZ2V0QnlJZENoYWluOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBnZXRCeUlkTGlzdDsKICAgICAgICAgc3Ry
dWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcmV2aW91c1N0
cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1
cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsK
KyAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKICAgICAgICAgfSBwdXRCeUlkVHJh
bnNpdGlvbjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KQorICAgIDogbV9rZXkoa2V5KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxl
bmNlKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6
Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOwor
ICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNo
cG9pbnQoJm1fc3RydWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gbV9rZXktPm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KG1f
a2V5LnVpZCgpKTsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX2tleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAg
c2V0LT5hZGRXYXRjaHBvaW50KCZtX3Byb3BlcnR5V2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpmaXJlKGNvbnN0IEZpcmVEZXRh
aWwmIGRldGFpbCkKK3sKKyAgICAvLyBPbmUgb2YgdGhlIHdhdGNocG9pbnRzIGZpcmVkLCBidXQg
dGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1ha2Ugc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlbSBhcmUK
KyAgICAvLyBpbiBhbnkgc2V0IGFueW1vcmUuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgYnkgYWxs
b3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRoZSB3YXRjaHBvaW50cworICAgIC8vIHdoZXJldmVyIGZy
b20gc2NyYXRjaC4KKyAgICBpZiAobV9zdHJ1Y3R1cmVXYXRjaHBvaW50LmlzT25MaXN0KCkpCisg
ICAgICAgIG1fc3RydWN0dXJlV2F0Y2hwb2ludC5yZW1vdmUoKTsKKyAgICBpZiAobV9wcm9wZXJ0
eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAgICAgICAgbV9wcm9wZXJ0eVdhdGNocG9pbnQucmVt
b3ZlKCk7CisgICAgCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9u
OjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkg
eworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJh
d1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIp
OworICAgIH0KKyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50
KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAg
ICBTdHJpbmdGaXJlRGV0YWlsIGRldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAK
KyAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1
ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZkZXRhaWwpOwor
fQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6U3RydWN0
dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFp
bCkKK3sKKyAgICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoCisgICAgICAg
IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9zdHJ1Y3R1cmVXYXRj
aHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhp
cykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisKK3Zv
aWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNo
cG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7Cisg
ICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAgICAgICBBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fcHJvcGVydHlXYXRjaHBvaW50KTsK
KyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVu
dCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9m
ZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAg
IAorICAgIHZvaWQgaW5zdGFsbCgpOworCitwcml2YXRlOgorICAgIGNsYXNzIFN0cnVjdHVyZVdh
dGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBTdHJ1
Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZv
aWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9OworICAg
IGNsYXNzIFByb3BlcnR5V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFByb3BlcnR5V2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJp
ZGU7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIGZpcmUoY29uc3QgRmlyZURldGFpbCYpOworICAg
IAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CisgICAgU3RydWN0dXJlV2F0Y2hwb2ludCBtX3N0cnVjdHVyZVdhdGNocG9pbnQ7
CisgICAgUHJvcGVydHlXYXRjaHBvaW50IG1fcHJvcGVydHlXYXRjaHBvaW50OworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1cmllc1N0cmN1dHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1
aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0
Y2hhYmxlKCkpOworICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJh
bnNpdGlvbldhdGNocG9pbnQodGhpcyk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIGlm
IChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5
KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgi
LCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBt
X2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBk
ZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpl
dHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBv
aW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
Ik9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAg
ICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAogICAgICAgICBOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsCiAg
ICAgICAgIGJvb2wgaXNEaXJlY3QpOwotICAgIHZvaWQgZW1pdENoZWNrcyhjb25zdCBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7CisgICAgdm9pZCBlbWl0UHJvcGVydHlDaGVja3MoY29u
c3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAK
ICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7
CkBAIC03MDcsMTEgKzcwNywyMCBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGUqIGNlbGxDb25z
dGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcm91dGUgdG8gZW1pdFBy
b3BlcnR5Q2hlY2ssIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gQnV0IGN1cnJlbnRseSwKKyAg
ICAgICAgLy8gdGhpcyBnZXRzIG5vIHByb2ZpdCBmcm9tIHVzaW5nIGVtaXRQcm9wZXJ0eUNoZWNr
KCkgc2luY2Ugd2UnbGwgbm9uLWFkYXB0aXZlbHkgd2F0Y2ggdGhlCisgICAgICAgIC8vIG9iamVj
dCdzIHN0cnVjdHVyZSBhcyBzb29uIGFzIHdlIG1ha2UgaXQgYSB3ZWFrSlNDb3NudGFudC4KICAg
ICAgICAgTm9kZSogb2JqZWN0Tm9kZSA9IHdlYWtKU0NvbnN0YW50KG9iamVjdCk7CiAgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChzdHJ1Y3R1cmUpKSwgb2JqZWN0Tm9kZSk7CiAgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIGVtaXRQcm9wZXJ0eUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAg
ICAgIGlmICghbV9ncmFwaC53YXRjaFByZXNlcnZhdGlvbk9mUHJvcGVydHkob2JqZWN0LCB1aWQs
IHN0cnVjdHVyZSkpCisgICAgICAgICAgICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2so
b2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQ
cmVkaWN0aW9uV2l0aG91dE9TUkV4aXQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICB7CiAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKQEAgLTIyOTAsMTAgKzIyOTksMTAgQEAgTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVj
a1ZlY3RvciYgdmVjdG9yKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFByb3BlcnR5Q2hlY2tz
KGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvciwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUo
KTsgKytpKQotICAgICAgICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sodmVjdG9yW2ld
LmNvbnN0YW50KCksIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIGVtaXRQcm9wZXJ0
eUNoZWNrKHZlY3RvcltpXS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCksIHVpZCk7
CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCkBAIC0yMzIyLDggKzIz
MzEsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgLy8g
MSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBj
b3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAgICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVy
ZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVz
IGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qg
d2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0
QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspCi0gICAgICAgICAgICBl
bWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBnZXRCeUlkU3RhdHVzLm51bVZh
cmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgeworICAgICAgICAgICAgZW1pdFByb3BlcnR5Q2hl
Y2tzKAorICAgICAgICAgICAgICAgIGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFu
dENoZWNrcygpLAorICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlm
aWVyTnVtYmVyXSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIDIpIEVtaXQgYSBN
dWx0aUdldEJ5T2Zmc2V0CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9n
cmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwpAQCAtMjM0NCw3ICsyMzU2LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKICAgICAKLSAgICBlbWl0Q2hlY2tz
KHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgZW1pdFByb3BlcnR5Q2hlY2tzKHZhcmlh
bnQuY29uc3RhbnRDaGVja3MoKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1i
ZXJdKTsKIAogICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKICAgICAgICAgYmFzZSA9
IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKQEAgLTI0MzgsNyArMjQ1
MCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsg
dmFyaWFudEluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFy
aWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGVtaXRDaGVja3MocHV0QnlJ
ZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICAgICAgICAg
IGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1c1t2
YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0yNDYzLDcgKzI0NzcsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeUlkKAogICAgIAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b246IHsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAg
IGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZW1pdFByb3Bl
cnR5Q2hlY2tzKAorICAgICAgICAgICAgdmFyaWFudC5jb25zdGFudENoZWNrcygpLAorICAgICAg
ICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKIAogICAgICAg
ICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgIApAQCAtMjUxOSw3ICsyNTM1
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgYWRkVG9H
cmFwaCgKICAgICAgICAgICAgIENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgCi0gICAgICAg
IGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZW1pdFByb3Bl
cnR5Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSwgbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJOdW1iZXJdKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSkKICAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFs
dGVybmF0ZUJhc2UoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDkgQEAgdm9p
ZCBDb21tb25EYXRhOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgIHRy
YWNrZWRSZWZlcmVuY2VzLmNoZWNrKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29u
c3RhbnQoKSk7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgZm9yIChBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQqIHdhdGNocG9pbnQgOiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRz
KQorICAgICAgICB3YXRjaHBvaW50LT5rZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJl
ZmVyZW5jZXMpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTg2OTg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1
ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTgsNiAr
MTAwLDggQEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1Jl
ZmVyZW5jZXM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0
dXJlUmVmZXJlbmNlczsKICAgICBCYWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3
YXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ+IGFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7
CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsKICAgICAKICAg
ICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJ
KHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9p
bnRBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJW
aWV3KiB2aWV3LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQogeworICAg
IFdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9j
ayk7CiAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50KiBuZXV0ZXJpbmdXYXRjaHBv
aW50ID0KICAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50OjpjcmVhdGUoKmNv
ZGVCbG9jay0+dm0oKSk7CiAgICAgbmV1dGVyaW5nV2F0Y2hwb2ludC0+c2V0KCktPmFkZCh3YXRj
aHBvaW50KTsKQEAgLTQ1LDEwICs0NiwyMyBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9p
bnRBZGFwdG9yOjphCiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgKLSAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgV2F0Y2hw
b2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1
ZSogaW5mZXJyZWRWYWx1ZSwgQ29tbW9uRGF0YSYgY29tbW9uKQogewogICAgIGNvZGVCbG9jay0+
YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNu
J3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0
IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBpbmZlcnJlZFZhbHVlLT5hZGQod2F0Y2hw
b2ludCk7CisgICAgaW5mZXJyZWRWYWx1ZS0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29k
ZUJsb2NrKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6
YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAgc3dpdGNoIChrZXkua2luZCgp
KSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIGNv
bW1vbi5hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmFkZChrZXksIGNv
ZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgY29tbW9uLmFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29kZUJsb2Nr
KS0+aW5zdGFsbCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIERlc2lyZWRXYXRjaHBv
aW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CkBAIC03NCw2ICs4OCwxMSBAQCB2b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJyCiAgICAgbV9idWZmZXJWaWV3cy5hZGRM
YXppbHkodmlldyk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBtX2FkYXB0aXZlU3RydWN0
dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNv
bnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdT
aG91bGRXYXRjaCgpKQpAQCAtODgsNiArMTA3LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6
OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBj
b21tb25EYXRhKTsKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNv
bW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9u
RGF0YSk7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywg
Y29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlk
KCkgY29uc3QKQEAgLTk1LDcgKzExNSw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVT
dGlsbFZhbGlkKCkKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAm
JiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1
ZXMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxp
ZCgpOworICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAm
JiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJJ
bmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRl
ICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCkBAIC00MSwxNSArNDIsMTUgQEAgY2xhc3MgR3JhcGg7
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewotICAg
IHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBUIHNldCwgV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21t
b25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2lu
dCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVC
bG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQp
IHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KIH07CiAKIHN0cnVjdCBJbmZl
cnJlZFZhbHVlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVy
cmVkVmFsdWUqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayos
IEluZmVycmVkVmFsdWUqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbklu
dmFsaWRhdGVkKEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUpCiAgICAgewogICAgICAgICBy
ZXR1cm4gaW5mZXJyZWRWYWx1ZS0+aGFzQmVlbkludmFsaWRhdGVkKCk7CkBAIC01NywxMiArNTgs
MTggQEAgc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBcnJheUJ1
ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9j
ayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIENvbW1vbkRhdGEmKTsKICAgICBzdGF0
aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAg
ewotICAgICAgICBib29sIHJlc3VsdCA9ICF2aWV3LT5sZW5ndGgoKTsKLSAgICAgICAgV1RGOjps
b2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiAh
dmlldy0+bGVuZ3RoKCk7CisgICAgfQorfTsKKworc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludEFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBo
YXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAg
ICB7CisgICAgICAgIHJldHVybiAha2V5LmlzV2F0Y2hhYmxlKCk7CiAgICAgfQogfTsKIApAQCAt
ODcsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFk
ZGVkKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQotICAgICAg
ICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24ud2F0Y2hwb2ludHMuYWRk
KGNvZGVCbG9jaykpOworICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBj
b21tb24pOwogICAgICAgICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQpA
QCAtMTIyLDYgKzEyOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMYXppbHkoSW5mZXJyZWRW
YWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAgCisg
ICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHku
IFVzZQorICAgIC8vIEdyYXBoOjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQsIHdoaWNo
IGRvZXMgdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwuCisgICAgdm9pZCBhZGRMYXppbHko
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKICAgICBib29sIGNvbnNpZGVy
KFN0cnVjdHVyZSopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1v
bkRhdGEmKTsKQEAgLTE0NCwxMiArMTU1LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9CisgICAgYm9vbCBpc1dh
dGNoZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAg
ICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNl
dCo+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElubGluZVdhdGNocG9p
bnRTZXQqPiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZl
cnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAg
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVy
Vmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOworICAgIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNiArODQ4LDQ5IEBAIHZvaWQgR3JhcGg6OmNs
ZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVGbGEKICAgICB9CiB9CiAKK2Jvb2wgR3JhcGg6OmFkZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5KQoreworICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3Qo
KSk7CisgICAgaWYgKGtleS5jb25kaXRpb24oKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5j
ZSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucHJvdG90eXBl
KCkpOworICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBHcmFwaDo6d2F0Y2hQcmVzZW5jZU9mUHJvcGVydHkoCisgICAgSlNP
YmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAgIHJldHVybiBhZGRBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQoCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5j
ZShvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKSk7Cit9CisKK2Jvb2wgR3JhcGg6Ondh
dGNoQWJzZW5jZU9mUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gYWRkQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5j
ZShvYmplY3QsIHVpZCwgcHJvdG90eXBlKSk7Cit9CisKK2Jvb2wgR3JhcGg6OndhdGNoUHJlc2Vy
dmF0aW9uT2ZQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5
bmFtaWNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKKyAgICAKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgIAorICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9m
ZnNldCkKKyAgICAgICAgcmV0dXJuIHdhdGNoQWJzZW5jZU9mUHJvcGVydHkob2JqZWN0LCB1aWQs
IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkpOworICAgIAorICAgIHJldHVybiB3YXRjaFBy
ZXNlbmNlT2ZQcm9wZXJ0eShvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKK30KKwog
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0
ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQo
Y29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSwyNCBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZElkZW50
aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQogICAg
IERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBtX3BsYW4ud2F0Y2hw
b2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBrZXkgaXMgYWxyZWFk
eSBpbnZhbGlkLgorICAgIGJvb2wgYWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRp
dHkgb2YgdGhpcyBjb21waWxhdGlvbiBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGhhdmluZyB0aGUgZ2l2
ZW4gcHJvcGVydHkgd2l0aAorICAgIC8vIHRoZSBnaXZlbiBvZmZzZXQgYW5kIGF0dHJpYnV0ZXMu
IFJldHVybnMgZmFsc2UgaWYgd2F0Y2hpbmcgZm9yIHRoaXMgaXMgaW1wb3NzaWJsZS4KKyAgICBi
b29sIHdhdGNoUHJlc2VuY2VPZlByb3BlcnR5KAorICAgICAgICBKU09iamVjdCosIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAg
ICAKKyAgICAvLyBHYXRlIHRoZSB2YWxpZGl0eSBvZiB0aGlzIGNvbXBpbGF0aW9uIG9uIHRoZSBn
aXZlbiBvYmplY3QgbGFja2luZyB0aGUgZ2l2ZW4gcHJvcGVydHkuCisgICAgLy8gUmV0dXJucyBm
YWxzZSBpZiB3YXRjaGluZyBmb3IgdGhpcyBpcyBpbXBvc3NpYmxlLgorICAgIGJvb2wgd2F0Y2hB
YnNlbmNlT2ZQcm9wZXJ0eSgKKyAgICAgICAgSlNPYmplY3QqLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKTsKKyAgICAKKyAgICAvLyBHYXRlIHRoZSB2YWxpZGl0eSBvZiB0aGlzIGNvbXBpbGF0aW9u
IG9uIHRoZSBnaXZlbiBvYmplY3QgZWl0aGVyIGhhdmluZywgb3IgbGFja2luZywgdGhlCisgICAg
Ly8gcHJvcGVydHkgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgY2xhaW1z
IHRvIGhhdmUgKG9yIGxhY2spIHRoZSBwcm9wZXJ0eS4KKyAgICBib29sIHdhdGNoUHJlc2VydmF0
aW9uT2ZQcm9wZXJ0eSgKKyAgICAgICAgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVu
ZXNzRm9yKENvZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0Zv
cihJbmxpbmVDYWxsRnJhbWUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2
b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRo
RnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVj
dHVyZS0+bmVlZHNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0ucmVnaXN0
ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRX
YXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwpAQCAtMTMyLDQ3ICsxMzIsMzAgQEAgc3RhdGljIHZvaWQgcmVwYXRj
aEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAg
TWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMs
IEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0
cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlk
KCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5m
by5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3Qg
bXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKLSAgICAgICAgICAgIC8v
IHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG9rID0gYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgICAgIGpp
dCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaml0
LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5lZmZlY3RpdmVXYXRjaHBvaW50KTsKLSAgICAgICAg
ICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KKyAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICBjb25kaXRp
b24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5m
by5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNj
cmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGJyYW5jaFN0cnVj
dHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgICAgIGJyYW5jaFN0
cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNyb0Fzc2VtYmxl
ciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNj
cmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAgIAotICAgIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90
b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCi0g
ICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CitzdGF0aWMgdm9pZCBjaGVja09iamVj
dFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBjaGVja09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQogfQogCiBzdGF0aWMg
dm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0
KQpAQCAtMjk2LDExICsyNzksMTIgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25z
dCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwK
LSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgRnVuY3Rpb25QdHIgY3VzdG9t
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxv
Y2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LmFyZVN0aWxsVmFsaWRBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKKyAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guYmFzZUdQUik7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3Mo
CkBAIC0zNDYsMzMgKzMzMCwyNSBAQCBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAg
IH0KIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAg
aWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkg
fHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAg
dm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAogICAgIGlmICh3YXRjaHBvaW50U2V0
KQogICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2Rl
QmxvY2spKTsKIAotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsgCi0g
ICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIHBy
b3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4
ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b09iamVj
dC0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAg
dm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBwcm90b09iamVjdCwgcHJvdG9TdHJ1
Y3R1cmUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFp
bHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+
Z2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKCFwcm90b09iamVjdCB8fCBwcm90b09i
amVjdC0+c3RydWN0dXJlKCkgPT0gY3VyclN0cnVjdHVyZSk7Ci0gICAgfQorICAgIGNoZWNrT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywg
c3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAKKyAgICBTdHJ1
Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgaWYgKGNvbmRpdGlvblNldC5pc0VtcHR5KCkpCisg
ICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgZWxzZQorICAgICAgICBjdXJy
U3RydWN0dXJlID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0
cnVjdHVyZSgpOwogICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cygqdm0sIG9mZnNldCk7CisgICAgCiAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NH
UFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIGlmIChraW5kICE9IEdldFVuZGVmaW5lZCkgewotICAg
ICAgICBpZiAoY2hhaW4pIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGNsb2JiZXJlZCBzY3JhdGNoR1BSIGVhcmxp
ZXIsIHNvIHdlIGhhdmUgdG8gcmVsb2FkIGZyb20gYmFzZUdQUiB0byBnZXQgdGhlIHRhcmdldC4K
ICAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQogICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0
YXJnZXRPZmZzZXQoKSksIGJhc2VGb3JHZXRHUFIpOwpAQCAtNjI3LDkgKzYwMyw4IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFYKICAgICAgICAgYXNPYmplY3QoY2Vs
bCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKICAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKICAgICB9Ci0gICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkpOwogICAgIAotICAgIGlmICh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0
eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkp
CisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7
CkBAIC04MjcsMjEgKzgwMiwyMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRH
ZXRCeUlECiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0
KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBTdHJ1Y3R1cmVD
aGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgCisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgIAogICAgIGlm
IChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAgICAg
ICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCBzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAg
ICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgY29uZGl0aW9uU2V0
ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRl
bnQuaW1wbCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKAotICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVj
dHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKGNvdW50
ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KGV4ZWMsIHN0cnVjdHVyZSwg
c2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKKyAgICAgICAgCisgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRp
dGlvbigpLm9mZnNldCgpOwogICAgIH0KICAgICAKICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiBsaXN0ID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShzdHViSW5mbyk7CkBAIC04NTIs
NyArODI4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAg
IAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgYm9vbCByZXN1
bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVu
dCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZz
ZXQsIAorICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3Qp
LCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBvZmZzZXQsIAogICAgICAgICBzdHJ1Y3R1cmUsIGxv
YWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAKICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQ
YXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKQEAgLTg3MSw3ICs4NDcsNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgbGlzdC0+
YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwKLSAgICAgICAg
cHJvdG90eXBlQ2hhaW4sIGNvdW50KSk7CisgICAgICAgIGNvbmRpdGlvblNldCkpOwogICAgIAog
ICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRp
bmUuZ2V0KCkpOwogICAgIApAQCAtOTkzLDI2ICs5NjksMjggQEAgc3RhdGljIGJvb2wgZW1pdFB1
dFJlcGxhY2VTdHViKAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgU3RydWN0dXJlKiBl
bWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoRXhlY1N0YXRlKiBleGVjLCBW
TSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAot
ICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNpdGlvblN0dWIo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCisgICAgU3RydWN0
dXJlKiYgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KQogewogICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwog
ICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBwcm9wZXJ0eU9mZnNl
dDsKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBpZGVudC5pbXBsKCksIDAs
IHByb3BlcnR5T2Zmc2V0KTsKIAogICAgIGlmICghc3RydWN0dXJlIHx8ICFzdHJ1Y3R1cmUtPmlz
T2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCAhc3RydWN0dXJlLT5wcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hl
cmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKICAgICAvLyBlbm91Z2ggcmVn
aXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgogICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyA8IDYKICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ug
d2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKQEAgLTEwMjAsMTQg
Kzk5OCwxMyBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEKICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CiAgICAgaWYgKG9s
ZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJl
KSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gZW1pdFB1dFRyYW5z
aXRpb25TdHViCisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcyhleGVjLCBz
dHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBDb2RlTG9jYXRp
b25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwpAQCAt
MTA4MywxNyArMTA2MCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YkEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG9sZFN0cnVjdHVyZSkpOwogICAgIAotICAgIGFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgb2xkU3RydWN0dXJlLT5zdG9yZWRQ
cm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJl
Q2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIAotICAgIGlmIChwdXRL
aW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgewotICAgICAgICAgICAg
YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICgqaXQpLT5zdG9y
ZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWls
dXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICB9Ci0gICAg
fQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICBjb25kaXRpb25T
ZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBz
Y3JhdGNoR1BSMSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAg
ICAgCkBAIC0xMjI4LDcgKzExOTYsNyBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNp
dGlvblN0dWJBCiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQs
IGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChwYXRj
aEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygp
KQpAQCAtMTI1Niw4ICsxMjI0LDggQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRp
b25TdHViQQogICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgp
LAogICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0KLSAg
ICByZXR1cm4gb2xkU3RydWN0dXJlOworICAgIAorICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTEyODEsMTIgKzEyNDksMTEgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgIGlmIChzbG90LmJhc2UoKSA9PSBi
YXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAgICAgICAgIGlmIChzbG90LnR5
cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAKLSAgICAgICAgICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3Ry
dWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2lu
ZCk7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkKKyAgICAgICAgICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4
ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICAgICAgCiAg
ICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCkBAIC0xMjk0LDcgKzEyNjEsNyBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAg
ICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRy
YW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUs
IHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsKKyAgICAgICAg
ICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHB1dEtp
bmQgPT0gRGlyZWN0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKICAgICAgICAgfQpAQCAtMTMxMiwyMCArMTI3OSwyMiBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNw
aWxsTW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZTsKIAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAw
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwot
ICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3Qu
YmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9y
Q2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQsIG9mZnNldCk7
Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkg
eworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LmJh
c2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAg
IHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAg
ICAgfQorICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9u
KCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5j
YWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0Owog
ICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHVi
SW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAg
ICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1Yklu
Zm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xv
dCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsCiAgICAg
ICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSksCkBAIC0x
MzM2LDcgKzEzMDUsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlE
CiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90
LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNj
ZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWlu
LCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAg
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGlu
ZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwog
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBAIC0xMzgwLDE3ICsxMzQ5LDE2
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAgICAg
IGlmIChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUgdG8gcmVjdXJzaW9uLgogCi0gICAgICAgICAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVj
dHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBw
dXRLaW5kKTsKLQotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUpIAorICAgICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9u
U3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBw
dXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgICAgICAgICBz
dHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAgICAgICAgbGlzdC0+YWRk
QWNjZXNzKAogICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24oCiAgICAg
ICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAor
ICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LAogICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkpOwogCiAgICAgICAgIH0gZWxzZSB7
CkBAIC0xNDIzLDIxICsxMzkxLDI0IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWls
ZFB1dEJ5SWQKICAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2Fj
aGVhYmxlU2V0dGVyKCkpCiAgICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBE
b250U3BpbGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsK
LSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgc2l6ZV90
IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZSAhPSBzbG90LmJhc2UoKSkgewotICAg
ICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4
ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIAorICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1
ZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAg
ZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAg
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9
IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAog
ICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAg
Ym9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZv
cihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0
eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwKICAgICAgICAg
ICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50
U2xvd1BhdGhUYXJnZXQoKSksCkBAIC0xNDQ4LDcgKzE0MTksNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlk
QWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNj
ZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBz
dHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1
YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1
c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CkBAIC0xNDg3LDExICsxNDU4LDE1IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlS
ZXBhdGNoSW4oCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXRJZ25vcmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90QmFzZSA9IHdhc0ZvdW5kID8gc2xv
dC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVfdCBjb3VudCA9ICFmb3VuZFNsb3RC
YXNlIHx8IGZvdW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAgICAgICBub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgZm91bmRTbG90QmFzZSwgaWRl
bnQsIG9mZnNldElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlw
ZUNoYWluKQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7
CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5
cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xv
dEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoZXhlYywgc3Ry
dWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CkBAIC0xNTE2LDcgKzE0
OTEsNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAKICAgICB7CkBAIC0xNTQ3LDE4ICsxNTIx
LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgaWYg
KHNsb3Qud2F0Y2hwb2ludFNldCgpKQogICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCkt
PmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIFN0cnVj
dHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5
cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwot
ICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvdHlwZS0+c3RydWN0
dXJlKCk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgcHJvdG90eXBlLCBwcm90b1N0cnVjdHVyZSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJl
UHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVy
V2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50
KGNvZGVCbG9jaykpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAg
ICAgICAgfQorICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAg
ICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZh
aWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg2OTg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5NCw3ICsxOTQsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29u
c3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KICAg
ICBib29sIGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFy
eUtpbmQoKSA9PSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wgcHJvcGVy
dHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5j
YWNoZWREaWN0aW9uYXJ5S2luZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmcoKTsgfQorICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5k
CisgICAgICAgICAgICAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQor
ICAgICAgICAgICAgJiYgISh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAm
JiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpOworICAgIH0K
KyAgICAKKyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQorICAgICAgICAgICAg
JiYgdHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAgICAgICAgICYm
IHR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpOworICAgIH0KIAog
ICAgIC8vIFdlIHVzZSBTbG93UGF0aCBpbiBHZXRCeUlkU3RhdHVzIGZvciBzdHJ1Y3R1cmVzIHRo
YXQgbWF5IGdldCBuZXcgaW1wdXJlIHByb3BlcnRpZXMgbGF0ZXIgdG8gcHJldmVudAogICAgIC8v
IERGRyBmcm9tIGlubGluaW5nIHByb3BlcnR5IGFjY2Vzc2VzIHNpbmNlIHN0cnVjdHVyZXMgZG9u
J3QgdHJhbnNpdGlvbiB3aGVuIGEgbmV3IGltcHVyZSBwcm9wZXJ0eSBhcHBlYXJzLgpAQCAtMjAy
LDcgKzIxNCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlSW5mbygpLmhh
c0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpOwogICAgIH0KLQorICAgIAogICAgIC8vIFR5cGUg
YWNjZXNzb3JzLgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0
dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9v
dXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsNiArNTM4LDcgQEAgcHVibGljOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJX
YXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYsIFdhdGNocG9pbnQq
KTsKKyAgICAKICAgICAvLyBGSVhNRTogVXNlIEF0b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJn
ZWQgd2l0aCBJZGVudGlmaWVyLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJl
UHJvcGVydHkoY29uc3QgU3RyaW5nJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257048</attachid>
            <date>2015-07-18 21:02:51 -0700</date>
            <delta_ts>2015-07-19 16:14:07 -0700</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>155425</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY5ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODU0LDYgKzQ4NTgsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
Y3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29tcGxleEdldFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDggQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVG
b3IoCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50LCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0
dXJlKiBoZWFkU3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUgdGhhdAogICAg
IC8vIGhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpIGJ1dCBmb3Igd2hpY2ggd2UgZG9uJ3QK
QEAgLTQwLDMyICs0MCwyNiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNv
bXB1CiAgICAgLy8gdGhhdCwgeWV0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAKKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSk7CisgICAgCiAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAg
CiAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGlu
ZWFibGU7CiAgICAgCi0gICAgaWYgKGNoYWluICYmIGNoYWluQ291bnQpIHsKLSAgICAgICAgcmVz
dWx0Lm1fY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAg
ICAgICAgIHByb2ZpbGVkQmxvY2ssIGhlYWRTdHJ1Y3R1cmUsIGNoYWluLCBjaGFpbkNvdW50KSk7
CisgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC5tX2Nv
bmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgCi0gICAgICAgIGlmICghcmVzdWx0
Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICBpZiAoIXJlc3VsdC5tX2NvbmRpdGlv
blNldC5hcmVTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gc2tpcCgpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVy
ZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWluLT50YWtlc1Nsb3dQYXRo
SW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1Bh
dGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gcmVzdWx0
Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VycmVu
dFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBB
U1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOworICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY3Vy
cmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7Ci0gICAgfQorICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0gZWxzZQorICAgICAgICBy
ZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAg
ICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKICNkZWZpbmUgQ29t
cGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3RhdHVzKCkKICAgICAgICAg
OiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQot
ICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAgICAgfQogICAgIApAQCAt
OTcsMjEgKzk2LDE3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIENvbXBsZXhH
ZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBT
dHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAg
dW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgICAgIENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KLSAg
ICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljVmFsdWU7
IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9j
aGFpbi5nZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogcHJpdmF0
ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAgICB1
bnNpZ25lZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7Ci0gICAg
UmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYsOCArMjA2
LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlh
bnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSks
IGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKLSAg
ICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNl
dCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgp
LCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5j
cHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25z
dCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAg
LCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlv
blNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RG
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5SWRWYXJp
YW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zm
c2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlmIChjaGFp
biAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50
ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3Rh
bnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRCeUlkVmFy
aWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50JiBHZXRC
eUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAg
ICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29uc3RhbnRD
aGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90
aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0
aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5p
cXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03MiwxNCAr
NjcsMTQgQEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJl
dHVybiAqdGhpczsKIH0KIAotU3RydWN0dXJlU2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0
dXJlKCkgY29uc3QKK0pTT2JqZWN0KiBHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSgpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVTZXQoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvciht
X2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0
cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICAvLyBUaGlzIGN1cnJlbnRseSBh
c3N1bWVzIHRoYXQgR2V0QnlJZFZhcmlhbnQgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHNlbGYgaGl0
cyBhbmQgcHJvdG90eXBlCisgICAgLy8gaGl0cy4gV2hlbiB3ZSBzdXBwb3J0IG1pc3NlcywgdGhp
cyBzaG91bGQgYmUgc21hcnQgZW5vdWdoIHRvIHJldHVybiBudWxscHRyIGluc3RlYWQgb2YKKyAg
ICAvLyBjcmFzaGluZyBpbiBzbG93QmFzZUNvbmRpdGlvbigpLgorICAgIGlmIChtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2Nv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpOwogfQogCiBib29sIEdldEJ5
SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBA
IC05MCwxMCArODUsMTMgQEAgYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29u
cwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghYXJl
Q29tcGF0aWJsZShtX2NvbnN0YW50Q2hlY2tzLCBvdGhlci5tX2NvbnN0YW50Q2hlY2tzKSkKKyAg
ICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQgPQor
ICAgICAgICBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsK
KyAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKLSAgICBtZXJnZUludG8ob3RoZXIubV9jb25zdGFudENoZWNrcywgbV9jb25z
dGFudENoZWNrcyk7CisgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CiAg
ICAgbV9zdHJ1Y3R1cmVTZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOwogICAgIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMTEyLDggKzExMCw3IEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1
bXBJbkNvbnRleHQoUHJpbnQKICAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KAotICAgICAgICAi
PCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsCi0gICAgICAgICJb
IiwgbGlzdER1bXBJbkNvbnRleHQobV9jb25zdGFudENoZWNrcywgY29udGV4dCksICJdIik7Cisg
ICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5D
b250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSk7CiAgICAgaWYgKG1fYWx0ZXJuYXRlQmFz
ZSkKICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNW
YWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNl
dCA9ICIsIG9mZnNldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyAr
NDMsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiBwdWJsaWM6CiAgICAgR2V0QnlJZFZhcmlh
bnQoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJl
U2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsCi0gICAgICAgIGNv
bnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQoKSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0
YXR1cyA9IG51bGxwdHIpOwogICAgIAogICAgIH5HZXRCeUlkVmFyaWFudCgpOwpAQCAtNTUsOSAr
NTUsMTAgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQo
KSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENo
ZWNrczsgfQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9h
bHRlcm5hdGVCYXNlOyB9Ci0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsK
KworICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpTT2JqZWN0KiBhbHRl
cm5hdGVCYXNlKCkgY29uc3Q7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAgICAgCkBAIC03MCw4ICs3
MSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdldEJ5SWRTdGF0dXM7CiAgICAgCiAg
ICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNl
OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFBy
b3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMp
IHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KEpTVmFsdWUobV9vYmplY3QpLCBjb250
ZXh0KSwgIjogIiwgaW5Db250ZXh0KG1fY29uZGl0aW9uLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRp
dGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1
cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVx
dWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1
Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQo
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jv
b2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0
aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2Nv
bmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVj
dHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlQXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpLCBlZmZv
cnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVm
Zm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxl
KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQp
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2Vz
JiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52YWxpZGF0
ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29u
ZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6IG1f
b2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAgICAgIDog
bV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9vYmplY3Qo
b2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRC
YXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29i
amVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25k
aXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOyAK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91
dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIo
CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0
Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2UodWlkLCBwcm90b3R5cGUp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAg
ICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5j
ZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9
IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246
OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBK
U09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAg
ICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3Rv
dHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBl
cXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmpl
Y3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjplcXVp
dmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZh
bGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0
aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisgICAgSlNP
YmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJvcGVydHlD
b25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0KKyAgICAK
KyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0
dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5zaWduZWQg
aGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJpYnV0ZXMo
KTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24o
KS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9vbCBoYXNS
ZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWlyZWRWYWx1
ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkgKyBtX2Nv
bmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29uZGl0aW9u
ID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYg
bV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAg
Ly8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9y
IGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJlbnQgb2Jq
ZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVz
b2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzIGEgUHJl
c2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0
aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBjYXNlcyB5
b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAgLy8gd2ls
bCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5k
IEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50aW9uLCBp
bnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4KKyAgICBi
b29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1aWQoKSAh
PSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9CisgICAg
CisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9uYWxseSB0
YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUq
IGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwgdGhlbiB5
b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0IFN0cnVj
dHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBz
YW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9pZCBhIFRP
Q1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVy
ZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9v
bCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUq
KSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4g
aW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAg
ICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisg
ICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVy
ZSopIGNvbnN0OworICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0IGRlZmluaXRl
bHkgaGFzLCBvciBkZWZpbml0ZWx5IGRvZXMgbm90IGhhdmUsIHRoZSBwcm9wZXJ0eSByaWdodCBu
b3cuCisgICAgLy8gSWYgdHJ1ZSwgdGhlbiB3ZSBjb3VsZCBjb250aW51ZSB0byB2ZXJpZnkgdGhl
IHZhbGlkaXR5IGJ5IGNoZWNraW5nIGlmIHRoZSBvYmplY3QgaGFzIHRoZQorICAgIC8vIHN0cnVj
dHVyZS4gTWF5IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgaWYgdGhlIG9iamVjdCBhbmQg
c3RydWN0dXJlIGFsb25lIGRvbid0CisgICAgLy8gZ3VhcmFudGVlIHRoZSBjb25kaXRpb24uIFRo
aXMgaGFwcGVucyBmb3IgYW4gQWJzZW5jZSBjb25kaXRpb24gb24gYW4gb2JqZWN0IHRoYXQgbWF5
IGhhdmUKKyAgICAvLyBpbXB1cmUgcHJvcGVydGllcy4KKyAgICBib29sIGlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZv
cmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBv
biB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2lu
dC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
CisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFi
aWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7Cisg
ICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25k
aXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0
J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBh
IHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9v
bCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25k
aXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFu
Z2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5n
ZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24o
KS53YXRjaGluZ1JlcXVyaWVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9
CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNT
dGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25z
dCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBt
X29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0cnVj
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFz
aCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsg
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0
KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5v
YmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0K
KyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktpbmQo
CisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAg
ICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvbmRp
dGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90
QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0
aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAgIH0K
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlQ29tcGF0aWJs
ZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAg
aWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEgOiAqdGhpcykgewor
ICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiIDogb3RoZXIpIHsK
KyAgICAgICAgICAgIGlmICghYS5pc0NvbXBhdGlibGVXaXRoKGIpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om1l
cmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBj
b25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFvdGhlci5pc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3RoZXIpIHsKKyAgICAgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3RpbmdDb25kaXRpb24gOiAqdGhpcykgewor
ICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0Nv
bmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBub25FbXB0eShyZXN1bHQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjphcmVTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3Rp
bGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxWYWxp
ZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLnZhbGlkaXR5UmVx
dXJpZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmFyZVN0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25k
aXRpb24uaXNTdGlsbExpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoIlsiKTsKKyAg
ICBpZiAobV9kYXRhKQorICAgICAgICBvdXQucHJpbnQobGlzdER1bXBJbkNvbnRleHQobV9kYXRh
LT52ZWN0b3IsIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworbmFtZXNwYWNlIHsKKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisgICAgVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9w
ZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBv
YmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAg
Y2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7
CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2Uodm0sIG93
bmVyLCBvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlk
LCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICByZXR1cm4g
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcigKKyAgICAgICAgICAgIHZt
LCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlw
ZSgpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAg
fQorfQorCitlbnVtIENvbmN1cnJlbmN5IHsKKyAgICBNYWluVGhyZWFkLAorICAgIENvbmN1cnJl
bnQKK307CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnMoCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kLAorICAgIENvbmN1cnJl
bmN5IGNvbmN1cnJlbmN5ID0gTWFpblRocmVhZCkKK3sKKyAgICBBU1NFUlQoISFwcm90b3R5cGUg
PT0gKGNvbmRpdGlvbiA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpKTsKKyAgICAKKyAg
ICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IGNvbmRpdGlvbnM7CisgICAgCisgICAg
Zm9yICg7OykgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCisgICAgICAgICAg
ICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAg
CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChn
bG9iYWxPYmplY3QpOworICAgICAgICAKKyAgICAgICAgaWYgKHYuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIGlmICghcHJvdG90eXBlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
Pih2KTsKKyAgICAgICAgc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAg
ICAKKyAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIHJlcGVhdGVk
bHksIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0IHNob3VsZCBub3QgYmUKKyAgICAgICAgLy8gdHJl
YXRlZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKSB7CisgICAgICAgICAgICBpZiAoY29uY3VycmVuY3kgPT0gTWFpblRocmVhZCkKKyAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBvYmpl
Y3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQgdGhpc0NvbmRpdGlvbktpbmQ7CisgICAgICAg
IGlmIChraW5kID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSAmJiBvYmplY3QgIT0gcHJv
dG90eXBlKQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBQcm9wZXJ0eUNvbmRpdGlv
bjo6QWJzZW5jZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQg
PSBraW5kOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbmV3Q29u
ZGl0aW9uID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0
LCB1aWQsIHRoaXNDb25kaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFuZXdDb25kaXRpb24gfHwg
IW5ld0NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZh
bGlkKCk7CisgICAgICAgIAorICAgICAgICBjb25kaXRpb25zLmFwcGVuZChuZXdDb25kaXRpb24p
OworICAgICAgICAKKyAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdC4KKyAgICBz
d2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogewor
ICAgICAgICB1bnNpZ25lZCBwcmVzZW5jZUNvdW50ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0aW9ucykgeworICAgICAg
ICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgICAgICBwcmVzZW5jZUNvdW50Kys7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0
aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByZXNlbmNlQ291bnQg
PT0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlvbnMp
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IGtpbmQpOwor
ICAgIH0gfQorICAgIAorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9u
RW1wdHkoY29uZGl0aW9ucyk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3Mo
CisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2Vu
ZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAg
ICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJl
LCBudWxscHRyLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0
ZXIpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUs
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9u
OjpQcmVzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAor
ICAgICAgICB2bSwgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0LCBoZWFkU3RydWN0dXJlLCBudWxscHRy
LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlY2VPZlNldHRlciwKKyAgICAgICAgQ29uY3Vy
cmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2xk
dWUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0
aW9uYWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFj
Y2VzcyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRl
cmVzdGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRp
dGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBp
cyBuZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
KCkgeyB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFs
aWQoKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBub25FbXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2
ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRh
ID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgICpyZXN1bHQubV9kYXRhLT52ZWN0b3Ig
PSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRh
LT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2RhdGE7CisgICAgfQorICAgIAorICAgIHR5cGVk
ZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdp
bigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29u
c3Q7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90
eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNv
bmRpdGlvbiBvbiB0aGUgcHJvdG90eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0
aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5
cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFBy
ZXNlbmNlCisgICAgLy8gaW4gdGhlIHNldCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2Vu
Y2UuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9uIHNldHMgYXJlIGNvbXBhdGlibGUgaWYgdGhl
eSBhcmUgYm90aCB2YWxpZCBhbmQgZWFjaCBjb25kaXRpb24gaW4gKnRoaXMgaXMKKyAgICAvLyBj
b21wYXRpYmxlIHdpdGggZWFjaCBjb25kaXRpb24gaW4gb3RoZXIuCisgICAgYm9vbCBhcmVDb21w
YXRpYmxlV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0
OworICAgIAorICAgIC8vIEF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3IGNvbmRpdGlvbiBzZXQgYnkg
bWVyZ2luZyB0aGlzIG9uZSB3aXRoIHRoZSBvdGhlciBvbmUuIFRoaXMgd2lsbAorICAgIC8vIGZh
aWwgaWYgIXRoaXMuYXJlQ29tcGF0aWJsZVdpdGgob3RoZXIpLiBXaGVuIGl0IGZhaWxzLCBpdCBy
ZXR1cm5zIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRX
aXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29uc3Q7CisgICAg
CisgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbFZhbGlk
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIG5lZWRJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxsTGl2ZSgp
IGNvbnN0OworICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
CisgICAgLy8gSGVscGVycyBmb3IgdXNpbmcgdGhpcyBpbiBhIHVuaW9uLgorICAgIHZvaWQqIHJl
bGVhc2VSYXdQb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lk
Kj4obV9kYXRhLmxlYWtSZWYoKSk7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBhZG9wdFJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
ZGF0YSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBmcm9tUmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0g
c3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gSW50ZXJuYWxseSwgdGhpcyByZXByZXNlbnRz
IEludmFsaWQgdXNpbmcgYSBwb2ludGVyIHRvIGEgRGF0YSB0aGF0IGhhcyBhbiBlbXB0eSB2ZWN0
b3IuCisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXBhY3Qg
YnkgaGF2aW5nIGl0IGludGVybmFsbHkgdXNlIGEgdmVjdG9yIHRoYXQganVzdCBoYXMKKyAgICAv
LyB0aGUgbm9uLXVpZCBwb3J0aW9uIG9mIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBhbmQgdGhl
biByZXF1aXJpbmcgdGhhdCB0aGUgY2FsbGVycyBvZiBhbGwKKyAgICAvLyBvZiB0aGUgQVBJcyBz
dXBwbHkgdGhlIHVpZC4KKyAgICAKKyAgICBjbGFzcyBEYXRhIDogVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8RGF0YT4geworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhKTsKKyAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAg
RGF0YSgpIHsgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uPiB2ZWN0b3I7CisgICAgfTsKKyAgICAKKyAgICBSZWZQdHI8RGF0YT4gbV9kYXRhOworfTsK
KworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVy
dHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNP
YmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKworT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzcsMTQgKzM3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBHZXRCeUlkQWNj
ZXNzOjpHZXRCeUlkQWNjZXNzKAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjaGFpbkNv
dW50KQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KQogICAgIDogbV90eXBlKHR5cGUpCiAgICAgLCBtX2NoYWlu
Q291bnQoY2hhaW5Db3VudCkKICAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJl
KQorICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9zdHViUm91dGlu
ZShzdHViUm91dGluZSkKIHsKLSAgICBpZiAoY2hhaW4pCi0gICAgICAgIG1fY2hhaW4uc2V0KHZt
LCBvd25lciwgY2hhaW4pOwogfQogCiBHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCkBA
IC03MSw3ICs3MCw3IEBAIGJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYK
IHsKICAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NoYWluICYmICFIZWFwOjpp
c01hcmtlZChtX2NoYWluLmdldCgpKSkKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzU3RpbGxM
aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZp
c2l0V2VhayhyZXBhdGNoQnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MywxMyArNTMs
MTIgQEAgcHVibGljOgogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoKQogICAgICAgICA6IG1fdHlw
ZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudCgwKQogICAgIHsKICAgICB9CiAgICAg
CiAgICAgR2V0QnlJZEFjY2VzcygKICAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgU3Ry
dWN0dXJlQ2hhaW4qID0gMCwgdW5zaWduZWQgY2hhaW5Db3VudCA9IDApOworICAgICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpKTsKICAgICAKICAgICB+R2V0QnlJZEFjY2VzcygpOwogICAgIApAQCAtNzIsOCArNzEsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZS5nZXQoKTsgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigp
IGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbkNvdW50OyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9u
U2V0OyB9CiAgICAgCiAgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAg
ICB7CkBAIC05MSw5ICs4OSw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9j
azsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291
bnQ7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIG1fY29uZGl0aW9uU2V0OyAvLyBGSVhNRSB3aGF0IGFib3V0IGJhcnJpZXJzPwogICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTEsNyArNTEsOCBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1
CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9v
bGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91
c1N0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHVi
SW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2No
YWluLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOworICAgICAg
ICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRv
cHRSYXdQb2ludGVyKAorICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5y
YXdDb25kaXRpb25TZXQpOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZv
LnN0dWJSb3V0aW5lOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC02NCw2ICs2NSw5IEBA
IFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKIAogYm9vbCBQdXRCeUlk
QWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikgY29uc3QKIHsK
KyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFJlcGxhY2U6CiAg
ICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQpAQCAtNzQs
MTUgKzc4LDExIEBAIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25l
d1N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0dGVyOgogICAgIGNhc2UgQ3VzdG9tU2V0
dGVyOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6
OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRC
eUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWlu
Q291bnQoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTYyLDE0ICs2MSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0
dXJlQ2hhaW4qIGNoYWluLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZSkKICAgICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICBy
ZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIG9sZFN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVj
dHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFp
bi5zZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9
IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAg
ICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTk1LDggKzk0LDcgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAog
ICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNo
YWluQ291bnQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQsCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNl
dHRlciwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAg
ICAgewpAQCAtMTA0LDEwICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3Mg
cmVzdWx0OwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3Ry
dWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlm
IChjaGFpbikgewotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hh
aW4pOwotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAg
ICAgIH0KKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAg
ICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3Vs
dC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBA
IC0xNDYsMTcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJl
LmdldCgpOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXND
dXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAg
ICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1Nl
dHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAg
IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGlu
ZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAgLTE3OCw4ICsxNjMsNyBAQCBwcml2YXRl
OgogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
b2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJl
OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25l
ZCBtX2NoYWluQ291bnQ7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7CiAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7
CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAg
ICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG91dC5wcmludChtX2tpbmQsICIgb2YgIiwgbV91aWQpOworICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCIgYXQgIiwgbV9v
ZmZzZXQsICIgd2l0aCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAg
IG91dC5wcmludCgiIHdpdGggcHJvdG90eXBlICIsIGluQ29udGV4dChKU09iamVjdChwcm90b3R5
cGUoKSksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXF1aXZhbGVuY2U6
CisgICAgICAgIG91dC5wcmludCgiIHdpdGggIiwgaW5Db250ZXh0KEpTVmFsdWU6OmVuY29kZShy
ZXF1aXJlZFZhbHVlKCkpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlv
bjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTT2JqZWN0KiBiYXNlKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRy
aWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYg
KGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0dHJpYnV0ZXMgIT0gYXR0cmli
dXRlcygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQWJzZW5jZTogeworICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSkgIT0gaW52YWxp
ZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpICE9IHByb3RvdHlwZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQoKSkgIT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAg
aWYgKGN1cnJlbnRBdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgQ3VzdG9tQWNjZXNzb3IpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgICAgIAorICAgIGNhc2UgRXF1aXZhbGVuY2U6IHsKKyAgICAgICAgaWYgKCFiYXNlIHx8
IGJhc2UtPnN0cnVjdHVyZSgpICE9IHN0cnVjdHVyZSkgeworICAgICAgICAgICAgLy8gQ29uc2Vy
dmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBzaW5jZSB3ZSBjYW5ub3QgdmVyaWZ5IHRoaXMgb25lIHdp
dGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgICAgLy8gb2JqZWN0LgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyBzb21ld2hhdCByYWN5LCBhbmQgbWF5YmUgbW9yZSByaXNreSB0aGFuIHdlIHdhbnQuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKKyAg
ICAgICAgCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIEpTVmFsdWUgY3VycmVudFZhbHVlID0g
YmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRPZmZzZXQpOworICAgICAgICBpZiAoY3VycmVudFZhbHVl
ICE9IHJlcXVpcmVkVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVy
ZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6Cisg
ICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9u
Ojppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlKSBjb25z
dAoreworICAgIGlmICghaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoc3RydWN0dXJlLCBiYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3Vy
cmVudGx5IHdlIGFzc3VtZSB0aGF0IGFuIGltcHVyZSBwcm9wZXJ0eSBjYW4gY2F1c2UgYSBwcm9w
ZXJ0eSB0byBhcHBlYXIsIGFuZCBjYW4gYWxzbworICAgIC8vICJzaGFkb3ciIGFuIGV4aXN0aW5n
IEpTIHByb3BlcnR5IG9uIHRoZSBzYW1lIG9iamVjdC4gSGVuY2UgaXQgYWZmZWN0cyBib3RoIHBy
ZXNlbmNlIGFuZAorICAgIC8vIGFic2VuY2UuIEl0IGRvZXNuJ3QgYWZmZWN0IEFic2VuY2VPZlNl
dHRlciBiZWNhdXNlIGltcHVyZSBwcm9wZXJ0aWVzIGFyZW4ndCBldmVyIHNldHRlcnMuCisgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToK
KyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygp
Lmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0
Y2hhYmxlV2hlblZhbGlkKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgRXF1aXZhbGVuY2U6IHsKKyAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KCkpOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIHdoZW4gc29tZSB2YXJpYW50IG9mIGlzVmFsaWQgcmV0dXJuZWQgdHJ1ZSwgd2hpY2gKKyAg
ICAgICAgLy8gaW1wbGllcyB0aGF0IHdlIGFscmVhZHkgY29uZmlybWVkIHRoYXQgdGhlIHN0cnVj
dHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHkuIFdlIHNob3VsZAorICAgICAgICAvLyBhbHNvIGhh
dmUgdmVyaWZpZWQgdGhhdCB0aGUgU3RydWN0dXJlIGlzIGEgY2FjaGVhYmxlIGRpY3Rpb25hcnks
IHdoaWNoIG1lYW5zIHdlCisgICAgICAgIC8vIHNob2xkbid0IGhhdmUgYSBUT0NUT1UgcmFjZSBl
aXRoZXIuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsK
KyAgICAgICAgCisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAgICAgICAgc3dpdGNoIChl
ZmZvcnQpIHsKKyAgICAgICAgY2FzZSBNYWtlTm9DaGFuZ2VzOgorICAgICAgICAgICAgc2V0ID0g
c3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5zdXJlV2F0Y2hhYmlsaXR5OgorICAgICAg
ICAgICAgc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCgK
KyAgICAgICAgICAgICAgICAqSGVhcDo6aGVhcChzdHJ1Y3R1cmUpLT52bSgpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghc2V0
LT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb3BlcnR5Q29u
ZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSwgV2F0Y2hhYmlsaXR5RWZmb3J0
IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJs
ZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRp
b246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFz
ZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGls
bFZhbGlkKHN0cnVjdHVyZSwgYmFzZSkKKyAgICAgICAgJiYgaXNXYXRjaGFibGVXaGVuVmFsaWQo
c3RydWN0dXJlLCBlZmZvcnQpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxs
TGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpICYmICFIZWFwOjppc01hcmtl
ZChwcm90b3R5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoaGFz
UmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKQorICAgICAgICAmJiBy
ZXF1aXJlZFZhbHVlKCkuaXNDZWxsKCkKKyAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKHJlcXVp
cmVkVmFsdWUoKS5hc0NlbGwoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVu
Y2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICho
YXNQcm90b3R5cGUoKSkKKyAgICAgICAgdHJhY2tlZC5jaGVjayhwcm90b3R5cGUoKSk7CisgICAg
CisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKSkKKyAgICAgICAgdHJhY2tlZC5jaGVjayhyZXF1
aXJlZFZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAg
IGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmlu
dCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRl
cjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJp
bnQoIkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNv
bmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvcGVydHlDb25kaXRp
b25faAorI2RlZmluZSBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBU
cmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgUHJvcGVydHlDb25kaXRpb24geworcHVibGljOgor
ICAgIGVudW0gS2luZCB7CisgICAgICAgIFByZXNlbmNlLAorICAgICAgICBBYnNlbmNlLAorICAg
ICAgICBBYnNlbmNlT2ZTZXR0ZXIsCisgICAgICAgIEVxdWl2YWxlbmNlIC8vIEFuIGFkYXB0aXZl
IHdhdGNocG9pbnQgb24gdGhpcyB3aWxsIGJlIGEgcGFpciBvZiB3YXRjaHBvaW50cywgYW5kIHdo
ZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9ucywgd2Ugd2lsbCBzZXQgdGhlIHJlcGxhY2VtZW50
IHdhdGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1Y3R1cmUuCisgICAgfTsKKyAgICAKKyAgICBQcm9w
ZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tp
bmQoUHJlc2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7Cisg
ICAgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChBYnNl
bmNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2VXaXRob3V0QmFycmllcihV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVp
ZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZXNlbmNlOworICAgICAgICByZXN1bHQudS5w
cmVzZW5jZS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJp
YnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiwgSlND
ZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRC
YXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAg
eworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3Vp
ZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2U7CisgICAgICAgIHJlc3Vs
dC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAg
ICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09i
amVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3du
ZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNl
dHRlcldpdGhvdXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09i
amVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0
OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBB
YnNlbmNlT2ZTZXR0ZXI7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJv
dG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVy
biBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJy
aWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91
aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFcXVpdmFsZW5jZTsKKyAgICAgICAg
cmVzdWx0LmVxdWl2YWxlbmNlLnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICB9
CisgICAgICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZSgKKyAg
ICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gZXF1aXZhbGVu
Y2VXaXRob3V0QmFycmllcih1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBQcmVzZW5jZTsg
fTsKKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAKKyAg
ICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IFBy
ZXNlbmNlIH07CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNl
dDsKKyAgICB9CisgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhp
cyAmJiBtX2tpbmQgPT0gUHJlc2VuY2UgfTsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBdHRyaWJ1dGVzKCkpOworICAgICAgICByZXR1
cm4gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1Byb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgKG1fa2luZCA9PSBBYnNlbmNlIHx8IG1f
a2luZCA9PSBBYnNlbmNlT2ZTZXR0ZXIpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUHJvdG90eXBlKCkpOworICAgICAgICByZXR1
cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNSZXF1aXJl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gRXF1aXZhbGVuY2U7
IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGhhc1JlcXVpcmVkVmFsdWUoKSk7CisgICAgICAgIHJldHVybiB1LmVxdWl2YWxlbmNlLnZh
bHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91aWQpICsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5j
ZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAgICAgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTT2Jq
ZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBFbmNvZGVkSlNW
YWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVz
ZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldCA9PSBvdGhlci51LnBy
ZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2VuY2UuYXR0cmlidXRlcyA9
PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAg
ICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdS5hYnNlbmNl
LnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOworICAgICAgICBjYXNlIEVx
dWl2YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIGEuZXF1aXZhbGVuY2UudmFsdWUgPT0gb3Ro
ZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gVHdv
IGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRo
ZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMuIElmCisgICAgLy8gZmFsc2UgaXMgcmV0dXJuZWQs
IHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLSBmb3IgZXhh
bXBsZSBpZiB0aGVyZSBpcworICAgIC8vIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRo
ZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBnZW5lcmFsIG9mIHRoZSB0d28K
KyAgICAvLyB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZp
YyBvZiB0aGUgdHdvLiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UKKyAgICAvLyBmb3IgY29u
dHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUgdWlkLiBC
eSBjb252ZW50aW9uLCBpbnZhbGlkCisgICAgLy8gY29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJs
ZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzIHx8ICFv
dGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzID09
IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBDaGVj
a3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29u
J3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNv
bnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9w
ZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGls
bFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFs
aWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsK
KyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCBkZWZpbml0ZWx5IGhhcywgb3IgZGVm
aW5pdGVseSBkb2VzIG5vdCBoYXZlLCB0aGUgcHJvcGVydHkgcmlnaHQgbm93LgorICAgIC8vIElm
IHRydWUsIHRoZW4gd2UgY291bGQgY29udGludWUgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBieSBj
aGVja2luZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIE1heSBjb25z
ZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9u
ZSBkb24ndAorICAgIC8vIGd1YXJhbnRlZSB0aGUgY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9y
IGFuIEFic2VuY2UgY29uZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlCisgICAgLy8g
aW1wdXJlIHByb3BlcnRpZXMuCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNP
YmplY3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2Vz
LCB0aGUgY29uZGl0aW9uIGlzIG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNo
YWJsZSBieSBlbmFibGluZyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3Ig
ZXhhbXBsZSwgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNv
bWUKKyAgICAvLyBhY2Nlc3MgaXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVj
dHVyZS4gVGhpcyBpcyBtYWlubHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5
IHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBp
dCdzIGFsd2F5cyBzYWZlIHRvCisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0
IHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmls
aXR5RWZmb3J0IHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhh
dCB3ZSBkb24ndCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAg
Ly8gb2JqZWN0LCBhbmQgaW1wbGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0
byBiZSB3YXRjaGFibGUgdGhlbiB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJs
ZS4gVGhpcyBpcyBtYW5kYXRvcnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBp
cyBhbHNvIHNvbWV3aGF0CisgICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGlu
ZyB3aGV0aGVyIHRvIHdhdGNoIGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgor
ICAgICAgICAvLyBub3QgZnJvbSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBz
ZWUgaWYgd2Ugc2hvdWxkIGFkYXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5v
dCBiZWluZyBpbml0aWFsaXplZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRv
bid0IGtub3cgZW5vdWdoCisgICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8g
d2F0Y2ggLS0gYXMgaW4sIHRoZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAg
ICAgICAvLyBzdGFiaWxpemVkIHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBj
b25kaXRpb24gd2lsbCBob2xkIGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhv
bGQgZm9yIGEgd2hpbGUgYWxyZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAg
CisgICAgICAgIC8vIERvIHdoYXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5
IGNhbiBiZSB3YXRjaGVkLCBpZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNl
cnZhYmxlIGVmZmVjdC4gRm9yIG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3Vy
ZSB0aGF0IGEgcHJvcGVydHkKKyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBl
bmFibGVkIGlmIGl0IGhhZG4ndCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlz
CisgICAgICAgIC8vIGZyb20gSklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcg
d2F0Y2hwb2ludHMgaXMgbm90IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxp
dHkKKyAgICB9OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlk
IGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisg
ICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUg
cHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0g
bnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAg
CisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVu
Zm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50
IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0
dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtl
Tm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50
bHksIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAg
cmV0dXJuICEhKnRoaXM7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2Vt
ZW50V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBt
X2tpbmQgPT0gRXF1aXZhbGVuY2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wg
aXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhj
b25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaXNX
YXRjaGFibGVXaGVuVmFsaWQoU3RydWN0dXJlKiwgV2F0Y2hhYmlsaXR5RWZmb3J0KSBjb25zdDsK
KworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKKyAgICBLaW5kIG1fa2luZDsKKyAgICB1
bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQ7CisgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB9IHByZXNlbmNl
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZTsKKyAg
ICAgICAgfSBhYnNlbmNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRW5jb2RlZEpT
VmFsdWUgdmFsdWU7CisgICAgICAgIH0gZXF1aXZhbGVuY2U7CisgICAgfSB1OworfTsKKworc3Ry
dWN0IFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgUHJvcGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29u
c3QgUHJvcGVydHlDb25kaXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOwor
ICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6UHJvcGVydHlDb25kaXRpb246
OktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAg
dHlwZWRlZiBKU0M6OlByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPEpTQzo6UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6
UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05MCwxOSArOTAsMTggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRnJvbQogICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTElu
dDo6Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkp
OwogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gaW5zdHJ1Y3Rpb25bNl0udS5z
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gaW5zdHJ1Y3Rpb25b
N10udS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKLSAgICBBU1NFUlQobmV3U3RydWN0dXJlKTsKLSAg
ICBBU1NFUlQoY2hhaW4pOwogICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAg
IAotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBpbnRlbmRlZENoYWluOwotICAg
IGlmIChjaGFpbikKLSAgICAgICAgaW50ZW5kZWRDaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKTsKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKGluc3RydWN0
aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsKQorICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6
Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkpIHsK
KyAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5U2V0dGVyTWlzc29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICpwcm9maWxl
ZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1
aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CiAgICAgCi0gICAgcmV0
dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBp
bnRlbmRlZENoYWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6
dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQp
OwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsxNjQsMTQgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSAKICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFp
bjsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbikg
ewotICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4oCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLT51LnB1
dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5hcmVTdGlsbFZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCiAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgp
LAotICAgICAgICAgICAgICAgIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkBAIC0yMTksMTUgKzIxNiwxMSBAQCBQdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAg
IGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIFJlZlB0
cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgICAgICBpZiAoYWNj
ZXNzLmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVk
QmxvY2ssIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLmNoYWluKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNl
dCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmFyZVN0aWxsVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7
CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAot
ICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1
Y3R1cmUoKSwgY2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vz
cy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9m
ZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCkBAIC0yNTMsNyArMjQ2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2Zp
bGVkQmxvY2ssICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRW
YXJpYW50OjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBs
ZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29t
cGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFdU
Rjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMzY4LDIyICszNjEsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5p
c09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgCi0gICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAg
ICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAot
ICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFk
LW9ubHkgcHJvcGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICAgICAgaWYgKGNoYWluLT5t
YXlJbnRlcmNlcHRTdG9yZVRvKHVpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHBy
b3RvdHlwZSBjaGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94
aWVzIG9yIGRpY3Rpb25hcmllcykKLSAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhlIGRp
Y3Rpb25hcnkgY2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbm90
IGJlZW4KLSAgICAgICAgICAgIC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0cmFu
c2l0aW9uLiBBbmQgcmVhbGx5IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKLSAgICAgICAg
ICAgIC8vIGJhaWwgaGVyZSBpcyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcg
dGhlIG9wdGltaXppbmcgSklUIGdvIGFuZCBmbGF0dGVuCi0gICAgICAgICAgICAvLyBkaWN0aW9u
YXJpZXMgaWYgd2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3
ZXJlIG5ldmVyIHVzZWQgYXMKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFi
bGUgcHJvdG90eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29t
ZSBvZgotICAgICAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwuCi0g
ICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6
ZWQoKSkKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QtPnZtKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICB9CiAgICAgCkBAIC0zOTQsNyArMzc2LDcg
QEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBBU1NF
UlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQg
PSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4uZ2V0KCksIG9mZnNldCkpOworICAg
ICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9u
LCBjb25kaXRpb25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNw
cAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNyBAQCBQdXRCeUlkVmFy
aWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9raW5kID0gb3RoZXIubV9raW5k
OwogICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CiAgICAgbV9uZXdT
dHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0g
b3RoZXIubV9jb25zdGFudENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2Fs
dGVybmF0ZUJhc2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsK
ICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNjQsMjkgKzYzLDI2IEBA
IFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGMKIAogUHV0QnlJZFZhcmlh
bnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IEludGVuZGVk
U3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1
bHQubV9raW5kID0gVHJhbnNpdGlvbjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRT
dHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAg
IGlmIChzdHJ1Y3R1cmVDaGFpbikKLSAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNr
cyhyZXN1bHQubV9jb25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0g
Y29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0g
ICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlu
a1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IGNhbGxMaW5rU3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1
bHQubV9raW5kID0gU2V0dGVyOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKLSAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQu
bV9jb25zdGFudENoZWNrcyk7Ci0gICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBjaGFp
bi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICB9CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0
ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1
bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTEzNCwxNiArMTMwLDEyIEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1h
a2VzQ2FsbHMoKSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1
Y3R1cmVTZXQgUHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAorSlNPYmplY3Qq
IFB1dEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoa2lu
ZCgpID09IFNldHRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAg
IHJldHVybiBzdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVB
U0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICBSRUxFQVNF
X0FTU0VSVChtX2tpbmQgPT0gU2V0dGVyKTsKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKTsKIH0KIAogYm9vbCBQdXRCeUlkVmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQpAQCAtMTk2LDYgKzE4
OCw3IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICBBU1NF
UlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLndy
aXRlc1N0cnVjdHVyZXMoKSk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFn
ZSgpKTsKKyAgICBBU1NFUlQoIXJlcGxhY2UuY29uZGl0aW9uU2V0KCkpOwogICAgIAogICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAogICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKQEAgLTIzMiwxMyArMjI1LDEzIEBAIHZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAg
IjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+
ICIsCiAgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29u
dGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVj
a3MoKSwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAg
ICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBv
ZmZzZXQoKSwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRl
cjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4
dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNv
bnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29udGV4dCksICJdIik7CisgICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBpZiAobV9hbHRl
cm5hdGVCYXNlKQogICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBp
bkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CiAgICAgICAgIG91
dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg2OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAg
ICAgICAgOiBtX2tpbmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIp
Ci0gICAgICAgICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQo
aW52YWxpZE9mZnNldCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYgKzUzLDE1IEBAIHB1YmxpYzoK
ICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRW
YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQ
dXRCeUlkVmFyaWFudCByZXBsYWNlKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQg
cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAg
c3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29u
c3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJv
cGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0g
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsCi0gICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwog
ICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIApAQCAt
MTAwLDEwICs5OCw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25k
aXRpb25TZXQ7IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAogICAg
IHsKQEAgLTExMSwxMyArMTA2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZzZXQ7
CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fYWx0
ZXJuYXRlQmFzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUo
KSBjb25zdDsKKyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0OwogICAgIAogICAg
IENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewpAQCAtMTM2LDgg
KzEyNSw3IEBAIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJlU2V0IG1f
b2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBt
X2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsMjQgKzQ2LDI5IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQqIFN0cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxp
Y2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBv
aW50cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCBy
ZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0
IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcu
Ci0gICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8o
KSk7CisgICAgaWYgKCFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJl
V2F0Y2hhYmlsaXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBt
eSBvd24gZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAg
ICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0
IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2
ZXJzYWwgZm9yIGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAg
ICAgICBtX2hvbGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKQog
ewogfQogCi1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJu
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFk
KTsKIH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJl
ZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9j
ayogY29kZUJsb2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpCiB7CiAgICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVm
KG5ldyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykp
OwpAQCAtNzIsNyArNzcsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRj
aHBvCiAgICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwog
ICAgIH0KICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAg
cmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg2
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSAr
NDcsMTEgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9s
ZGVyKQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAg
IDogbV9rZXkoa2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25l
eHQoV1RGOjptb3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsK
ICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpA
QCAtODMsMTEgKzgxLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCogYWRkV2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQq
IGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAg
CiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVy
ZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvKik7CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgs
MTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNj
ZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Cisg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZToKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25z
IGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgs
MTAgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8
ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAg
ICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdl
dCgpKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAg
ICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg2OTg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewog
CiAgICAgLy8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2
b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVy
ZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAg
ICBpZiAoaXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm8gewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1
LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAg
dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFz
ZVJhd1BvaW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3
NSwxMCArMTc1LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4g
PSB0cnVlOwogICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCogYWRkV2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKICAg
ICB7CiAgICAgICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3Vy
ZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29k
ZUJsb2NrLCB0aGlzKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMs
IGNvbmRpdGlvbik7CiAgICAgfQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpAQCAtMjE3
LDIzICsyMTgsMTIgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIFdy
aXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAgICAgICB9
IGdldEJ5SWRTZWxmOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJh
cnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAgICAgYm9v
bCBpc0RpcmVjdDsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVy
ZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwot
ICAgICAgICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJl
Y3QgOiAxOwotICAgICAgICB9IGdldEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0QnlJZExp
c3Q7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0
cnVjdHVyZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1
cmVDaGFpbj4gY2hhaW47CisgICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7CiAgICAg
ICAgIH0gcHV0QnlJZFRyYW5zaXRpb247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBX
cml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkua2luZCgpID09IFByb3BlcnR5Q29u
ZGl0aW9uOjpFcXVpdmFsZW5jZSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5p
c1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFk
ZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3N0cnVjdHVyZVdhdGNocG9pbnQpOworICAgIAorICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fa2V5LT5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdl
dENvbmN1cnJlbnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9r
ZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNl
dChvZmZzZXQpOworICAgIHNldC0+YWRkV2F0Y2hwb2ludCgmbV9wcm9wZXJ0eVdhdGNocG9pbnQp
OworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6Zmly
ZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgLy8gT25lIG9mIHRoZSB3YXRjaHBv
aW50cyBmaXJlZCwgYnV0IHRoZSBvdGhlciBvbmUgZGlkbid0LiBNYWtlIHN1cmUgdGhhdCBuZWl0
aGVyIG9mIHRoZW0gYXJlCisgICAgLy8gaW4gYW55IHNldCBhbnltb3JlLiBUaGlzIHNpbXBsaWZp
ZXMgdGhpbmdzIGJ5IGFsbG93aW5nIHVzIHRvIHJlaW5zdGFsbCB0aGUgd2F0Y2hwb2ludHMKKyAg
ICAvLyB3aGVyZXZlciBmcm9tIHNjcmF0Y2guCisgICAgaWYgKG1fc3RydWN0dXJlV2F0Y2hwb2lu
dC5pc09uTGlzdCgpKQorICAgICAgICBtX3N0cnVjdHVyZVdhdGNocG9pbnQucmVtb3ZlKCk7Cisg
ICAgaWYgKG1fcHJvcGVydHlXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fcHJvcGVy
dHlXYXRjaHBvaW50LnJlbW92ZSgpOworICAgIAorICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQ
cm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxs
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hv
d0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcg
d2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1f
Y29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0
OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRl
dGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwob3V0LnRvQ1N0cmluZygp
LmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0
aW9uLCAmZGV0YWlsKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBG
aXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09G
RlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQs
IG1fc3RydWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShk
ZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dDo6UHJvcGVydHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFp
bCYgZGV0YWlsKQoreworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigK
KyAgICAgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3Byb3Bl
cnR5V2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKyNkZWZpbmUg
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitjbGFzcyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAg
ICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1
cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJpdmF0ZToKKyAgICBj
bGFzcyBTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJp
ZGU7CisgICAgfTsKKyAgICBjbGFzcyBQcm9wZXJ0eVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hw
b2ludCB7CisgICAgcHVibGljOgorICAgICAgICBQcm9wZXJ0eVdhdGNocG9pbnQoKSB7IH0KKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmly
ZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisgICAgCisgICAgdm9pZCBmaXJlKGNvbnN0IEZp
cmVEZXRhaWwmKTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnQgbV9zdHJ1
Y3R1cmVXYXRjaHBvaW50OworICAgIFByb3BlcnR5V2F0Y2hwb2ludCBtX3Byb3BlcnR5V2F0Y2hw
b2ludDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LndhdGNoaW5nUmVxdXJp
ZXNTdHJjdXR1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
a2V5LndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7Cit9CisKK3ZvaWQg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChtX2tleS5pc1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRl
dGFpbCkKK3sKKyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVu
c3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7Cisg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9p
bnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7Cisg
ICAgfQorICAgIAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFk
YXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0
cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAg
IG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9V
bnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2Rl
ZmluZSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldh
dGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6
CisgICAgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7Cisg
ICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5OyB9CisgICAgCisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3
ICsyMTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKICAgICAgICAgTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1
dEJ5SWRTdGF0dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0KTsKLSAgICB2b2lkIGVtaXRDaGVj
a3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYpOworICAgIHZvaWQgZW1pdFBy
b3BlcnR5Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImLCBVbmlxdWVk
U3RyaW5nSW1wbCopOwogCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9p
ZCBjbGVhckNhY2hlcygpOwpAQCAtNzA3LDExICs3MDcsMjAgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIEJ1
dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJvbSB1c2luZyBl
bWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRoZQor
ICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEgd2Vh
a0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25zdGFudChv
YmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAgICByZXR1
cm4gb2JqZWN0Tm9kZTsKICAgICB9CiAgICAgCisgICAgdm9pZCBlbWl0UHJvcGVydHlDaGVjayhK
U0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCisgICAgeworICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hQcmVzZXJ2YXRpb25PZlByb3Bl
cnR5KG9iamVjdCwgdWlkLCBzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0
aFN0cnVjdHVyZUNoZWNrKG9iamVjdCwgc3RydWN0dXJlKTsKKyAgICB9CisgICAgCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCiAgICAgewogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CkBAIC0yMjkwLDEwICsyMjk5LDEw
IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVt
aXRQcm9wZXJ0eUNoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0
b3IsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVy
ZUNoZWNrKHZlY3RvcltpXS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCkpOworICAg
ICAgICBlbWl0UHJvcGVydHlDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0
cnVjdHVyZSgpLCB1aWQpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KApAQCAtMjMyMiw4ICsyMzMxLDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
SWQoCiAgICAgICAgIC8vIDEpIEVtaXQgcHJvdG90eXBlIHN0cnVjdHVyZSBjaGVja3MgZm9yIGFs
bCBjaGFpbnMuIFRoaXMgY291bGQgc29ydCBvZiBtYXliZSBub3QgYmUKICAgICAgICAgLy8gICAg
b3B0aW1hbCwgaWYgdGhlcmUgaXMgc29tZSByYXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hh
aW4gdGhhdCByZXF1aXJlcyBhIGxvdAogICAgICAgICAvLyAgICBvZiBjaGVja3MgYW5kIHRob3Nl
IGNoZWNrcyBhcmUgbm90IHdhdGNocG9pbnRhYmxlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIHZh
cmlhbnRJbmRleCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07
KQotICAgICAgICAgICAgZW1pdENoZWNrcyhnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29u
c3RhbnRDaGVja3MoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0
QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAg
IGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzW3Zhcmlh
bnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50
aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyAyKSBFbWl0IGEgTXVsdGlHZXRCeU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0
RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKQEAgLTIz
NDQsNyArMjM1Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAg
ICAgICAgICAgICAgCiAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7CiAgICAg
Ci0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgIGVtaXRQcm9w
ZXJ0eUNoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCksIG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtpZGVudGlmaWVyTnVtYmVyXSk7CiAKICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
CiAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7
CkBAIC0yNDM4LDcgKzI0NTAsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlmIChw
dXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBl
bWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsK
KyAgICAgICAgICAgICAgICBlbWl0UHJvcGVydHlDaGVja3MoCisgICAgICAgICAgICAgICAgICAg
IHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpLAorICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApAQCAtMjQ2Myw3ICsyNDc3LDkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAKICAgICBjYXNlIFB1dEJ5SWRW
YXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUs
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSks
IGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7Cisg
ICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAgICAgIHZhcmlhbnQuY29uc3RhbnRD
aGVja3MoKSwKKyAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVt
YmVyXSk7CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAK
QEAgLTI1MTksNyArMjUzNSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQo
CiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICBDaGVja1N0cnVjdHVyZSwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7CiAg
ICAgICAgIAotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7Cisg
ICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCksIG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29u
c3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OSw2ICs4OSw5IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAg
ICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZv
ciAoQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRjaHBvaW50IDogYWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50cykKKyAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCkudmFsaWRhdGVSZWZl
cmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlz
aW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
ICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdKdW1wUmVwbGFj
ZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJKU0Nl
bGwuaCIKQEAgLTk4LDYgKzEwMCw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVy
PEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPj4gd2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgQmFnPENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludD4gd2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludD4gYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBhZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IGp1bXBSZXBsYWNl
bWVudHM7CiAgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRp
b247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDgg
KzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1
ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEm
IGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9p
bnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCog
bmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hw
b2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQt
PnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMjMgQEAgdm9pZCBBcnJheUJ1
ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFw
dG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVy
cmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsK
ICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9u
IHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYg
cmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRW
YWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0
Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIHN3
aXRjaCAoa2V5LmtpbmQoKSkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxl
bmNlOgorICAgICAgICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFk
ZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQog
CiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiAr
ODgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1f
YnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50
czo6YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAg
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJl
ZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAo
IXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTg4LDYgKzEwNyw3IEBAIHZvaWQgRGVz
aXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2lubGluZVNldHMucmVhbGx5
QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChj
b2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50
czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC05NSw3ICsxMTUsOCBAQCBib29sIERlc2lyZWRX
YXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgcmV0dXJuIG1fc2V0cy5hcmVTdGlsbFZh
bGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAm
JiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2J1ZmZlclZp
ZXdzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZh
bGlkKCkKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgp
OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4Njk4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdDb21tb25EYXRh
LmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJW
aWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJX
YXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIApAQCAtNDEsMTUgKzQyLDE1
IEBAIGNsYXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdlbmVyaWNT
ZXRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgVCBzZXQsIFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQpCisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayogY29kZUJs
b2NrLCBUIHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNl
dC0+YWRkKHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0LT5hZGQoY29tbW9uLndhdGNo
cG9pbnRzLmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbklu
dmFsaWRhdGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9CiB9
OwogCiBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRp
YyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgp
OwpAQCAtNTcsMTIgKzU4LDE4IEBAIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7CiB9Owog
CiBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2
b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAg
ICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25E
YXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJW
aWV3KiB2aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7
Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29k
ZUJsb2NrKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7Cisg
ICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1dhdGNoYWJsZSgpOwog
ICAgIH0KIH07CiAKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8mIHNldCA6
IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9u
LndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFkZChj
b2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQg
PSB0cnVlOwogICAgIH0KQEAgLTEyMiw2ICsxMjksMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRk
TGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAgICB2b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVy
VmlldyopOwogICAgIAorICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2Fs
bCB0aGlzIGRpcmVjdGx5LiBVc2UKKyAgICAvLyBHcmFwaDo6YWRkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LCB3aGljaCBkb2VzIHRoZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsLgorICAg
IHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAg
ICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChD
b2RlQmxvY2sqLCBDb21tb25EYXRhJik7CkBAIC0xNDQsMTIgKzE1NSwxNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAg
fQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkp
CisgICAgeworICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVk
KGtleSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9p
bnRzPFdhdGNocG9pbnRTZXQqPiBtX3NldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50
czxJbmxpbmVXYXRjaHBvaW50U2V0Kj4gbV9pbmxpbmVTZXRzOwogICAgIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVy
cmVkVmFsdWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZp
ZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKKyAg
ICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ4LDYgKzg0OCw0OSBA
QCB2b2lkIEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCiti
b29sIEdyYXBoOjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1dhdGNoYWJsZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExh
emlseShrZXkub2JqZWN0KCkpOworICAgIGlmIChrZXkuY29uZGl0aW9uKCkgPT0gUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2UpCisgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXpp
bHkoa2V5LnByb3RvdHlwZSgpKTsKKyAgICBtX3BsYW4ud2F0Y2hwb2ludHMuYWRkTGF6aWx5KGtl
eSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGg6OndhdGNoUHJlc2VuY2VPZlBy
b3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKK3sKKyAgICByZXR1cm4g
YWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6cHJlc2VuY2Uob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcykpOworfQor
Citib29sIEdyYXBoOjp3YXRjaEFic2VuY2VPZlByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IGFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmFic2VuY2Uob2JqZWN0LCB1aWQsIHByb3RvdHlwZSkpOworfQorCitib29sIEdy
YXBoOjp3YXRjaFByZXNlcnZhdGlvbk9mUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU09iamVj
dCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIGlmICghb2Jq
ZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgCisgICAgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAKKyAgICBpZiAob2Zm
c2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgICAgIHJldHVybiB3YXRjaEFic2VuY2VPZlByb3Bl
cnR5KG9iamVjdCwgdWlkLCBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICAKKyAg
ICByZXR1cm4gd2F0Y2hQcmVzZW5jZU9mUHJvcGVydHkob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0
cmlidXRlcyk7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVu
aXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNv
ZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3NSw2ICs2NzUsMjQgQEAgcHVibGljOgog
ICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRl
bnRpZmllcnM7IH0KICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1
cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0
aGUga2V5IGlzIGFscmVhZHkgaW52YWxpZC4KKyAgICBib29sIGFkZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAorICAgIC8v
IEdhdGUgdGhlIHZhbGlkaXR5IG9mIHRoaXMgY29tcGlsYXRpb24gb24gdGhlIGdpdmVuIG9iamVj
dCBoYXZpbmcgdGhlIGdpdmVuIHByb3BlcnR5IHdpdGgKKyAgICAvLyB0aGUgZ2l2ZW4gb2Zmc2V0
IGFuZCBhdHRyaWJ1dGVzLiBSZXR1cm5zIGZhbHNlIGlmIHdhdGNoaW5nIGZvciB0aGlzIGlzIGlt
cG9zc2libGUuCisgICAgYm9vbCB3YXRjaFByZXNlbmNlT2ZQcm9wZXJ0eSgKKyAgICAgICAgSlNP
YmplY3QqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2YgdGhpcyBjb21w
aWxhdGlvbiBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGxhY2tpbmcgdGhlIGdpdmVuIHByb3BlcnR5Lgor
ICAgIC8vIFJldHVybnMgZmFsc2UgaWYgd2F0Y2hpbmcgZm9yIHRoaXMgaXMgaW1wb3NzaWJsZS4K
KyAgICBib29sIHdhdGNoQWJzZW5jZU9mUHJvcGVydHkoCisgICAgICAgIEpTT2JqZWN0KiwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgCisgICAgLy8gR2F0ZSB0aGUgdmFsaWRpdHkgb2Yg
dGhpcyBjb21waWxhdGlvbiBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGVpdGhlciBoYXZpbmcsIG9yIGxh
Y2tpbmcsIHRoZQorICAgIC8vIHByb3BlcnR5IGluIHRoZSBzYW1lIHdheSBhcyB0aGUgZ2l2ZW4g
c3RydWN0dXJlIGNsYWltcyB0byBoYXZlIChvciBsYWNrKSB0aGUgcHJvcGVydHkuCisgICAgYm9v
bCB3YXRjaFByZXNlcnZhdGlvbk9mUHJvcGVydHkoCisgICAgICAgIEpTQ2VsbCosIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKwogICAgIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsx
MDUsNyBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAgICAgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0
aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLAogICAgIGJvb2wgY29tcGFjdCkKIHsKLSAgICBpZiAo
c3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygp
KQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAg
ICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0NyArMTMyLDMwIEBAIHN0
YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgogfQogCi1zdGF0aWMgdm9p
ZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBvYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAotICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3N0YXRpYyB2b2lkIGNoZWNr
T2JqZWN0UHJvcGVydHlDb25kaXRpb24oCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAob2JqZWN0LT5z
dHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBj
b2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0
Ci0gICAgICAgICAgICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgotICAgICAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAg
ICAgICAgICAgICAgICBqaXQsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKTsK
LSAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hw
b2ludCk7Ci0gICAgICAgICAgICBvay5saW5rKCZqaXQpOwotICAgICAgICB9CisgICAgaWYgKGNv
bmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsK
KyAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAg
ICAgICBicmFuY2hTdHJ1Y3R1cmUoaml0LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSkpOwor
ICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICBqaXQsIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkpOwogfQogCi1zdGF0
aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNWYWx1ZSBwcm90b3R5
cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0g
ICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsK
LSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlw
ZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBz
dHViSW5mbywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworc3RhdGlj
IHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIHNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBzZXQpIHsKKyAgICAg
ICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICAgICAgICAgIGNvbmRpdGlvbiwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAg
IH0KIH0KIAogc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFJlcGF0Y2hCdWZmZXImIHJlcGF0
Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHRhcmdldCkKQEAgLTI5NiwxMSArMjc5LDEyIEBAIHN0YXRpYyBGdW5jdGlvblB0
ciBjdXN0b21Gb3IoY29uc3QgUHV0UHIKIAogc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigK
ICAgICBFeGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LAorICAgIEZ1
bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwg
V2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwKICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNj
ZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4mIHN0dWJSb3V0aW5lKQogewotCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5hcmVT
dGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CisgICAgCiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IEpTVmFsdWVSZWdzKApAQCAtMzQ2LDMzICszMzAsMjUgQEAgc3RhdGljIGJvb2wgZ2VuZXJh
dGVCeUlkU3R1YigKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOwotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVy
dHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIHx8IGNvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpCiAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKICAgICBp
ZiAod2F0Y2hwb2ludFNldCkKICAgICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7IAotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgaWYgKGNo
YWluKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFk
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7
Ci0gICAgICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0
dXJlID0gcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgaWYgKHByb3RvU3Ry
dWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQot
ICAgICAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAg
ICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG9P
YmplY3QsIHByb3RvU3RydWN0dXJlLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LAotICAg
ICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjdXJy
U3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCghcHJvdG9P
YmplY3QgfHwgcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpID09IGN1cnJTdHJ1Y3R1cmUpOwotICAg
IH0KKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9u
U2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7
CiAgICAgCisgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOworICAgIGlmIChjb25kaXRpb25T
ZXQuaXNFbXB0eSgpKQorICAgICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIGVs
c2UKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlv
bigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNo
aW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOworICAgIAogICAgIEdQUlJl
ZyBiYXNlRm9yQWNjZXNzR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICBpZiAoa2luZCAhPSBHZXRV
bmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGNoYWluKSB7CisgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQg
c2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8g
Z2V0IHRoZSB0YXJnZXQuCiAgICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKICAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsKQEAgLTYyNyw5
ICs2MDMsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWCiAgICAg
ICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQotICAgIEFTU0VSVCghc3RydWN0dXJlLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBpZiAodHlwZUluZm8uaGFzSW1w
dXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5Rmly
ZXNXYXRjaHBvaW50cygpKQorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJl
Q2FjaGVhYmxlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgcmV0dXJu
IEF0dGVtcHRUb0NhY2hlOwpAQCAtODI3LDIxICs4MDIsMjIgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICBzaXplX3QgY291
bnQgPSAwOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKICAgICAKICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJh
c2VWYWx1ZSkgewogICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwogCiAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNv
dW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyhleGVj
LCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNv
dW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcygKLSAgICAgICAgICAg
ICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0g
ICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdChl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAg
CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgIAorICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25T
ZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1
YkluZm8pOwpAQCAtODUyLDcgKzgyOCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlC
dWlsZEdldEJ5SUQKICAgICAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
OwogICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2lu
ZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNo
YWluLCBjb3VudCwgb2Zmc2V0LCAKKyAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQs
IGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgb2Zmc2V0LCAKICAgICAg
ICAgc3RydWN0dXJlLCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwg
CiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxp
c3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldChzdHViSW5mbykpLCBzdHViUm91dGluZSk7CkBAIC04
NzEsNyArODQ3LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAog
ICAgIAogICAgIGxpc3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAogICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1
Y3R1cmUsCi0gICAgICAgIHByb3RvdHlwZUNoYWluLCBjb3VudCkpOworICAgICAgICBjb25kaXRp
b25TZXQpKTsKICAgICAKICAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKICAgICAKQEAgLTk5MywyNiArOTY5LDI4IEBAIHN0
YXRpYyBib29sIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKEV4
ZWNTdGF0ZSogZXhlYywgVk0qIHZtLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCAKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIGJvb2wgZW1pdFB1
dFRyYW5zaXRpb25TdHViKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgVk0qIHZtLCBTdHJ1Y3R1cmUq
JiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCAKKyAgICBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRL
aW5kLAorICAgIFN0cnVjdHVyZSomIG9sZFN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCkKIHsKICAgICBQcm9wZXJ0eU5hbWUgcG5hbWUoaWRlbnQpOwot
ICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIG9sZFN0cnVjdHVy
ZSA9IHN0cnVjdHVyZTsKICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBvbGRT
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8IHBhcnNlSW5kZXgocG5hbWUpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUHJvcGVydHlPZmZz
ZXQgcHJvcGVydHlPZmZzZXQ7CiAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwg
aWRlbnQuaW1wbCgpLCAwLCBwcm9wZXJ0eU9mZnNldCk7CiAKICAgICBpZiAoIXN0cnVjdHVyZSB8
fCAhc3RydWN0dXJlLT5pc09iamVjdCgpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwg
IXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU2tpcCBvcHRpbWl6
aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCiAg
ICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KICAgICBpZiAoR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKICAgICAgICAg
JiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gU2tpcCBvcHRp
bWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUg
aGFzCkBAIC0xMDIwLDE0ICs5OTgsMTMgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5z
aXRpb25TdHViQQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1l
bnQgaXQhCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDkxNAogICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWlu
KGV4ZWMsIHN0cnVjdHVyZSkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVj
dHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IC8vIGVtaXRQdXRUcmFuc2l0aW9uU3R1YgorICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkg
eworICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNl
dHRlck1pc3MoZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5z
dHViUm91dGluZTsKQEAgLTEwODMsMTcgKzEwNjAsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0
UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICBvbGRTdHJ1Y3R1cmUp
KTsKICAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIG9sZFN0
cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywg
c3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAg
ICAKLSAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgZm9yIChXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQp
IHsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
bywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxKTsK
LSAgICAgICAgfQotICAgIH0KKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAg
ICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQs
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUjEpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dQYXRoOwogICAgIApAQCAtMTIyOCw3ICsxMTk2LDcgQEAgc3RhdGljIFN0cnVjdHVy
ZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIGlmIChhbGxvY2F0b3IuZGlk
UmV1c2VSZWdpc3RlcnMoKSkKQEAgLTEyNTYsOCArMTIyNCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUq
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCiAgICAgICAgICAgICBz
dHJ1Y3R1cmUpOwotCi0gICAgcmV0dXJuIG9sZFN0cnVjdHVyZTsKKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0xMjgxLDEyICsxMjQ5
LDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAo
c2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewogICAg
ICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewog
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9u
U3R1YkFuZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQpOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUpCisgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIWVtaXRQdXRU
cmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgU3RydWN0dXJl
Q2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsK
LSAgICAgICAgICAgIAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKICAgICAgICAgICAg
ICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KApAQCAtMTI5NCw3
ICsxMjYxLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7CiAgICAgICAgICAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1Yklu
Zm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERp
cmVjdCk7CisgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBwdXRLaW5kID09IERpcmVjdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KQEAgLTEzMTIsMjAgKzEyNzksMjIg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAmJiBz
dHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHBy
b3RvdHlwZUNoYWluID0gMDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5j
YWNoZWRPZmZzZXQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGJh
c2VWYWx1ZSAhPSBzbG90LmJhc2UoKSkgewotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCks
IGlkZW50LCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5
cGVDaGFpbikKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2Uo
KSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgIGV4ZWMsIHN0
cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hh
aW4oZXhlYyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5z
bG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKICAgICAgICAgUG9seW1vcnBoaWNQdXRC
eUlkTGlzdCogbGlzdDsKICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZy
b20ocHV0S2luZCwgc3R1YkluZm8pOwogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVC
eUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21G
b3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBl
eGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29u
ZGl0aW9uU2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRy
LAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpLApAQCAtMTMzNiw3ICsxMzA1LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6
c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAog
ICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0
dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJl
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5l
KSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0
ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1
bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAt
MTM4MCwxNyArMTM0OSwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRC
eUlkCiAgICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAot
ICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0
dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJl
KSAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFl
bWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1
cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMp
OwogICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAg
ICAgICAgIGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0
cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBw
cm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAog
ICAgICAgICB9IGVsc2UgewpAQCAtMTQyMywyMSArMTM5MSwyNCBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRj
aC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xv
dC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUs
IG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQorICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJh
c2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAg
ICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAg
ICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFt
ZS5pbXBsKCkpOworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBl
Q2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAg
ICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQo
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOwogICAgICAgICAKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAg
ICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1Yklu
Zm8pOwogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBz
dHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LAorICAgICAgICAgICAgZXhlYywga2luZEZv
cihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRp
b25TZXQsCiAgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAg
ICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLApAQCAtMTQ0OCw3ICsxNDE5LDcgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICBsaXN0LT5h
ZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRl
cigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVy
LAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3Vz
dG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTQ4NywxMSArMTQ1OCwxNSBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CiAgICAgCi0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKLSAgICBKU1ZhbHVlIGZvdW5kU2xvdEJhc2Ug
PSB3YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKTsKLSAgICBzaXplX3QgY291
bnQgPSAhZm91bmRTbG90QmFzZSB8fCBmb3VuZFNsb3RCYXNlICE9IGJhc2UgPyAKLSAgICAgICAg
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIGZv
dW5kU2xvdEJhc2UsIGlkZW50LCBvZmZzZXRJZ25vcmVkKSA6IDA7Ci0gICAgaWYgKGNvdW50ID09
IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBj
b25kaXRpb25TZXQ7CisgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmIChzbG90LnNsb3RC
YXNlKCkgIT0gYmFzZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgZXhlYywgc3Ry
dWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVy
dHlNaXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAg
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
OwpAQCAtMTUxNiw3ICsxNDkxLDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0
Y2hJbigKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIH0KICAgICAKLSAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMp
OwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgCiAgICAgewpA
QCAtMTU0NywxOCArMTUyMSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNo
SW4oCiAgICAgICAgIGlmIChzbG90LndhdGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNsb3Qu
d2F0Y2hwb2ludFNldCgpLT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsK
IAotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgICAgICBK
U09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9y
TG9va3VwKGV4ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBw
cm90b3R5cGUtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJvdG9TdHJ1Y3R1cmUsIGV4ZWMt
PmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJl
Q2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50eXBl
SW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAg
ICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUg
PSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMoCisgICAgICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9rKCksIHN0dWJJ
bmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAgICAgICAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlz
RGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rp
b25hcnlLaW5kOyB9CiAgICAgYm9vbCBpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIGNvbnN0IHsg
cmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgPT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZDsgfQogICAK
LSAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB7IHJldHVybiBkaWN0aW9u
YXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQgJiYgIXR5cGVJbmZvKCkucHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nKCk7IH0KKyAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNo
ZWREaWN0aW9uYXJ5S2luZAorICAgICAgICAgICAgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nKCkKKyAgICAgICAgICAgICYmICEodHlwZUluZm8uaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBv
aW50cygpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgp
CisgICAgICAgICAgICAmJiB0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHMoKTsKKyAgICB9CiAKICAgICAvLyBXZSB1c2UgU2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBm
b3Igc3RydWN0dXJlcyB0aGF0IG1heSBnZXQgbmV3IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRv
IHByZXZlbnQKICAgICAvLyBERkcgZnJvbSBpbmxpbmluZyBwcm9wZXJ0eSBhY2Nlc3NlcyBzaW5j
ZSBzdHJ1Y3R1cmVzIGRvbid0IHRyYW5zaXRpb24gd2hlbiBhIG5ldyBpbXB1cmUgcHJvcGVydHkg
YXBwZWFycy4KQEAgLTIwMiw3ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gdHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKTsKICAgICB9Ci0KKyAg
ICAKICAgICAvLyBUeXBlIGFjY2Vzc29ycy4KICAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0
IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9i
bG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3Qo
KSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCw3IEBAIHB1
YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb2RlKCk7CiAKICAg
ICB2b2lkIHJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZp
ZXImLCBXYXRjaHBvaW50Kik7CisgICAgCiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcg
b25jZSBpdCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257068</attachid>
            <date>2015-07-19 16:14:07 -0700</date>
            <delta_ts>2015-07-23 14:10:41 -0700</delta_ts>
            <desc>slowly figuring out the best way to handle conditions in the DFG frontend</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>161141</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY5ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODUyLDYgKzE4NTQsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODU0LDYgKzQ4NTgsOCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcy
NzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGMThEM0NEMUI1
NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAor
CQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3Iu
aCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywK
QEAgLTYxMDQsNiArNjExMCw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEph
dmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxMyw2ICs3
NjIwLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIg
LyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtH
ZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1f
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlz
dCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
Y3BwCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29tcGxleEdldFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDggQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVG
b3IoCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50LCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0
dXJlKiBoZWFkU3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUgdGhhdAogICAg
IC8vIGhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpIGJ1dCBmb3Igd2hpY2ggd2UgZG9uJ3QK
QEAgLTQwLDMyICs0MCwyNiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNv
bXB1CiAgICAgLy8gdGhhdCwgeWV0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAKKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSk7CisgICAgCiAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAg
CiAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGlu
ZWFibGU7CiAgICAgCi0gICAgaWYgKGNoYWluICYmIGNoYWluQ291bnQpIHsKLSAgICAgICAgcmVz
dWx0Lm1fY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAg
ICAgICAgIHByb2ZpbGVkQmxvY2ssIGhlYWRTdHJ1Y3R1cmUsIGNoYWluLCBjaGFpbkNvdW50KSk7
CisgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC5tX2Nv
bmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgCi0gICAgICAgIGlmICghcmVzdWx0
Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICBpZiAoIXJlc3VsdC5tX2NvbmRpdGlv
blNldC5hcmVTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gc2tpcCgpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVy
ZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWluLT50YWtlc1Nsb3dQYXRo
SW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1Bh
dGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gcmVzdWx0
Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VycmVu
dFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBB
U1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOworICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY3Vy
cmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7Ci0gICAgfQorICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0gZWxzZQorICAgICAgICBy
ZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAg
ICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKICNkZWZpbmUgQ29t
cGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3RhdHVzKCkKICAgICAgICAg
OiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQot
ICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAgICAgfQogICAgIApAQCAt
OTcsMjEgKzk2LDE3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIENvbXBsZXhH
ZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBT
dHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAg
dW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgICAgIENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KLSAg
ICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljVmFsdWU7
IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9j
aGFpbi5nZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogcHJpdmF0
ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAgICB1
bnNpZ25lZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7Ci0gICAg
UmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYsOCArMjA2
LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlh
bnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSks
IGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKLSAg
ICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNl
dCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgp
LCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5j
cHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25z
dCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAg
LCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlv
blNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RG
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5SWRWYXJp
YW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zm
c2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlmIChjaGFp
biAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50
ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3Rh
bnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRCeUlkVmFy
aWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50JiBHZXRC
eUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAg
ICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29uc3RhbnRD
aGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90
aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0
aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5p
cXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03MiwxNCAr
NjcsMTQgQEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJl
dHVybiAqdGhpczsKIH0KIAotU3RydWN0dXJlU2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0
dXJlKCkgY29uc3QKK0pTT2JqZWN0KiBHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSgpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVTZXQoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvciht
X2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0
cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICAvLyBUaGlzIGN1cnJlbnRseSBh
c3N1bWVzIHRoYXQgR2V0QnlJZFZhcmlhbnQgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHNlbGYgaGl0
cyBhbmQgcHJvdG90eXBlCisgICAgLy8gaGl0cy4gV2hlbiB3ZSBzdXBwb3J0IG1pc3NlcywgdGhp
cyBzaG91bGQgYmUgc21hcnQgZW5vdWdoIHRvIHJldHVybiBudWxscHRyIGluc3RlYWQgb2YKKyAg
ICAvLyBjcmFzaGluZyBpbiBzbG93QmFzZUNvbmRpdGlvbigpLgorICAgIGlmIChtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2Nv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpOwogfQogCiBib29sIEdldEJ5
SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBA
IC05MCwxMCArODUsMTMgQEAgYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29u
cwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghYXJl
Q29tcGF0aWJsZShtX2NvbnN0YW50Q2hlY2tzLCBvdGhlci5tX2NvbnN0YW50Q2hlY2tzKSkKKyAg
ICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQgPQor
ICAgICAgICBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsK
KyAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKLSAgICBtZXJnZUludG8ob3RoZXIubV9jb25zdGFudENoZWNrcywgbV9jb25z
dGFudENoZWNrcyk7CisgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CiAg
ICAgbV9zdHJ1Y3R1cmVTZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOwogICAgIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMTEyLDggKzExMCw3IEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1
bXBJbkNvbnRleHQoUHJpbnQKICAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KAotICAgICAgICAi
PCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsCi0gICAgICAgICJb
IiwgbGlzdER1bXBJbkNvbnRleHQobV9jb25zdGFudENoZWNrcywgY29udGV4dCksICJdIik7Cisg
ICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5D
b250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSk7CiAgICAgaWYgKG1fYWx0ZXJuYXRlQmFz
ZSkKICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNW
YWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNl
dCA9ICIsIG9mZnNldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyAr
NDMsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiBwdWJsaWM6CiAgICAgR2V0QnlJZFZhcmlh
bnQoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJl
U2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsCi0gICAgICAgIGNv
bnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQoKSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0
YXR1cyA9IG51bGxwdHIpOwogICAgIAogICAgIH5HZXRCeUlkVmFyaWFudCgpOwpAQCAtNTUsOSAr
NTUsMTAgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQo
KSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENo
ZWNrczsgfQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9h
bHRlcm5hdGVCYXNlOyB9Ci0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsK
KworICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpTT2JqZWN0KiBhbHRl
cm5hdGVCYXNlKCkgY29uc3Q7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAgICAgCkBAIC03MCw4ICs3
MSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdldEJ5SWRTdGF0dXM7CiAgICAgCiAg
ICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNl
OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFBy
b3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMp
IHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KEpTVmFsdWUobV9vYmplY3QpLCBjb250
ZXh0KSwgIjogIiwgaW5Db250ZXh0KG1fY29uZGl0aW9uLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRp
dGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1
cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVx
dWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1
Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQo
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jv
b2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0
aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2Nv
bmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVj
dHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlQXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpLCBlZmZv
cnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVm
Zm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxl
KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQp
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2Vz
JiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52YWxpZGF0
ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29u
ZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6IG1f
b2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAgICAgIDog
bV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9vYmplY3Qo
b2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRC
YXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29i
amVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25k
aXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOyAK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91
dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIo
CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0
Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2UodWlkLCBwcm90b3R5cGUp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAg
ICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5j
ZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9
IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246
OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBK
U09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAg
ICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3Rv
dHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBl
cXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmpl
Y3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjplcXVp
dmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZh
bGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0
aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisgICAgSlNP
YmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJvcGVydHlD
b25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0KKyAgICAK
KyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0
dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5zaWduZWQg
aGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJpYnV0ZXMo
KTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24o
KS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9vbCBoYXNS
ZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWlyZWRWYWx1
ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkgKyBtX2Nv
bmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29uZGl0aW9u
ID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYg
bV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAg
Ly8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9y
IGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJlbnQgb2Jq
ZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVz
b2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzIGEgUHJl
c2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0
aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBjYXNlcyB5
b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAgLy8gd2ls
bCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5k
IEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50aW9uLCBp
bnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4KKyAgICBi
b29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1aWQoKSAh
PSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9CisgICAg
CisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9uYWxseSB0
YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUq
IGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwgdGhlbiB5
b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0IFN0cnVj
dHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBz
YW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9pZCBhIFRP
Q1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVy
ZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9v
bCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUq
KSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4g
aW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAg
ICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisg
ICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVy
ZSopIGNvbnN0OworICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0IGRlZmluaXRl
bHkgaGFzLCBvciBkZWZpbml0ZWx5IGRvZXMgbm90IGhhdmUsIHRoZSBwcm9wZXJ0eSByaWdodCBu
b3cuCisgICAgLy8gSWYgdHJ1ZSwgdGhlbiB3ZSBjb3VsZCBjb250aW51ZSB0byB2ZXJpZnkgdGhl
IHZhbGlkaXR5IGJ5IGNoZWNraW5nIGlmIHRoZSBvYmplY3QgaGFzIHRoZQorICAgIC8vIHN0cnVj
dHVyZS4gTWF5IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgaWYgdGhlIG9iamVjdCBhbmQg
c3RydWN0dXJlIGFsb25lIGRvbid0CisgICAgLy8gZ3VhcmFudGVlIHRoZSBjb25kaXRpb24uIFRo
aXMgaGFwcGVucyBmb3IgYW4gQWJzZW5jZSBjb25kaXRpb24gb24gYW4gb2JqZWN0IHRoYXQgbWF5
IGhhdmUKKyAgICAvLyBpbXB1cmUgcHJvcGVydGllcy4KKyAgICBib29sIGlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZv
cmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBv
biB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2lu
dC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
CisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFi
aWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7Cisg
ICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25k
aXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0
J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBh
IHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9v
bCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25k
aXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFu
Z2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5n
ZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24o
KS53YXRjaGluZ1JlcXVyaWVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9
CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNT
dGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25z
dCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBt
X29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0cnVj
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFz
aCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsg
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0
KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5v
YmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0K
KyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktpbmQo
CisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAg
ICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvbmRp
dGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90
QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0
aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAgIH0K
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlQ29tcGF0aWJs
ZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAg
aWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEgOiAqdGhpcykgewor
ICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiIDogb3RoZXIpIHsK
KyAgICAgICAgICAgIGlmICghYS5pc0NvbXBhdGlibGVXaXRoKGIpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om1l
cmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBj
b25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFvdGhlci5pc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3RoZXIpIHsKKyAgICAgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3RpbmdDb25kaXRpb24gOiAqdGhpcykgewor
ICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0Nv
bmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBub25FbXB0eShyZXN1bHQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjphcmVTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3Rp
bGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxWYWxp
ZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLnZhbGlkaXR5UmVx
dXJpZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmFyZVN0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25k
aXRpb24uaXNTdGlsbExpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoIlsiKTsKKyAg
ICBpZiAobV9kYXRhKQorICAgICAgICBvdXQucHJpbnQobGlzdER1bXBJbkNvbnRleHQobV9kYXRh
LT52ZWN0b3IsIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworbmFtZXNwYWNlIHsKKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisgICAgVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9w
ZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBv
YmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAg
Y2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7
CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2Uodm0sIG93
bmVyLCBvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlk
LCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICByZXR1cm4g
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcigKKyAgICAgICAgICAgIHZt
LCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlw
ZSgpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAg
fQorfQorCitlbnVtIENvbmN1cnJlbmN5IHsKKyAgICBNYWluVGhyZWFkLAorICAgIENvbmN1cnJl
bnQKK307CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnMoCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kLAorICAgIENvbmN1cnJl
bmN5IGNvbmN1cnJlbmN5ID0gTWFpblRocmVhZCkKK3sKKyAgICBBU1NFUlQoISFwcm90b3R5cGUg
PT0gKGNvbmRpdGlvbiA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpKTsKKyAgICAKKyAg
ICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IGNvbmRpdGlvbnM7CisgICAgCisgICAg
Zm9yICg7OykgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCisgICAgICAgICAg
ICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAg
CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChn
bG9iYWxPYmplY3QpOworICAgICAgICAKKyAgICAgICAgaWYgKHYuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIGlmICghcHJvdG90eXBlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
Pih2KTsKKyAgICAgICAgc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAg
ICAKKyAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIHJlcGVhdGVk
bHksIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0IHNob3VsZCBub3QgYmUKKyAgICAgICAgLy8gdHJl
YXRlZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKSB7CisgICAgICAgICAgICBpZiAoY29uY3VycmVuY3kgPT0gTWFpblRocmVhZCkKKyAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBvYmpl
Y3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQgdGhpc0NvbmRpdGlvbktpbmQ7CisgICAgICAg
IGlmIChraW5kID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSAmJiBvYmplY3QgIT0gcHJv
dG90eXBlKQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBQcm9wZXJ0eUNvbmRpdGlv
bjo6QWJzZW5jZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQg
PSBraW5kOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbmV3Q29u
ZGl0aW9uID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0
LCB1aWQsIHRoaXNDb25kaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFuZXdDb25kaXRpb24gfHwg
IW5ld0NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZh
bGlkKCk7CisgICAgICAgIAorICAgICAgICBjb25kaXRpb25zLmFwcGVuZChuZXdDb25kaXRpb24p
OworICAgICAgICAKKyAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdC4KKyAgICBz
d2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogewor
ICAgICAgICB1bnNpZ25lZCBwcmVzZW5jZUNvdW50ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0aW9ucykgeworICAgICAg
ICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgICAgICBwcmVzZW5jZUNvdW50Kys7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0
aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByZXNlbmNlQ291bnQg
PT0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlvbnMp
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IGtpbmQpOwor
ICAgIH0gfQorICAgIAorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9u
RW1wdHkoY29uZGl0aW9ucyk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3Mo
CisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2Vu
ZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAg
ICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJl
LCBudWxscHRyLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0
ZXIpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUs
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9u
OjpQcmVzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAor
ICAgICAgICB2bSwgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0LCBoZWFkU3RydWN0dXJlLCBudWxscHRy
LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlY2VPZlNldHRlciwKKyAgICAgICAgQ29uY3Vy
cmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2xk
dWUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0
aW9uYWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFj
Y2VzcyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRl
cmVzdGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRp
dGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBp
cyBuZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
KCkgeyB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFs
aWQoKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBub25FbXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2
ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRh
ID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgICpyZXN1bHQubV9kYXRhLT52ZWN0b3Ig
PSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRh
LT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2RhdGE7CisgICAgfQorICAgIAorICAgIHR5cGVk
ZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdp
bigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29u
c3Q7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90
eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNv
bmRpdGlvbiBvbiB0aGUgcHJvdG90eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0
aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5
cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFBy
ZXNlbmNlCisgICAgLy8gaW4gdGhlIHNldCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2Vu
Y2UuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9uIHNldHMgYXJlIGNvbXBhdGlibGUgaWYgdGhl
eSBhcmUgYm90aCB2YWxpZCBhbmQgZWFjaCBjb25kaXRpb24gaW4gKnRoaXMgaXMKKyAgICAvLyBj
b21wYXRpYmxlIHdpdGggZWFjaCBjb25kaXRpb24gaW4gb3RoZXIuCisgICAgYm9vbCBhcmVDb21w
YXRpYmxlV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0
OworICAgIAorICAgIC8vIEF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3IGNvbmRpdGlvbiBzZXQgYnkg
bWVyZ2luZyB0aGlzIG9uZSB3aXRoIHRoZSBvdGhlciBvbmUuIFRoaXMgd2lsbAorICAgIC8vIGZh
aWwgaWYgIXRoaXMuYXJlQ29tcGF0aWJsZVdpdGgob3RoZXIpLiBXaGVuIGl0IGZhaWxzLCBpdCBy
ZXR1cm5zIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRX
aXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29uc3Q7CisgICAg
CisgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbFZhbGlk
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIG5lZWRJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxsTGl2ZSgp
IGNvbnN0OworICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
CisgICAgLy8gSGVscGVycyBmb3IgdXNpbmcgdGhpcyBpbiBhIHVuaW9uLgorICAgIHZvaWQqIHJl
bGVhc2VSYXdQb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lk
Kj4obV9kYXRhLmxlYWtSZWYoKSk7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBhZG9wdFJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
ZGF0YSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBmcm9tUmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0g
c3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gSW50ZXJuYWxseSwgdGhpcyByZXByZXNlbnRz
IEludmFsaWQgdXNpbmcgYSBwb2ludGVyIHRvIGEgRGF0YSB0aGF0IGhhcyBhbiBlbXB0eSB2ZWN0
b3IuCisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXBhY3Qg
YnkgaGF2aW5nIGl0IGludGVybmFsbHkgdXNlIGEgdmVjdG9yIHRoYXQganVzdCBoYXMKKyAgICAv
LyB0aGUgbm9uLXVpZCBwb3J0aW9uIG9mIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBhbmQgdGhl
biByZXF1aXJpbmcgdGhhdCB0aGUgY2FsbGVycyBvZiBhbGwKKyAgICAvLyBvZiB0aGUgQVBJcyBz
dXBwbHkgdGhlIHVpZC4KKyAgICAKKyAgICBjbGFzcyBEYXRhIDogVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8RGF0YT4geworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhKTsKKyAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAg
RGF0YSgpIHsgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uPiB2ZWN0b3I7CisgICAgfTsKKyAgICAKKyAgICBSZWZQdHI8RGF0YT4gbV9kYXRhOworfTsK
KworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVy
dHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNP
YmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKworT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzcsMTQgKzM3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBHZXRCeUlkQWNj
ZXNzOjpHZXRCeUlkQWNjZXNzKAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjaGFpbkNv
dW50KQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KQogICAgIDogbV90eXBlKHR5cGUpCiAgICAgLCBtX2NoYWlu
Q291bnQoY2hhaW5Db3VudCkKICAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJl
KQorICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9zdHViUm91dGlu
ZShzdHViUm91dGluZSkKIHsKLSAgICBpZiAoY2hhaW4pCi0gICAgICAgIG1fY2hhaW4uc2V0KHZt
LCBvd25lciwgY2hhaW4pOwogfQogCiBHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCkBA
IC03MSw3ICs3MCw3IEBAIGJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYK
IHsKICAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NoYWluICYmICFIZWFwOjpp
c01hcmtlZChtX2NoYWluLmdldCgpKSkKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzU3RpbGxM
aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZp
c2l0V2VhayhyZXBhdGNoQnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MywxMyArNTMs
MTIgQEAgcHVibGljOgogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoKQogICAgICAgICA6IG1fdHlw
ZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudCgwKQogICAgIHsKICAgICB9CiAgICAg
CiAgICAgR2V0QnlJZEFjY2VzcygKICAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgU3Ry
dWN0dXJlQ2hhaW4qID0gMCwgdW5zaWduZWQgY2hhaW5Db3VudCA9IDApOworICAgICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpKTsKICAgICAKICAgICB+R2V0QnlJZEFjY2VzcygpOwogICAgIApAQCAtNzIsOCArNzEsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZS5nZXQoKTsgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigp
IGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbkNvdW50OyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9u
U2V0OyB9CiAgICAgCiAgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAg
ICB7CkBAIC05MSw5ICs4OSw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9j
azsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291
bnQ7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIG1fY29uZGl0aW9uU2V0OyAvLyBGSVhNRSB3aGF0IGFib3V0IGJhcnJpZXJzPwogICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTEsNyArNTEsOCBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1
CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9v
bGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91
c1N0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHVi
SW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2No
YWluLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOworICAgICAg
ICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRv
cHRSYXdQb2ludGVyKAorICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5y
YXdDb25kaXRpb25TZXQpOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZv
LnN0dWJSb3V0aW5lOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC02NCw2ICs2NSw5IEBA
IFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKIAogYm9vbCBQdXRCeUlk
QWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikgY29uc3QKIHsK
KyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFJlcGxhY2U6CiAg
ICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQpAQCAtNzQs
MTUgKzc4LDExIEBAIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25l
d1N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0dGVyOgogICAgIGNhc2UgQ3VzdG9tU2V0
dGVyOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6
OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRC
eUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWlu
Q291bnQoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTYyLDE0ICs2MSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0
dXJlQ2hhaW4qIGNoYWluLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZSkKICAgICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICBy
ZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIG9sZFN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVj
dHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFp
bi5zZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9
IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAg
ICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTk1LDggKzk0LDcgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAog
ICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNo
YWluQ291bnQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQsCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNl
dHRlciwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAg
ICAgewpAQCAtMTA0LDEwICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3Mg
cmVzdWx0OwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3Ry
dWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlm
IChjaGFpbikgewotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hh
aW4pOwotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAg
ICAgIH0KKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAg
ICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3Vs
dC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBA
IC0xNDYsMTcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJl
LmdldCgpOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXND
dXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAg
ICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1Nl
dHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAg
IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGlu
ZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAgLTE3OCw4ICsxNjMsNyBAQCBwcml2YXRl
OgogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
b2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJl
OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25l
ZCBtX2NoYWluQ291bnQ7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7CiAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7
CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAg
ICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG91dC5wcmludChtX2tpbmQsICIgb2YgIiwgbV91aWQpOworICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCIgYXQgIiwgbV9v
ZmZzZXQsICIgd2l0aCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAg
IG91dC5wcmludCgiIHdpdGggcHJvdG90eXBlICIsIGluQ29udGV4dChKU09iamVjdChwcm90b3R5
cGUoKSksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXF1aXZhbGVuY2U6
CisgICAgICAgIG91dC5wcmludCgiIHdpdGggIiwgaW5Db250ZXh0KEpTVmFsdWU6OmVuY29kZShy
ZXF1aXJlZFZhbHVlKCkpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlv
bjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTT2JqZWN0KiBiYXNlKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRy
aWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYg
KGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0dHJpYnV0ZXMgIT0gYXR0cmli
dXRlcygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQWJzZW5jZTogeworICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSkgIT0gaW52YWxp
ZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpICE9IHByb3RvdHlwZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQoKSkgIT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAg
aWYgKGN1cnJlbnRBdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgQ3VzdG9tQWNjZXNzb3IpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgICAgIAorICAgIGNhc2UgRXF1aXZhbGVuY2U6IHsKKyAgICAgICAgaWYgKCFiYXNlIHx8
IGJhc2UtPnN0cnVjdHVyZSgpICE9IHN0cnVjdHVyZSkgeworICAgICAgICAgICAgLy8gQ29uc2Vy
dmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBzaW5jZSB3ZSBjYW5ub3QgdmVyaWZ5IHRoaXMgb25lIHdp
dGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgICAgLy8gb2JqZWN0LgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyBzb21ld2hhdCByYWN5LCBhbmQgbWF5YmUgbW9yZSByaXNreSB0aGFuIHdlIHdhbnQuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKKyAg
ICAgICAgCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIEpTVmFsdWUgY3VycmVudFZhbHVlID0g
YmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRPZmZzZXQpOworICAgICAgICBpZiAoY3VycmVudFZhbHVl
ICE9IHJlcXVpcmVkVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVy
ZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6Cisg
ICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9u
Ojppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlKSBjb25z
dAoreworICAgIGlmICghaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoc3RydWN0dXJlLCBiYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3Vy
cmVudGx5IHdlIGFzc3VtZSB0aGF0IGFuIGltcHVyZSBwcm9wZXJ0eSBjYW4gY2F1c2UgYSBwcm9w
ZXJ0eSB0byBhcHBlYXIsIGFuZCBjYW4gYWxzbworICAgIC8vICJzaGFkb3ciIGFuIGV4aXN0aW5n
IEpTIHByb3BlcnR5IG9uIHRoZSBzYW1lIG9iamVjdC4gSGVuY2UgaXQgYWZmZWN0cyBib3RoIHBy
ZXNlbmNlIGFuZAorICAgIC8vIGFic2VuY2UuIEl0IGRvZXNuJ3QgYWZmZWN0IEFic2VuY2VPZlNl
dHRlciBiZWNhdXNlIGltcHVyZSBwcm9wZXJ0aWVzIGFyZW4ndCBldmVyIHNldHRlcnMuCisgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToK
KyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygp
Lmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0
Y2hhYmxlV2hlblZhbGlkKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgRXF1aXZhbGVuY2U6IHsKKyAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KCkpOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIHdoZW4gc29tZSB2YXJpYW50IG9mIGlzVmFsaWQgcmV0dXJuZWQgdHJ1ZSwgd2hpY2gKKyAg
ICAgICAgLy8gaW1wbGllcyB0aGF0IHdlIGFscmVhZHkgY29uZmlybWVkIHRoYXQgdGhlIHN0cnVj
dHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHkuIFdlIHNob3VsZAorICAgICAgICAvLyBhbHNvIGhh
dmUgdmVyaWZpZWQgdGhhdCB0aGUgU3RydWN0dXJlIGlzIGEgY2FjaGVhYmxlIGRpY3Rpb25hcnks
IHdoaWNoIG1lYW5zIHdlCisgICAgICAgIC8vIHNob2xkbid0IGhhdmUgYSBUT0NUT1UgcmFjZSBl
aXRoZXIuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsK
KyAgICAgICAgCisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAgICAgICAgc3dpdGNoIChl
ZmZvcnQpIHsKKyAgICAgICAgY2FzZSBNYWtlTm9DaGFuZ2VzOgorICAgICAgICAgICAgc2V0ID0g
c3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5zdXJlV2F0Y2hhYmlsaXR5OgorICAgICAg
ICAgICAgc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCgK
KyAgICAgICAgICAgICAgICAqSGVhcDo6aGVhcChzdHJ1Y3R1cmUpLT52bSgpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghc2V0
LT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb3BlcnR5Q29u
ZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSwgV2F0Y2hhYmlsaXR5RWZmb3J0
IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJs
ZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRp
b246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFz
ZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGls
bFZhbGlkKHN0cnVjdHVyZSwgYmFzZSkKKyAgICAgICAgJiYgaXNXYXRjaGFibGVXaGVuVmFsaWQo
c3RydWN0dXJlLCBlZmZvcnQpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxs
TGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpICYmICFIZWFwOjppc01hcmtl
ZChwcm90b3R5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoaGFz
UmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKQorICAgICAgICAmJiBy
ZXF1aXJlZFZhbHVlKCkuaXNDZWxsKCkKKyAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKHJlcXVp
cmVkVmFsdWUoKS5hc0NlbGwoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVu
Y2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICho
YXNQcm90b3R5cGUoKSkKKyAgICAgICAgdHJhY2tlZC5jaGVjayhwcm90b3R5cGUoKSk7CisgICAg
CisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKSkKKyAgICAgICAgdHJhY2tlZC5jaGVjayhyZXF1
aXJlZFZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAg
IGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmlu
dCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRl
cjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJp
bnQoIkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNv
bmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvcGVydHlDb25kaXRp
b25faAorI2RlZmluZSBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBU
cmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgUHJvcGVydHlDb25kaXRpb24geworcHVibGljOgor
ICAgIGVudW0gS2luZCB7CisgICAgICAgIFByZXNlbmNlLAorICAgICAgICBBYnNlbmNlLAorICAg
ICAgICBBYnNlbmNlT2ZTZXR0ZXIsCisgICAgICAgIEVxdWl2YWxlbmNlIC8vIEFuIGFkYXB0aXZl
IHdhdGNocG9pbnQgb24gdGhpcyB3aWxsIGJlIGEgcGFpciBvZiB3YXRjaHBvaW50cywgYW5kIHdo
ZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9ucywgd2Ugd2lsbCBzZXQgdGhlIHJlcGxhY2VtZW50
IHdhdGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1Y3R1cmUuCisgICAgfTsKKyAgICAKKyAgICBQcm9w
ZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tp
bmQoUHJlc2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7Cisg
ICAgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChBYnNl
bmNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2VXaXRob3V0QmFycmllcihV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVp
ZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZXNlbmNlOworICAgICAgICByZXN1bHQudS5w
cmVzZW5jZS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJp
YnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiwgSlND
ZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRC
YXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAg
eworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3Vp
ZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2U7CisgICAgICAgIHJlc3Vs
dC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAg
ICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09i
amVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3du
ZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNl
dHRlcldpdGhvdXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09i
amVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0
OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBB
YnNlbmNlT2ZTZXR0ZXI7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJv
dG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVy
biBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJy
aWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91
aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFcXVpdmFsZW5jZTsKKyAgICAgICAg
cmVzdWx0LmVxdWl2YWxlbmNlLnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICB9
CisgICAgICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZSgKKyAg
ICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gZXF1aXZhbGVu
Y2VXaXRob3V0QmFycmllcih1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBQcmVzZW5jZTsg
fTsKKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAKKyAg
ICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IFBy
ZXNlbmNlIH07CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNl
dDsKKyAgICB9CisgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhp
cyAmJiBtX2tpbmQgPT0gUHJlc2VuY2UgfTsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBdHRyaWJ1dGVzKCkpOworICAgICAgICByZXR1
cm4gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1Byb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgKG1fa2luZCA9PSBBYnNlbmNlIHx8IG1f
a2luZCA9PSBBYnNlbmNlT2ZTZXR0ZXIpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUHJvdG90eXBlKCkpOworICAgICAgICByZXR1
cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNSZXF1aXJl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gRXF1aXZhbGVuY2U7
IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGhhc1JlcXVpcmVkVmFsdWUoKSk7CisgICAgICAgIHJldHVybiB1LmVxdWl2YWxlbmNlLnZh
bHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91aWQpICsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5j
ZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAgICAgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTT2Jq
ZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBFbmNvZGVkSlNW
YWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVz
ZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldCA9PSBvdGhlci51LnBy
ZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2VuY2UuYXR0cmlidXRlcyA9
PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAg
ICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdS5hYnNlbmNl
LnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOworICAgICAgICBjYXNlIEVx
dWl2YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIGEuZXF1aXZhbGVuY2UudmFsdWUgPT0gb3Ro
ZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gVHdv
IGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRo
ZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMuIElmCisgICAgLy8gZmFsc2UgaXMgcmV0dXJuZWQs
IHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLSBmb3IgZXhh
bXBsZSBpZiB0aGVyZSBpcworICAgIC8vIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRo
ZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBnZW5lcmFsIG9mIHRoZSB0d28K
KyAgICAvLyB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZp
YyBvZiB0aGUgdHdvLiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UKKyAgICAvLyBmb3IgY29u
dHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUgdWlkLiBC
eSBjb252ZW50aW9uLCBpbnZhbGlkCisgICAgLy8gY29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJs
ZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzIHx8ICFv
dGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzID09
IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBDaGVj
a3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29u
J3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNv
bnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9w
ZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGls
bFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFs
aWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsK
KyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCBkZWZpbml0ZWx5IGhhcywgb3IgZGVm
aW5pdGVseSBkb2VzIG5vdCBoYXZlLCB0aGUgcHJvcGVydHkgcmlnaHQgbm93LgorICAgIC8vIElm
IHRydWUsIHRoZW4gd2UgY291bGQgY29udGludWUgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBieSBj
aGVja2luZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIE1heSBjb25z
ZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9u
ZSBkb24ndAorICAgIC8vIGd1YXJhbnRlZSB0aGUgY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9y
IGFuIEFic2VuY2UgY29uZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlCisgICAgLy8g
aW1wdXJlIHByb3BlcnRpZXMuCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNP
YmplY3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2Vz
LCB0aGUgY29uZGl0aW9uIGlzIG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNo
YWJsZSBieSBlbmFibGluZyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3Ig
ZXhhbXBsZSwgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNv
bWUKKyAgICAvLyBhY2Nlc3MgaXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVj
dHVyZS4gVGhpcyBpcyBtYWlubHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5
IHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBp
dCdzIGFsd2F5cyBzYWZlIHRvCisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0
IHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmls
aXR5RWZmb3J0IHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhh
dCB3ZSBkb24ndCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAg
Ly8gb2JqZWN0LCBhbmQgaW1wbGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0
byBiZSB3YXRjaGFibGUgdGhlbiB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJs
ZS4gVGhpcyBpcyBtYW5kYXRvcnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBp
cyBhbHNvIHNvbWV3aGF0CisgICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGlu
ZyB3aGV0aGVyIHRvIHdhdGNoIGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgor
ICAgICAgICAvLyBub3QgZnJvbSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBz
ZWUgaWYgd2Ugc2hvdWxkIGFkYXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5v
dCBiZWluZyBpbml0aWFsaXplZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRv
bid0IGtub3cgZW5vdWdoCisgICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8g
d2F0Y2ggLS0gYXMgaW4sIHRoZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAg
ICAgICAvLyBzdGFiaWxpemVkIHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBj
b25kaXRpb24gd2lsbCBob2xkIGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhv
bGQgZm9yIGEgd2hpbGUgYWxyZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAg
CisgICAgICAgIC8vIERvIHdoYXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5
IGNhbiBiZSB3YXRjaGVkLCBpZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNl
cnZhYmxlIGVmZmVjdC4gRm9yIG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3Vy
ZSB0aGF0IGEgcHJvcGVydHkKKyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBl
bmFibGVkIGlmIGl0IGhhZG4ndCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlz
CisgICAgICAgIC8vIGZyb20gSklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcg
d2F0Y2hwb2ludHMgaXMgbm90IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxp
dHkKKyAgICB9OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlk
IGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisg
ICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUg
cHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0g
bnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAg
CisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVu
Zm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50
IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0
dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtl
Tm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50
bHksIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAg
cmV0dXJuICEhKnRoaXM7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2Vt
ZW50V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBt
X2tpbmQgPT0gRXF1aXZhbGVuY2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wg
aXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhj
b25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaXNX
YXRjaGFibGVXaGVuVmFsaWQoU3RydWN0dXJlKiwgV2F0Y2hhYmlsaXR5RWZmb3J0KSBjb25zdDsK
KworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKKyAgICBLaW5kIG1fa2luZDsKKyAgICB1
bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQ7CisgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB9IHByZXNlbmNl
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZTsKKyAg
ICAgICAgfSBhYnNlbmNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRW5jb2RlZEpT
VmFsdWUgdmFsdWU7CisgICAgICAgIH0gZXF1aXZhbGVuY2U7CisgICAgfSB1OworfTsKKworc3Ry
dWN0IFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgUHJvcGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29u
c3QgUHJvcGVydHlDb25kaXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOwor
ICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6UHJvcGVydHlDb25kaXRpb246
OktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAg
dHlwZWRlZiBKU0M6OlByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPEpTQzo6UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6
UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05MCwxOSArOTAsMTggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRnJvbQogICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTElu
dDo6Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkp
OwogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gaW5zdHJ1Y3Rpb25bNl0udS5z
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gaW5zdHJ1Y3Rpb25b
N10udS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKLSAgICBBU1NFUlQobmV3U3RydWN0dXJlKTsKLSAg
ICBBU1NFUlQoY2hhaW4pOwogICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAg
IAotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBpbnRlbmRlZENoYWluOwotICAg
IGlmIChjaGFpbikKLSAgICAgICAgaW50ZW5kZWRDaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKTsKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKGluc3RydWN0
aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsKQorICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6
Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkpIHsK
KyAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5U2V0dGVyTWlzc29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICpwcm9maWxl
ZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1
aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CiAgICAgCi0gICAgcmV0
dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBp
bnRlbmRlZENoYWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6
dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQp
OwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsxNjQsMTQgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSAKICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFp
bjsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbikg
ewotICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4oCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLT51LnB1
dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5hcmVTdGlsbFZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCiAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgp
LAotICAgICAgICAgICAgICAgIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkBAIC0yMTksMTUgKzIxNiwxMSBAQCBQdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAg
IGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIFJlZlB0
cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgICAgICBpZiAoYWNj
ZXNzLmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVk
QmxvY2ssIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLmNoYWluKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNl
dCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmFyZVN0aWxsVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7
CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAot
ICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1
Y3R1cmUoKSwgY2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vz
cy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9m
ZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCkBAIC0yNTMsNyArMjQ2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2Zp
bGVkQmxvY2ssICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRW
YXJpYW50OjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBs
ZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29t
cGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFdU
Rjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMzY4LDIyICszNjEsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5p
c09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgCi0gICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAg
ICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAot
ICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFk
LW9ubHkgcHJvcGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICAgICAgaWYgKGNoYWluLT5t
YXlJbnRlcmNlcHRTdG9yZVRvKHVpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHBy
b3RvdHlwZSBjaGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94
aWVzIG9yIGRpY3Rpb25hcmllcykKLSAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhlIGRp
Y3Rpb25hcnkgY2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbm90
IGJlZW4KLSAgICAgICAgICAgIC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0cmFu
c2l0aW9uLiBBbmQgcmVhbGx5IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKLSAgICAgICAg
ICAgIC8vIGJhaWwgaGVyZSBpcyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcg
dGhlIG9wdGltaXppbmcgSklUIGdvIGFuZCBmbGF0dGVuCi0gICAgICAgICAgICAvLyBkaWN0aW9u
YXJpZXMgaWYgd2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3
ZXJlIG5ldmVyIHVzZWQgYXMKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFi
bGUgcHJvdG90eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29t
ZSBvZgotICAgICAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwuCi0g
ICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6
ZWQoKSkKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QtPnZtKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICB9CiAgICAgCkBAIC0zOTQsNyArMzc2LDcg
QEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBBU1NF
UlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQg
PSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4uZ2V0KCksIG9mZnNldCkpOworICAg
ICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9u
LCBjb25kaXRpb25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNw
cAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNyBAQCBQdXRCeUlkVmFy
aWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9raW5kID0gb3RoZXIubV9raW5k
OwogICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CiAgICAgbV9uZXdT
dHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0g
b3RoZXIubV9jb25zdGFudENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2Fs
dGVybmF0ZUJhc2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsK
ICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNjQsMjkgKzYzLDI2IEBA
IFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGMKIAogUHV0QnlJZFZhcmlh
bnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IEludGVuZGVk
U3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1
bHQubV9raW5kID0gVHJhbnNpdGlvbjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRT
dHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAg
IGlmIChzdHJ1Y3R1cmVDaGFpbikKLSAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNr
cyhyZXN1bHQubV9jb25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0g
Y29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0g
ICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlu
a1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IGNhbGxMaW5rU3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1
bHQubV9raW5kID0gU2V0dGVyOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKLSAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQu
bV9jb25zdGFudENoZWNrcyk7Ci0gICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBjaGFp
bi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICB9CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0
ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1
bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTEzNCwxNiArMTMwLDEyIEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1h
a2VzQ2FsbHMoKSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1
Y3R1cmVTZXQgUHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAorSlNPYmplY3Qq
IFB1dEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoa2lu
ZCgpID09IFNldHRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAg
IHJldHVybiBzdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVB
U0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICBSRUxFQVNF
X0FTU0VSVChtX2tpbmQgPT0gU2V0dGVyKTsKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKTsKIH0KIAogYm9vbCBQdXRCeUlkVmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQpAQCAtMTk2LDYgKzE4
OCw3IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICBBU1NF
UlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLndy
aXRlc1N0cnVjdHVyZXMoKSk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFn
ZSgpKTsKKyAgICBBU1NFUlQoIXJlcGxhY2UuY29uZGl0aW9uU2V0KCkpOwogICAgIAogICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAogICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKQEAgLTIzMiwxMyArMjI1LDEzIEBAIHZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAg
IjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+
ICIsCiAgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29u
dGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVj
a3MoKSwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAg
ICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBv
ZmZzZXQoKSwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRl
cjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4
dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNv
bnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29udGV4dCksICJdIik7CisgICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBpZiAobV9hbHRl
cm5hdGVCYXNlKQogICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBp
bkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CiAgICAgICAgIG91
dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg2OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAg
ICAgICAgOiBtX2tpbmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIp
Ci0gICAgICAgICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQo
aW52YWxpZE9mZnNldCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYgKzUzLDE1IEBAIHB1YmxpYzoK
ICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRW
YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQ
dXRCeUlkVmFyaWFudCByZXBsYWNlKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQg
cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAg
c3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29u
c3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJv
cGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0g
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsCi0gICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwog
ICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIApAQCAt
MTAwLDEwICs5OCw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25k
aXRpb25TZXQ7IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAogICAg
IHsKQEAgLTExMSwxMyArMTA2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZzZXQ7
CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fYWx0
ZXJuYXRlQmFzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUo
KSBjb25zdDsKKyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0OwogICAgIAogICAg
IENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewpAQCAtMTM2LDgg
KzEyNSw3IEBAIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJlU2V0IG1f
b2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBt
X2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsMjQgKzQ2LDI5IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQqIFN0cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxp
Y2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBv
aW50cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCBy
ZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0
IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcu
Ci0gICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8o
KSk7CisgICAgaWYgKCFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJl
V2F0Y2hhYmlsaXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBt
eSBvd24gZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAg
ICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0
IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2
ZXJzYWwgZm9yIGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAg
ICAgICBtX2hvbGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKQog
ewogfQogCi1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJu
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFk
KTsKIH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJl
ZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9j
ayogY29kZUJsb2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpCiB7CiAgICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVm
KG5ldyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykp
OwpAQCAtNzIsNyArNzcsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRj
aHBvCiAgICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwog
ICAgIH0KICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAg
cmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg2
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSAr
NDcsMTEgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9s
ZGVyKQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAg
IDogbV9rZXkoa2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25l
eHQoV1RGOjptb3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsK
ICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpA
QCAtODMsMTEgKzgxLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCogYWRkV2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQq
IGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAg
CiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVy
ZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvKik7CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgs
MTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNj
ZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Cisg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZToKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25z
IGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgs
MTAgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8
ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAg
ICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdl
dCgpKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAg
ICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg2OTg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewog
CiAgICAgLy8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2
b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVy
ZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAg
ICBpZiAoaXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm8gewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1
LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAg
dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFz
ZVJhd1BvaW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3
NSwxMCArMTc1LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4g
PSB0cnVlOwogICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCogYWRkV2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKICAg
ICB7CiAgICAgICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3Vy
ZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29k
ZUJsb2NrLCB0aGlzKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMs
IGNvbmRpdGlvbik7CiAgICAgfQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpAQCAtMjE3
LDIzICsyMTgsMTIgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIFdy
aXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAgICAgICB9
IGdldEJ5SWRTZWxmOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJh
cnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAgICAgYm9v
bCBpc0RpcmVjdDsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVy
ZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwot
ICAgICAgICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJl
Y3QgOiAxOwotICAgICAgICB9IGdldEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0QnlJZExp
c3Q7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0
cnVjdHVyZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1
cmVDaGFpbj4gY2hhaW47CisgICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7CiAgICAg
ICAgIH0gcHV0QnlJZFRyYW5zaXRpb247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBX
cml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkua2luZCgpID09IFByb3BlcnR5Q29u
ZGl0aW9uOjpFcXVpdmFsZW5jZSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5p
c1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFk
ZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3N0cnVjdHVyZVdhdGNocG9pbnQpOworICAgIAorICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fa2V5LT5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdl
dENvbmN1cnJlbnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9r
ZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNl
dChvZmZzZXQpOworICAgIHNldC0+YWRkV2F0Y2hwb2ludCgmbV9wcm9wZXJ0eVdhdGNocG9pbnQp
OworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6Zmly
ZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgLy8gT25lIG9mIHRoZSB3YXRjaHBv
aW50cyBmaXJlZCwgYnV0IHRoZSBvdGhlciBvbmUgZGlkbid0LiBNYWtlIHN1cmUgdGhhdCBuZWl0
aGVyIG9mIHRoZW0gYXJlCisgICAgLy8gaW4gYW55IHNldCBhbnltb3JlLiBUaGlzIHNpbXBsaWZp
ZXMgdGhpbmdzIGJ5IGFsbG93aW5nIHVzIHRvIHJlaW5zdGFsbCB0aGUgd2F0Y2hwb2ludHMKKyAg
ICAvLyB3aGVyZXZlciBmcm9tIHNjcmF0Y2guCisgICAgaWYgKG1fc3RydWN0dXJlV2F0Y2hwb2lu
dC5pc09uTGlzdCgpKQorICAgICAgICBtX3N0cnVjdHVyZVdhdGNocG9pbnQucmVtb3ZlKCk7Cisg
ICAgaWYgKG1fcHJvcGVydHlXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fcHJvcGVy
dHlXYXRjaHBvaW50LnJlbW92ZSgpOworICAgIAorICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQ
cm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxs
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hv
d0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcg
d2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1f
Y29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0
OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRl
dGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwob3V0LnRvQ1N0cmluZygp
LmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0
aW9uLCAmZGV0YWlsKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBG
aXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09G
RlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQs
IG1fc3RydWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShk
ZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dDo6UHJvcGVydHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFp
bCYgZGV0YWlsKQoreworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigK
KyAgICAgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3Byb3Bl
cnR5V2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKyNkZWZpbmUg
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitjbGFzcyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAg
ICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1
cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJpdmF0ZToKKyAgICBj
bGFzcyBTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJp
ZGU7CisgICAgfTsKKyAgICBjbGFzcyBQcm9wZXJ0eVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hw
b2ludCB7CisgICAgcHVibGljOgorICAgICAgICBQcm9wZXJ0eVdhdGNocG9pbnQoKSB7IH0KKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmly
ZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisgICAgCisgICAgdm9pZCBmaXJlKGNvbnN0IEZp
cmVEZXRhaWwmKTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnQgbV9zdHJ1
Y3R1cmVXYXRjaHBvaW50OworICAgIFByb3BlcnR5V2F0Y2hwb2ludCBtX3Byb3BlcnR5V2F0Y2hw
b2ludDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LndhdGNoaW5nUmVxdXJp
ZXNTdHJjdXR1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
a2V5LndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7Cit9CisKK3ZvaWQg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChtX2tleS5pc1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRl
dGFpbCkKK3sKKyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVu
c3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7Cisg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9p
bnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7Cisg
ICAgfQorICAgIAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFk
YXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0
cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAg
IG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9V
bnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2Rl
ZmluZSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldh
dGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6
CisgICAgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7Cisg
ICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5OyB9CisgICAgCisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3
ICsyMTMsMjcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIE5v
ZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQ
dXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCk7Ci0gICAgdm9pZCBlbWl0Q2hl
Y2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsKKworICAgIC8vIEVpdGhl
ciByZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1pdCBhIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlv
bi4gUmV0dXJucyBmYWxzZSBpZiB0aGUKKyAgICAvLyBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRz
LCBhbmQgdGhlcmVmb3JlIG5vIHJlYXNvbmFibGUgY2hlY2sgY2FuIGJlIGVtaXR0ZWQuCisgICAg
Ym9vbCBjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAorICAgIC8v
IEVpdGhlciByZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1pdCBhIGNoZWNrIGZvciB0aGlzIGNv
bmRpdGlvbi4gSXQgbXVzdCBiZSBhIFByZXNlbmNlCisgICAgLy8gY29uZGl0aW9uLiBJdCB3aWxs
IGF0dGVtcHQgdG8gcHJvbW90ZSBhIFByZXNlbmNlIGNvbmRpdGlvbiB0byBhbiBFcXVpdmFsZW5j
ZSBjb25kaXRpb24uCisgICAgLy8gRW1pdHMgY29kZSBmb3IgdGhlIGxvYWRlZCB2YWx1ZSB0aGF0
IHRoZSBjb25kaXRpb24gZ3VhcmRzLCBhbmQgcmV0dXJucyBhIG5vZGUgY29udGFpbmluZworICAg
IC8vIHRoZSBsb2FkZWQgdmFsdWUuIFJldHVybnMgbnVsbCBpZiB0aGUgY29uZGl0aW9uIG5vIGxv
bmdlciBob2xkcy4KKyAgICBOb2RlKiBsb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
Jik7CisgICAgCisgICAgLy8gQ2FsbHMgY2hlY2soKSBmb3IgZWFjaCBjb25kaXRpb24gaW4gdGhl
IHNldDogdGhhdCBpcywgaXQgZWl0aGVyIGVtaXRzIGNoZWNrcyBvciByZWdpc3RlcnMKKyAgICAv
LyB3YXRjaHBvaW50cyAob3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvKSB0byBtYWtlIHRoZSBj
b25kaXRpb25zIGhvbGQuIElmIGFueSBvZiB0aG9zZQorICAgIC8vIGNvbmRpdGlvbnMgYXJlIG5v
IGxvbmdlciBjaGVja2FibGUsIHJldHVybnMgZmFsc2UuCisgICAgYm9vbCBjaGVjayhjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNrKCkg
Zm9yIHRob3NlIGNvbmRpdGlvbnMgdGhhdCBhcmVuJ3QgdGhlIHNsb3QgYmFzZSwgYW5kIGNhbGxz
IGxvYWQoKSBmb3IgdGhlIHNsb3QKKyAgICAvLyBiYXNlLiBEb2VzIGEgY29tYmluYXRpb24gb2Yg
d2F0Y2hwb2ludCByZWdpc3RyYXRpb24gYW5kIGNoZWNrIGVtaXNzaW9uIHRvIGd1YXJkIHRoZQor
ICAgIC8vIGNvbmRpdGlvbnMsIGFuZCBlbWl0cyBjb2RlIHRvIGxvYWQgdGhlIHZhbHVlIGZyb20g
dGhlIHNsb3QgYmFzZS4gUmV0dXJucyBhIG5vZGUgY29udGFpbmluZworICAgIC8vIHRoZSBsb2Fk
ZWQgdmFsdWUuIFJldHVybnMgbnVsbCBpZiBhbnkgb2YgdGhlIGNvbmRpdGlvbnMgd2VyZSBubyBs
b25nZXIgY2hlY2thYmxlLgorICAgIE5vZGUqIGxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmKTsKIAogICAgIHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIHZvaWQg
Y2xlYXJDYWNoZXMoKTsKQEAgLTcwNyw2ICs3MjcsOSBAQCBwcml2YXRlOgogICAgIAogICAgIE5v
ZGUqIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcm91
dGUgdG8gZW1pdFByb3BlcnR5Q2hlY2ssIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gQnV0IGN1
cnJlbnRseSwKKyAgICAgICAgLy8gdGhpcyBnZXRzIG5vIHByb2ZpdCBmcm9tIHVzaW5nIGVtaXRQ
cm9wZXJ0eUNoZWNrKCkgc2luY2Ugd2UnbGwgbm9uLWFkYXB0aXZlbHkgd2F0Y2ggdGhlCisgICAg
ICAgIC8vIG9iamVjdCdzIHN0cnVjdHVyZSBhcyBzb29uIGFzIHdlIG1ha2UgaXQgYSB3ZWFrSlND
b3NudGFudC4KICAgICAgICAgTm9kZSogb2JqZWN0Tm9kZSA9IHdlYWtKU0NvbnN0YW50KG9iamVj
dCk7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgb2JqZWN0Tm9kZSk7CiAgICAgICAgIHJldHVybiBv
YmplY3ROb2RlOwpAQCAtMjI5MCwxMCArMjMxMyw5NSBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlPZmZzZXQoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6ZW1pdENoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2
ZWN0b3IpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNv
bmRpdGlvbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAoIWNvbmRp
dGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLAorICAgICAgICBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksCisgICAgICAgIHdlYWtKU0Nv
bnN0YW50KGNvbmRpdGlvbi5vYmplY3QoKSkpOworICAgIHJldHVybiB0cnVlOworfQorCitOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6bG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uKQoreworICAgIC8vIFdlIG1pZ2h0IHByb21vdGUgdGhpcyB0byBFcXVpdmFsZW5jZSwg
YW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBzdWNoIHByb21vdGlvbgorICAgIC8v
IGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5IHRoaXMgY2Fubm90IGJlIGFza2Vk
IHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8vIE5vbmUgb2YgdGhlIGNs
aWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEgbG9hZCBvZiBhbiBFcXVpdmFsZW5j
ZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBwb3J0aW5nIGl0IHdvdWxkIGNvbXBs
aWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9u
LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworICAgIAorICAgIC8vIEhl
cmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRoaXMsIGZyb20gbW9zdCBwcmVmZXJy
ZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAgLy8gMSkgV2F0Y2hwb2ludCBvbiBh
biBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBhIGNvbnN0YW50IG5vZGUgZm9yIHRo
ZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIgY29kZSBpcyBlbWl0dGVkLCBhbmQg
dGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMgbmV2ZXIgcmVnaXN0ZXJlZC4KKyAg
ICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBjb2RlIGFuZCB3ZSB3b24ndCBqZXR0
aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QKKyAgICAvLyAgICB0cmFuc2l0aW9u
cywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJsZSByaWdodCBub3cuCisgICAgLy8K
KyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJl
IG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQgYnkgdGhlCisgICAgLy8gICAgREZH
IGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNoIHRoZSBzdHJ1Y3R1cmUgYW5kIGVt
aXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8vICAgIGNvbmRpdGlvbiwgc2luY2Ug
dGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBjb25zdGFudCBpbiBJUiB3aWxsIGNh
dXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUgc3RydWN0dXJlIGFueXdheSBhbmQg
ZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUgY29uZGl0aW9uLgorICAgIC8vCisg
ICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBv
ZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0aGUKKyAgICAvLyAgICBERkcgKGku
ZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSBhbmQgIWRmZ1Nob3VsZFdh
dGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0aGUgY29uZGl0aW9uLCBhbmQgZW1p
dCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhl
IGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5vdCB3YXRjaGFibGUuIEVtaXQgYQor
ICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQgYSBsb2FkLgorICAgIC8vCisgICAg
Ly8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBSZXR1cm4gbnVsbC4KKyAgICAKKyAg
ICAvLyBNYWtlIHN1cmUgd2UgYWdyZWUgb24gd2hhdCB0aGUgc3RydWN0dXJlIGlzIGZvciB0aGUg
cHVycG9zZSBvZiBlbWl0dGluZyB0aGVzZSB2YXJpb3VzCisgICAgLy8gY2hlY2tzLgorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAg
ICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRvIHByb21vdGUgUHJlc2VuY2UgdG8gRXF1aXZhbGVuY2Uu
IFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UKKyAgICAvLyBiZWNhdXNlIGl0
J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4gQWxzbywgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBw
cmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0CisgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byB3YXRjaCBp
dCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVxdWl2YWxlbmNlIChzZWUgdGhlIHJlbGF0aW9uc2hpcCBi
ZXR3ZWVuCisgICAgLy8gKDEpLCAoMiksIGFuZCAoMykgYWJvdmUpLgorICAgIGlmIChzdHJ1Y3R1
cmUtPmlzVmFsaWRPZmZzZXQoY29uZGl0aW9uLm9mZnNldCgpKSkgeworICAgICAgICAvLyBUaGlz
IGxvYWQgaXMgZmluZSBiZWNhdXNlIG9ubHkgdGhlIEdDIGNhbiBjYXVzZSBhIGRlbGV0ZWQgcHJv
cGVydHkgdG8gaGF2ZSBhIGdhcmJhZ2UKKyAgICAgICAgLy8gdmFsdWUuCisgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBjb25kaXRpb24ub2JqZWN0KCktPmdldERpcmVjdChjb25kaXRpb24ub2Zmc2V0
KCkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZUNvbmRpdGlv
biA9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRo
b3V0QmFycmllcigKKyAgICAgICAgICAgICAgICBjb25kaXRpb24ub2JqZWN0KCksIGNvbmRpdGlv
bi51aWQoKSwgdmFsdWUpOworICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihlcXVp
dmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQodmFs
dWUpOworICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSdsbCBoYXZlIHRvIG1h
dGVyaWFsaXplIHRoZSBjb25kaXRpb24ncyBiYXNlIGFzIGEgY29uc3RhbnQgaW4gREZHIElSLiBP
bmNlCisgICAgLy8gd2UgZG8gdGhpcywgdGhlIGZyb3plbiB2YWx1ZSB3aWxsIGhhdmUgaXRzIG93
biBpZGVhIG9mIHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4gVXNlIHRoYXQgZnJvbQorICAgIC8vIG5v
dyBvbiBqdXN0IGJlY2F1c2UgaXQncyBsZXNzIGNvbmZ1c2luZy4KKyAgICBOb2RlKiBiYXNlTm9k
ZSA9IHdlYWtKU0NvbnN0YW50KGNvbmRpdGlvbi5vYmplY3QoKSk7CisgICAgc3RydWN0dXJlID0g
YmFzZU5vZGUtPmNvbnN0YW50KCktPnN0cnVjdHVyZSgpOworICAgIAorICAgIC8vIENoZWNrIGlm
IHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSd2ZSByZWdpc3RlcmVkIG1ha2VzIHRoZSBjb25kaXRpb24g
aG9sZC4gSWYgbm90LCBqdXN0IGdpdmUKKyAgICAvLyB1cC4gVGhpcyBpcyBjYXNlICg1KSBhYm92
ZS4KKyAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRjaGVk
IGJ5IHRoZSBERkcgYWxyZWFkeSwgdGhlbiBqdXN0IHVzZSB0aGlzIGZhY3QgdG8gZW1pdCB0aGUg
bG9hZC4KKyAgICBpZiAoc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBVc2UgYSBnZXRieW9mZnNldCBoZWxwZXIgaGVyZS4KKyAgICAgICAgbV9ncmFwaC4K
KyAgICB9Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVj
dHVyZUNoZWNrKHZlY3RvcltpXS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCkpOwor
ICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29uZGl0
aW9uU2V0KSB7CisgICAgICAgIGlmICghY2hlY2soY29uZGl0aW9uKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUdldEJ5SWQoCkBAIC0yMzIyLDggKzI0MzAsMTEgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3Ry
dWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5v
dCBiZQogICAgICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVj
dXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAg
IG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAg
ICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50
cygpOyB2YXJpYW50SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0
dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCB2YXJpYW50SW5kZXggPSBnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRl
eC0tOykgeworICAgICAgICAgICAgZW1pdFByb3BlcnR5Q2hlY2tzKAorICAgICAgICAgICAgICAg
IGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpLAorICAgICAgICAg
ICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CisgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIC8vIDIpIEVtaXQgYSBNdWx0aUdldEJ5T2Zmc2V0CiAgICAg
ICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpR2V0QnlPZmZz
ZXREYXRhLmFkZCgpOwpAQCAtMjM0NCw3ICsyNDU1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlR2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKSkpLCBiYXNlKTsKICAgICAKLSAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVj
a3MoKSk7CisgICAgZW1pdFByb3BlcnR5Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSwg
bV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKIAogICAgIGlmICh2YXJp
YW50LmFsdGVybmF0ZUJhc2UoKSkKICAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlh
bnQuYWx0ZXJuYXRlQmFzZSgpKTsKQEAgLTI0MzgsNyArMjU0OSw5IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJ
bmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIGVtaXRDaGVja3MocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhd
LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICAgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNrcygK
KyAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50
Q2hlY2tzKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0y
NDYzLDcgKzI1NzYsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAg
IAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgYWRkVG9H
cmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlh
bnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5j
b25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZW1pdFByb3BlcnR5Q2hlY2tzKAorICAgICAgICAg
ICAgdmFyaWFudC5jb25zdGFudENoZWNrcygpLAorICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlm
aWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRT
dHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbklu
dmFsaWRhdGVkKCkpOwogICAgIApAQCAtMjUxOSw3ICsyNjM0LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgIENo
ZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1
Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgCi0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5j
b25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZW1pdFByb3BlcnR5Q2hlY2tzKHZhcmlhbnQuY29u
c3RhbnRDaGVja3MoKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsK
ICAgICAgICAgCiAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKICAgICAgICAg
ICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9u
IDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDkgQEAgdm9pZCBDb21tb25EYXRhOjp2YWxpZGF0
ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNr
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7CiAgICAgICAgIH0K
ICAgICB9CisgICAgCisgICAgZm9yIChBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQqIHdhdGNo
cG9pbnQgOiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzKQorICAgICAgICB3YXRjaHBvaW50
LT5rZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorI2lu
Y2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2lu
Y2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNl
dC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTgsNiArMTAwLDggQEAgcHVibGljOgogICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7CiAgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0dXJlUmVmZXJlbmNlczsKICAgICBC
YWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3YXRjaHBvaW50czsKKyAgICBCYWc8
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRz
OworICAgIEJhZzxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+IGFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CiAgICAgVmVjdG9yPEp1bXBSZXBs
YWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsKICAgICAKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNv
bXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQoCi0gICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBXYXRjaHBvaW50
KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmll
dyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQogeworICAgIFdhdGNocG9pbnQqIHdhdGNocG9p
bnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7CiAgICAgQXJyYXlCdWZmZXJO
ZXV0ZXJpbmdXYXRjaHBvaW50KiBuZXV0ZXJpbmdXYXRjaHBvaW50ID0KICAgICAgICAgQXJyYXlC
dWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50OjpjcmVhdGUoKmNvZGVCbG9jay0+dm0oKSk7CiAgICAg
bmV1dGVyaW5nV2F0Y2hwb2ludC0+c2V0KCktPmFkZCh3YXRjaHBvaW50KTsKQEAgLTQ1LDEwICs0
NiwyMyBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphCiB9CiAKIHZv
aWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgQ29t
bW9uRGF0YSYgY29tbW9uKQogewogICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQoaW5mZXJyZWRW
YWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBp
dCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXks
IHRvby4KLSAgICBpbmZlcnJlZFZhbHVlLT5hZGQod2F0Y2hwb2ludCk7CisgICAgaW5mZXJyZWRW
YWx1ZS0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Cit9CisKK3ZvaWQg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBDb21tb25EYXRh
JiBjb21tb24pCit7CisgICAgc3dpdGNoIChrZXkua2luZCgpKSB7CisgICAgY2FzZSBQcm9wZXJ0
eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgY29tbW9uLmFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29kZUJsb2NrKS0+aW5zdGFsbCgpOworICAgICAg
ICBicmVhazsKKyAgICB9CiB9CiAKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9p
bnRzKCkgeyB9CkBAIC03NCw2ICs4OCwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRk
TGF6aWx5KEpTQXJyCiAgICAgbV9idWZmZXJWaWV3cy5hZGRMYXppbHkodmlldyk7CiB9CiAKK3Zv
aWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSkKK3sKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5
KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtODgs
NiArMTA3LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAg
IG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2lu
ZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVm
ZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9hZGFwdGl2
ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJv
b2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTk1LDcgKzEx
NSw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICByZXR1
cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3Rp
bGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCi0g
ICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2J1
ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJl
U2V0cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogCkBAIC00MSwxNSArNDIsMTUgQEAgY2xhc3MgR3JhcGg7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2Rl
QmxvY2sqLCBUIHNldCwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBzdGF0aWMgdm9pZCBh
ZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21tb25EYXRhJiBjb21tb24pCiAgICAg
ewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2ludCk7CisgICAgICAgIHJldHVybiBz
ZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOwogICAgIH0KICAgICBz
dGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVl
bkludmFsaWRhdGVkKCk7IH0KIH07CiAKIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7Ci0g
ICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBXYXRjaHBvaW50
Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBDb21t
b25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEluZmVycmVkVmFs
dWUqIGluZmVycmVkVmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gaW5mZXJyZWRWYWx1ZS0+
aGFzQmVlbkludmFsaWRhdGVkKCk7CkBAIC01NywxMiArNTgsMTggQEAgc3RydWN0IEluZmVycmVk
VmFsdWVBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRh
cHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3
KiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5
QnVmZmVyVmlldyosIENvbW1vbkRhdGEmKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxp
ZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewotICAgICAgICBib29sIHJlc3Vs
dCA9ICF2aWV3LT5sZW5ndGgoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiAhdmlldy0+bGVuZ3RoKCk7CisgICAg
fQorfTsKKworc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3IgeworICAg
IHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYsIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAh
a2V5LmlzV2F0Y2hhYmxlKCk7CiAgICAgfQogfTsKIApAQCAtODcsNyArOTQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKICAgICAgICAgCiAgICAg
ICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQotICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNv
ZGVCbG9jaywgc2V0LCBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworICAgICAg
ICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24pOwogICAgICAgICAKICAg
ICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQpAQCAtMTIyLDYgKzEyOSwxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSopOwogICAgIHZvaWQgYWRk
TGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAgCisgICAgLy8gSXQncyByZWNvbW1lbmRl
ZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZQorICAgIC8vIEdyYXBoOjph
ZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQsIHdoaWNoIGRvZXMgdGhlIHJlcXVpcmVkIEdD
IG1hZ2ljIGFzIHdlbGwuCisgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mKTsKKyAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIAog
ICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEmKTsKQEAgLTE0NCwxMiAr
MTU1LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlz
V2F0Y2hlZCh2aWV3KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3Ry
dWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNldCo+IG1fc2V0czsKICAgICBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzPElubGluZVdhdGNocG9pbnRTZXQqPiBtX2lubGluZVNldHM7
CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRW
YWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBv
aW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9y
PiBtX2J1ZmZlclZpZXdzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJv
cGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRh
cHRpdmVTdHJ1Y3R1cmVTZXRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUw
LDcgKzUwLDE0IEBAIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6fkRlc2lyZWRXZWFrUmVmZXIKIAog
dm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU0NlbGwqIGNlbGwpCiB7Ci0g
ICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKKyAgICBpZiAoY2VsbCkKKyAgICAgICAgbV9yZWZl
cmVuY2VzLmFkZChjZWxsKTsKK30KKwordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExh
emlseShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAg
YWRkTGF6aWx5KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAogYm9vbCBEZXNpcmVkV2Vha1JlZmVyZW5j
ZXM6OmNvbnRhaW5zKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkocmV2aXNpb24gMTg2OTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB+RGVzaXJl
ZFdlYWtSZWZlcmVuY2VzKCk7CiAKICAgICB2b2lkIGFkZExhemlseShKU0NlbGwqKTsKKyAgICB2
b2lkIGFkZExhemlseShKU1ZhbHVlKTsKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAg
IAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4Njk4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNiAr
ODQ4LDIxIEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVGbGEKICAgICB9
CiB9CiAKK2Jvb2wgR3JhcGg6OmFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIGlmICgha2V5LmlzV2F0Y2hhYmxl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5j
ZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAgaWYgKGtleS5oYXNQcm90b3R5cGUoKSkK
KyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucHJvdG90eXBlKCkp
OworICAgIGlmIChrZXkuaGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICBtX3BsYW4ud2Vha1Jl
ZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5yZXF1aXJlZFZhbHVlKCkpOworICAgIAorICAgIG1fcGxh
bi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNv
ZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29k
ZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9u
IDE4Njk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSw5IEBAIHB1YmxpYzoKICAgICBEZXNpcmVkSWRlbnRpZmll
cnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CiAgICAgRGVz
aXJlZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50
czsgfQogICAgIAorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGlu
dmFsaWQuCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYpOworICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2Rl
QmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2Fs
bEZyYW1lKik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTg2OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsMTEg
QEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0
QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGFsc28gY2hlY2sg
dGhlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkLgor
ICAgICAgICAvLyBJZiB3ZSBoYXZlIG9uZSB0aGF0IGd1YXJhbnRlZXMgdGhlIHByZXNlbmNlIG9m
IHRoaXMgcHJvcGVydHksIHRoZW4gdGhpcyBpcyBhbHdheXMgc2FmZQorICAgICAgICAvLyB0byBl
eGVjdXRlLgorICAgICAgICBGSVhNRTsKKyAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1
cmU7CiAgICAgICAgIGlmICh2YWx1ZS5pc1RvcCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODY5
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KAogICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBh
Y3QpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZp
cmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkc0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAg
ICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CkBAIC0xMzIs
NDcgKzEzMiwzMCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYK
IH0KIAotc3RhdGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgIEpTQ2Vs
bCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCitz
dGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0g
ICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIHN0cnVjdHVyZS0+dHJh
bnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBzdHJ1Y3R1cmUt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2Nr
KSk7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICAvLyBJZiB3
ZSBleGVjdXRlIHRoaXMgY29kZSwgdGhlIG9iamVjdCBtdXN0IGhhdmUgdGhlIHN0cnVjdHVyZSB3
ZSBleHBlY3QuIEFzc2VydAotICAgICAgICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KLSAg
ICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCks
IHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBicmFu
Y2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAgICAgaml0LAotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJ
bmVmZmVjdGl2ZVdhdGNocG9pbnQpOwotICAgICAgICAgICAgb2subGluaygmaml0KTsKLSAgICAg
ICAgfQorICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKSB7CisgICAgICAgIGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCkt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2Nr
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CiAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZCgKLSAgICAgICAgYnJhbmNoU3RydWN0dXJlKGppdCwKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgaml0
LCBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1
cmUpKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAg
IEpTVmFsdWUgcHJvdG90eXBlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLAotICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBpZiAocHJv
dG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKHByb3Rv
dHlwZS5pc0NlbGwoKSk7Ci0gICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAot
ICAgICAgICBwcm90b3R5cGUuYXNDZWxsKCksIHByb3RvdHlwZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCksIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwKLSAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3Jh
dGNoR1BSKTsKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQsIENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgTWFjcm9Bc3NlbWJsZXImIGpp
dCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hH
UFIpCit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
IDogc2V0KSB7CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb24oCisgICAgICAg
ICAgICBjb25kaXRpb24sIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBz
Y3JhdGNoR1BSKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBh
dGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCkBAIC0yOTYsMTEgKzI3OSwxMiBAQCBz
dGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1dFByCiAKIHN0YXRpYyBib29sIGdl
bmVyYXRlQnlJZFN0dWIoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBCeUlkU3R1YktpbmQga2luZCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLAotICAgIEZ1bmN0aW9uUHRyIGN1c3RvbSwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVf
dCBjb3VudCwKKyAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBib29sIGxvYWRU
YXJnZXRGcm9tUHJveHksIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVs
LCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKLQorICAgIEFTU0VSVChj
b25kaXRpb25TZXQuYXJlU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpOworICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzMyArMzMwLDI1IEBAIHN0
YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygp
Lm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUt
Pm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9y
SW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVC
bG9jaykpOwogCiAgICAgaWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQt
PmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJl
KiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3Qg
PSAwOwotICAgIGlmIChjaGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiog
aXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291
bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJy
U3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0
dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAg
ICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVz
V2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9y
SW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVC
bG9jaykpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5m
bywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwot
ICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAg
ICBBU1NFUlQoIXByb3RvT2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJy
U3RydWN0dXJlKTsKLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisg
ICAgICAgIGNvbmRpdGlvblNldCwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2Fz
ZXMsIHNjcmF0Y2hHUFIpOwogICAgIAorICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAg
ICBpZiAoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKKyAgICBlbHNlCisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CiAgICAgY3VyclN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsK
KyAgICAKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAg
aWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxk
IGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQg
ZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJn
ZXRGcm9tUHJveHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdl
dEdQUik7CkBAIC02MjcsOSArNjAzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlv
bkZvckNlbGwoVgogICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmpl
Y3Qodm0pOwogICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KLSAgICBBU1NF
UlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgaWYg
KHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJ
bXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKIAogICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsKQEAgLTgyNywyMSArODAyLDIyIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICB9CiAKICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90
LmNhY2hlZE9mZnNldCgpOwotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7
Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQ7CiAgICAgCiAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Qu
c2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkp
Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVj
dHVyZSk7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eU1pc3MoZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nl
c3MoCi0gICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlk
ZW50LCBvZmZzZXQpOwotICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQorICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50Lmlt
cGwoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgb2Zm
c2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQog
ICAgIAogICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0Ojpmcm9tKHN0dWJJbmZvKTsKQEAgLTg1Miw3ICs4MjgsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0g
ICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJ
bmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRG
b3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQs
IG9mZnNldCwgCiAgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53
YXRjaHBvaW50U2V0KCksIAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1
YlJvdXRpbmUpOwpAQCAtODcxLDcgKzg0Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygK
ICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBz
dHViUm91dGluZSwgc3RydWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsK
KyAgICAgICAgY29uZGl0aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1
Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMs
MjYgKzk2OSwyOCBAQCBzdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdl
dE9sZFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0
dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0
YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZN
KiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisg
ICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1l
IHBuYW1lKGlkZW50KTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsK
KyAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlz
T2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBu
YW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRs
eShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAg
aWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYg
d2UgZG9uJ3QgaGF2ZQogICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4u
CiAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpCiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFu
ZCB0aGUgc3RydWN0dXJlIGhhcwpAQCAtMTAyMCwxNCArOTk4LDEzIEBAIHN0YXRpYyBTdHJ1Y3R1
cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNr
aXAgdGhpcyEgSW1wbGVtZW50IGl0IQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzA5MTQKICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRl
eGluZ0hlYWRlcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChub3JtYWxp
emVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpID09IEludmFsaWRQcm90b3R5cGVDaGFp
bikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAvLyBlbWl0UHV0VHJhbnNpdGlvblN0dWIKKyAgICBpZiAocHV0S2lu
ZCA9PSBOb3REaXJlY3QpIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsK
KyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCA9IHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0
aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CkBAIC0xMDgzLDE3ICsxMDYwLDggQEAgc3RhdGlj
IFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKICAgICAg
ICAgb2xkU3RydWN0dXJlKSk7CiAgICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KAotICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQ
UjEpOwotICAgICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAg
ICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhl
YWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbnMoCisgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKIAogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKQEAgLTEyMjgsNyArMTE5Niw3IEBA
IHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCkBAIC0xMjU2LDggKzEyMjQsOCBAQCBz
dGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgICAgICBleGVj
LT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LAogICAgICAgICAgICAgc3RydWN0dXJlKTsKLQotICAgIHJldHVybiBvbGRTdHJ1Y3R1cmU7Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpA
QCAtMTI4MSwxMiArMTI0OSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQ
dXRCeUlECiAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVh
YmxlUHV0KCkpIHsKICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6
TmV3UHJvcGVydHkpIHsKIAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBl
bWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVy
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLSAgICAgICAgICAgIGlmICghb2xk
U3RydWN0dXJlKQorICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0OworICAgICAgICAg
ICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoCiAgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldCgKQEAgLTEyOTQsNyArMTI2MSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVw
YXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RC
dWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFp
biwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRU
cmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJl
LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0x
MzEyLDIwICsxMjc5LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQKICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewog
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7
Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNv
dW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1
cmUsIHNsb3QuYmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9
PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAg
ICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAg
ICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1
cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQg
PSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCiAgICAgICAg
IFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJl
c3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3Qp
LCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50
LAorICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90
KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJl
LCBmYWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAg
ICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKQEAgLTEzMzYsNyArMTMwNSw3IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgbGlzdC0+YWRkQWNjZXNz
KFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1
dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAg
ICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNldHRl
cigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKQEAgLTEzODAsMTcgKzEzNDksMTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0
byByZWN1cnNpb24uCiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1p
dFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotCi0gICAgICAgICAgICBp
ZiAoIW9sZFN0cnVjdHVyZSkgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsK
KyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAg
ICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKTsKICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1
YlJvdXRpbmU7CiAgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAg
UHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1
cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIG9sZFN0
cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsCiAgICAgICAgICAgICAgICAgICAgIHN0
dWJSb3V0aW5lKSk7CiAKICAgICAgICAgfSBlbHNlIHsKQEAgLTE0MjMsMjEgKzEzOTEsMjQgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgIGlmICgoc2xvdC5p
c0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKICAgICAgICAg
JiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
cHJvdG90eXBlQ2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90
LmNhY2hlZE9mZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAo
YmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6
ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2Uo
KSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFs
aWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAg
ICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRp
b25TZXQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVBy
b3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFz
ZSgpLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAg
ICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsK
LSAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29u
ZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0g
c2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJ
ZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1
c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBz
dHViSW5mbywgY29uZGl0aW9uU2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZh
bHNlLCBudWxscHRyLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKQEAgLTE0
NDgsNyArMTQxOSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQK
ICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAg
ICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3Qu
aXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nl
c3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4s
IGNvdW50LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAg
c3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5l
KSk7CiAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTE0ODcsMTEgKzE0NTgsMTUg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgq
dm0pOwogICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgSlNWYWx1
ZSBmb3VuZFNsb3RCYXNlID0gd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCk7
Ci0gICAgc2l6ZV90IGNvdW50ID0gIWZvdW5kU2xvdEJhc2UgfHwgZm91bmRTbG90QmFzZSAhPSBi
YXNlID8gCi0gICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhl
Yywgc3RydWN0dXJlLCBmb3VuZFNsb3RCYXNlLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgOiAwOwot
ICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmICh3YXNGb3VuZCkgeworICAgICAg
ICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNl
dCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAg
ICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwor
ICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5TWlzcyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Cisg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKICAgICAKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdDsKQEAgLTE1MTYsNyArMTQ5MSw2IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
ICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
OwogICAgIAogICAgIHsKQEAgLTE1NDcsMTggKzE1MjEsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50U2V0KCkpCiAg
ICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9p
bnQoY29kZUJsb2NrKSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3Ry
dWN0dXJlOwotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVh
ZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkg
ewotICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1
cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHBy
b3RvU3RydWN0dXJlID0gcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3Rv
U3RydWN0dXJlLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAg
ICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlmIChwcm90
b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMo
KSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVy
dHkoaWRlbnQsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAg
ICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9CisgICAgICAgIGNoZWNrT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5j
b2RlQmxvaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3Vu
ZCkpKSwgcmVzdWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCShyZXZpc2lvbiAxODY5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCwxOSBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2lu
ZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQogICAgIGJvb2wgaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpID09IFVuY2FjaGVkRGljdGlv
bmFyeUtpbmQ7IH0KICAgCi0gICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkg
eyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kICYmICF0
eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpOyB9CisgICAgYm9vbCBwcm9wZXJ0
eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5
S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQKKyAgICAgICAgICAgICYmICF0eXBlSW5m
bygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCisgICAgICAgICAgICAmJiAhKHR5cGVJbmZv
Lmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9w
ZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgICAgICAgICAmJiB0eXBlSW5mby5oYXNJbXB1cmVHZXRP
d25Qcm9wZXJ0eVNsb3QoKQorICAgICAgICAgICAgJiYgdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVy
dHlGaXJlc1dhdGNocG9pbnRzKCk7CisgICAgfQogCiAgICAgLy8gV2UgdXNlIFNsb3dQYXRoIGlu
IEdldEJ5SWRTdGF0dXMgZm9yIHN0cnVjdHVyZXMgdGhhdCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJv
cGVydGllcyBsYXRlciB0byBwcmV2ZW50CiAgICAgLy8gREZHIGZyb20gaW5saW5pbmcgcHJvcGVy
dHkgYWNjZXNzZXMgc2luY2Ugc3RydWN0dXJlcyBkb24ndCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcg
aW1wdXJlIHByb3BlcnR5IGFwcGVhcnMuCkBAIC0yMDIsNyArMjE0LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90
KCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8g
dHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5m
bygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KICAg
ICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4Njk4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
OCw2ICs1MzgsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJk
QWxsQ29kZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0
eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAgIAogICAgIC8vIEZJWE1FOiBV
c2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257376</attachid>
            <date>2015-07-23 14:10:41 -0700</date>
            <delta_ts>2015-07-23 15:43:05 -0700</delta_ts>
            <desc>a little more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>194155</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODcyNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01ODgsNiArNTkwLDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2
MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIy
MTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNG
RjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmNwcCAqLzsgfTsKKwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuY3BwICovOyB9OworCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9w
ZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJG
MDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTEzODcsOCArMTM5Nyw2
IEBACiAJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzExQjk4QjhE
MDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg1MDdE
NTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODVGNkJDMThDNTUzRkUwMEYxMDYyNiAvKiBTcGls
bFJlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGlsbFJlZ2lzdGVyc01vZGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzg4NTNG
OTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGNzE3OTcyNjI5MDAx
NDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07Ci0JCUE3ODg1M0ZBMTc5
NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWls
ZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAg
Ki87IH07CiAJCUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZE
MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAqLzsgfTsKIAkJQTc4QTk3
NzYxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RTE3OTczOEI4MDA5REY3NDQgLyog
REZHRmluYWxpemVyLmNwcCAqLzsgfTsKQEAgLTE4NTEsNiArMTg1OSw4IEBACiAJCTBGMTNFMDRD
MTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5kZXhpbmdUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNzI1RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01p
bmlmaWVkR3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
TWluaWZpZWRHcmFwaC5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjE4RDNDRTFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE5MENBQTE4OUQ4
MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcDsgcGF0aCA9
IHByb2ZpbGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJl
YXNvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlckpldHRpc29u
UmVhc29uLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRpc29uUmVhc29uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUREODQ5MThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ0lubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDIsNiArMjM1MiwxNCBAQAogCQkwRkQy
QzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9
IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgy
MjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDAxQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZE
M0U0MDMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDQxQjYxOEI2NjAwQzgw
RTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBF
MUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jh
c2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jh
c2ljQmxvY2tJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERG
R0RvbWluYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
RG9taW5hdG9ycy5jcHA7IHBhdGggPSBkZmcvREZHRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0
b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RvbWluYXRvcnMuaDsg
cGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zMTUxLDggKzMxNjksNiBAQAogCQlBNzdGMTgyMDE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNh
Y2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVDYWNoZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFy
c2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4ODUz
RjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyogREZHRmFp
bGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8q
IERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdG
aW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NDY5LDggKzQ0ODUsNiBAQAogCQkJCUE3QThBRjJCMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQg
LyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQz
MkFycmF5LmggKi8sCi0JCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwICovLAotCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8q
IEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUxOTlDMDUwMDgwNjZERCAv
KiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJQTEyQkJGRjMxQjA0NEE5ODAwNjY0QjY5IC8q
IEludGxPYmplY3QuY3BwICovLApAQCAtNDg1Myw2ICs0ODY3LDEwIEBACiAJCQkJQTcwNEQ4RkYx
N0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJ
CQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovLAog
CQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJ
CQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8q
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovLAorCQkJCTBG
MThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwICovLAorCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZH
QWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdB
bGxvY2F0b3IuaCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlz
aXMuaCAqLywKQEAgLTUzMTcsNiArNTMzNSwxMCBAQAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJD
Mjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3
QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAog
CQkJCTE0Q0E5NThDMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5o
ICovLAorCQkJCTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmggKi8sCisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5NjlBMDc5NDBFRDFE
M0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2
ODEgLyogT3Bjb2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJh
bmRzLmggKi8sCkBAIC01MzI4LDYgKzUzNTAsOCBAQAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3
RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJG
RTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJCTBGRDNFNDA3MUI2
MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDgx
QjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEY5MzMyOTkx
NENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5M0I0QTcxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKQEAgLTU4MjcsNiArNTg1MSw3IEBA
CiAJCQkJQzI5ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rp
c2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcy
IC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBFMUI2MThCNjYw
MEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNB
NDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC02MDg4LDcgKzYxMTMsNiBAQAogCQkJCUE3QThBRjNCMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURCNUYzMDA1
QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0ExN0FEQjVG
MzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4ODUzRkExNzk3
MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMu
aCBpbiBIZWFkZXJzICovLApAQCAtNjEwMSw2ICs2MTI1LDcgQEAKIAkJCQlCQzE4QzQxNTBFMTZG
NUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQ0VGREUwRjQxM0Y4
OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRGRjAw
MkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02Mzk2LDkgKzY0MjEsMTEgQEAKIAkJCQkyQUFEOTY0QTE4NTY5NDE3MDAxRjkzQkUg
LyogUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY2MEFD
MjE2NzQwRjgzMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEMTIwMzAxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRDNFNDBBMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBN0E4RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJl
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4
cENhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyog
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzQwQTQ4NTFBOTA1MUFGMDBENzNDQ0EgLyogTWF0aENvbW1vbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJENjBFMTcwNzA4MDAyQzdFODIgLyogUmVnRXhw
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0NzUsNiArNjUwMiw3IEBACiAJ
CQkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVj
dHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MEMxQjYxOEI2
NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTcyNjYsNiArNzI5NCw3
IEBACiAJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFBRjE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
SW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTI4MTcwOTYyM0Iw
MEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5REY3NDQg
LyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzMyNiw2ICs3MzU1LDcg
QEAKIAkJCQlBNUNFRUUxNDE4N0YzQkFEMDBFNTVDOTkgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFn
ZW50UmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRjYxOUQwQkFDMTAwQjFE
MUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRDNFNDAxMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQw
MzYwMzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTJBRjczODJDMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MzM2LDcgKzczNjYsNiBAQAog
CQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjExODgwOURENTAwNjhBNDZEIC8qIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4MjE4NDAzNzcx
MDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE3ODg1
M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0OCAvKiBJbnRlcm5hbEZ1bmN0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEN0Q0MEVEMjEyODIwMEI4OTYxOSAvKiBJbnRl
cnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDExM0Q0QjFBOERCMDkzMDAzODQ4QzQg
LyogSXRlcmF0b3JPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM1Myw2ICs3Mzgy
LDcgQEAKIAkJCQlCQ0RENTFFQjBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNzEyMzZFNTExOTVGMzNDMDBCRDIxNzQgLyogSklUT3Bjb2RlczMy
XzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0U0MDkxQjYx
OEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MxRThFNDExMkU3MkVGMDBBMzdGOTggLyog
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MDAsNiArNzYz
MCw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMyRDAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hh
aW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0
cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDBCMUI2MThCNjYw
MEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhG
IC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYwOSw2ICs3NjQw
LDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyog
VGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2RTAw
MDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5l
cmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tK
ZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pldHRpc29uaW5n
V2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBvaW50ICIsIFJh
d1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAogICAgIG1fY29k
ZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBv
aW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChpc09uTGlzdCgp
KQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3Bw
CShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29t
cGxleEdldFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDggQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3Io
Ci0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJl
KiBoZWFkU3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUgdGhhdAogICAgIC8v
IGhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpIGJ1dCBmb3Igd2hpY2ggd2UgZG9uJ3QKQEAg
LTQwLDMyICs0MCwyNiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1
CiAgICAgLy8gdGhhdCwgeWV0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzE4MTAKICAgICAKKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LmlzVmFsaWQo
KSk7CisgICAgCiAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCiAg
ICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFi
bGU7CiAgICAgCi0gICAgaWYgKGNoYWluICYmIGNoYWluQ291bnQpIHsKLSAgICAgICAgcmVzdWx0
Lm1fY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAg
ICAgIHByb2ZpbGVkQmxvY2ssIGhlYWRTdHJ1Y3R1cmUsIGNoYWluLCBjaGFpbkNvdW50KSk7Cisg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgCi0gICAgICAgIGlmICghcmVzdWx0Lm1f
Y2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICBpZiAoIXJlc3VsdC5tX2NvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgIHJldHVybiBza2lwKCk7
CiAgICAgICAgIAotICAgICAgICBpZiAoaGVhZFN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZH
Rm9ySW1wdXJlUHJvcGVydHkoKQotICAgICAgICAgICAgfHwgcmVzdWx0Lm1fY2hhaW4tPnRha2Vz
U2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdGFr
ZXNTbG93UGF0aCgpOwotICAgICAgICAKLSAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRPYmplY3Qg
PSByZXN1bHQubV9jaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICAgICAgU3RydWN0dXJl
KiBjdXJyZW50U3RydWN0dXJlID0gcmVzdWx0Lm1fY2hhaW4tPmxhc3QoKTsKLSAgICAgICAgCi0g
ICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9iamVjdCk7CisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2UgPSByZXN1bHQubV9jb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKTsKKyAgICAgICAgQVNTRVJUKGJhc2Uua2luZCgpID09IFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CiAgICAgICAgIAotICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCByZXN1bHQubV9hdHRy
aWJ1dGVzKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzKTsKLSAgICB9
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJhc2Uub2Zmc2V0KCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOwogICAgIAogICAgIGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQpKQogICAg
ICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCShyZXZpc2lvbiAxODcyNDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIENvbXBsZXhHZXRTdGF0dXNfaAogI2Rl
ZmluZSBDb21wbGV4R2V0U3RhdHVzX2gKIAotI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAgIENvbXBsZXhHZXRTdGF0dXMoKQog
ICAgICAgICA6IG1fa2luZChTaG91bGRTa2lwKQogICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRP
ZmZzZXQpCi0gICAgICAgICwgbV9hdHRyaWJ1dGVzKFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAg
ICAgCkBAIC05NywyMSArOTYsMTcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMg
Q29tcGxleEdldFN0YXR1cyBjb21wdXRlRm9yKAotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAot
ICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAg
ICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKKyAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
czsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lm
aWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJl
dHVybiBtX2NoYWluLmdldCgpOyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAg
CiBwcml2YXRlOgogICAgIEtpbmQgbV9raW5kOwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OwotICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1
ZTsKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIw
Niw4ICsyMDYsOCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRC
eUlkVmFyaWFudCB2YXJpYW50KAotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3Ry
dWN0dXJlKSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jaGFp
bigpLAotICAgICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0
dXMub2Zmc2V0KCksCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0
aW9uU2V0KCksIFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsOSArMzQsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAot
ICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNl
dCkKLSAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQorICAgICwgbV9jb25kaXRpb25TZXQo
Y29uZGl0aW9uU2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9jYWxsTGlua1N0
YXR1cyhXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKQogewpAQCAtNDQsMTMgKzQ1LDggQEAgR2V0
QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KAogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGlu
dmFsaWRPZmZzZXQpOwogICAgICAgICBBU1NFUlQoIWNoYWluKTsKICAgICB9Ci0gICAgCi0gICAg
aWYgKGNoYWluICYmIGNoYWluLT5zaXplKCkpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVCYXNlID0g
Y2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3Mo
bV9jb25zdGFudENoZWNrcyk7Ci0gICAgfQogfQotCisgICAgICAgICAgICAgICAgICAgICAKIEdl
dEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlhbnQoKSB7IH0KIAogR2V0QnlJZFZhcmlhbnQ6Okdl
dEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKQEAgLTYyLDggKzU4LDcg
QEAgR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldAogR2V0QnlJZFZhcmlh
bnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVy
KQogewogICAgIG1fc3RydWN0dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgbV9j
b25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5hdGVC
YXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIu
bV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAo
b3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6
bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAg
LTcyLDE0ICs2NywxNCBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9y
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZhcmlhbnQ6OmJh
c2VTdHJ1Y3R1cmUoKSBjb25zdAorSlNPYmplY3QqIEdldEJ5SWRWYXJpYW50OjphbHRlcm5hdGVC
YXNlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJu
IHN0cnVjdHVyZVNldCgpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0
dXJlRm9yKG1fY29uc3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoc3RydWN0dXJlKTsKLSAgICByZXR1cm4gc3RydWN0dXJlOworICAgIC8vIFRoaXMgY3Vy
cmVudGx5IGFzc3VtZXMgdGhhdCBHZXRCeUlkVmFyaWFudCB3aWxsIG9ubHkgYmUgdXNlZCBmb3Ig
c2VsZiBoaXRzIGFuZCBwcm90b3R5cGUKKyAgICAvLyBoaXRzLiBXaGVuIHdlIHN1cHBvcnQgbWlz
c2VzLCB0aGlzIHNob3VsZCBiZSBzbWFydCBlbm91Z2ggdG8gcmV0dXJuIG51bGxwdHIgaW5zdGVh
ZCBvZgorICAgIC8vIGNyYXNoaW5nIGluIHNsb3dCYXNlQ29uZGl0aW9uKCkuCisgICAgaWYgKG1f
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIG1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCk7CiB9CiAKIGJv
b2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBv
dGhlcikKQEAgLTkwLDEwICs4NSwxMyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9N
ZXJnZShjb25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1
cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFhcmVDb21wYXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVj
a3MpKQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlv
blNldCA9CisgICAgICAgIG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRp
b25TZXQpOworICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tz
LCBtX2NvbnN0YW50Q2hlY2tzKTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlv
blNldDsKICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAg
ICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTIsOCArMTEwLDcgQEAgdm9pZCBHZXRCeUlkVmFy
aWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0g
ICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAg
ICAgICAgIlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwg
Il0iKTsKKyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAi
LCAiLCBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBpZiAobV9hbHRl
cm5hdGVCYXNlKQogICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29u
dGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQo
Iiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00Myw3ICs0Myw3IEBAIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAgICBHZXRC
eUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBT
dHJ1Y3R1cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKLSAg
ICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBudWxscHRyLAorICAg
ICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNh
bGxMaW5rU3RhdHVzID0gbnVsbHB0cik7CiAgICAgCiAgICAgfkdldEJ5SWRWYXJpYW50KCk7CkBA
IC01NSw5ICs1NSwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhaXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9Ci0gICAgY29uc3QgQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdCB7IHJl
dHVybiBtX2FsdGVybmF0ZUJhc2U7IH0KLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgp
IGNvbnN0OworCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIGEgY29uZGl0aW9uIHNldCBtZWFucyB0
aGF0IHRoaXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7
IH0KKyAgICAKKyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0OwogICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExp
bmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1
cy5nZXQoKTsgfQogICAgIApAQCAtNzAsOCArNzIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBHZXRCeUlkU3RhdHVzOwogICAgIAogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNl
dDsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0g
ICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVm
ZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFs
aWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KGluQ29u
dGV4dChKU1ZhbHVlKG1fb2JqZWN0KSwgY29udGV4dCksICI6ICIsIGluQ29udGV4dChtX2NvbmRp
dGlvbiwgY29udGV4dCkpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxw
dHIpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1dHVyZSog
c3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1dGN1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkp
OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlk
aXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOwor
fQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxp
ZChzdHJ1Y3R1cmUsIG1fb2JqZWN0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChtX29iamVjdC0+c3RydWN0
dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1
cmVzVmFsaWRpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Y29uZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFpZGl0eSgpIGNvbnN0Cit7CisgICAgaWYg
KCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBzdHJ1Y3R1
cmVFbnN1cmVzVmFsaWRpdHkobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246Oldh
dGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9u
LmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBl
ZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpX
YXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVm
Zm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGUoc3RydWN0
dXJlLCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNo
YWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QK
K3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIGlzV2F0Y2hhYmxlKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZWZmb3J0KTsKK30KKworYm9v
bCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAoreworICAgIGlm
ICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIUhlYXA6Omlz
TWFya2VkKG1fb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVy
biBtX2NvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNr
ZWQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IHRyYWNrZWQuY2hlY2sobV9vYmplY3QpOworICAgIG1fY29uZGl0aW9uLnZhbGlkYXRlUmVmZXJl
bmNlcyh0cmFja2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlDb25kaXRpb24u
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
VHJhY2tlZFJlZmVyZW5jZXM7CisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHsKK3B1
YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV9vYmplY3Qo
bnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSB0b2tlbikKKyAgICAgICAgOiBtX29iamVj
dChudWxscHRyKQorICAgICAgICAsIG1fY29uZGl0aW9uKHRva2VuKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oSlNPYmplY3QqIG9iamVjdCwgY29uc3Qg
UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKKyAgICAgICAgOiBtX29iamVjdChvYmplY3Qp
CisgICAgICAgICwgbV9jb25kaXRpb24oY29uZGl0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlV2l0aG91dEJhcnJpZXIo
CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0g
b2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6
cHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7IAorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmpl
Y3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53
cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmll
cihvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcigKKyAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25k
aXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSh1aWQsIHByb3RvdHlwZSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2Jq
ZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJl
dHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0
ZXJXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0
OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5j
ZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
YWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0
KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVy
biBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgcHJvdG90eXBlKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxl
bmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAg
ICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNl
V2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZSgK
KyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53
cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFy
cmllcihvYmplY3QsIHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbmRpdGlvbjsgfTsKKyAgICAKKyAgICBKU09iamVjdCog
b2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBQcm9wZXJ0eUNvbmRpdGlv
biBjb25kaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvbjsgfQorICAgIAorICAgIFBy
b3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5r
aW5kKCk7IH0KKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gY29u
ZGl0aW9uKCkudWlkKCk7IH0KKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNv
bmRpdGlvbigpLmhhc09mZnNldCgpOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gY29uZGl0aW9uKCkub2Zmc2V0KCk7IH0KKyAgICB1bnNpZ25lZCBoYXNBdHRy
aWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzQXR0cmlidXRlcygpOyB9Cisg
ICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmF0dHJp
YnV0ZXMoKTsgfQorICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkuaGFzUHJvdG90eXBlKCk7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3Qg
eyByZXR1cm4gY29uZGl0aW9uKCkucHJvdG90eXBlKCk7IH0KKyAgICBib29sIGhhc1JlcXVpcmVk
VmFsdWUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNSZXF1aXJlZFZhbHVlKCk7IH0K
KyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5y
ZXF1aXJlZFZhbHVlKCk7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6UHRySGFzaDxKU09iamVjdCo+OjpoYXNoKG1fb2JqZWN0KSArIG1fY29uZGl0aW9u
Lmhhc2goKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29i
amVjdCA9PSBvdGhlci5tX29iamVjdAorICAgICAgICAgICAgJiYgbV9jb25kaXRpb24gPT0gb3Ro
ZXIubV9jb25kaXRpb247CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2NvbmRp
dGlvbi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBUd28g
Y29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhl
eSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcyBvcgorICAgIC8vIGRpZmZlcmVudCBvYmplY3RzLiBJ
ZiBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0byByZXNvbHZlIHRo
ZSBjb25mbGljdCAtCisgICAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlcmUgaXMgYSBQcmVzZW5jZSBh
bmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3YW50IHRoZQorICAg
IC8vIG1vcmUgZ2VuZXJhbCBvZiB0aGUgdHdvIHdoaWxlIGluIG90aGVyIGNhc2VzIHlvdSdsbCB3
YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRoaXMKKyAgICAvLyB3aWxsIGFsc28g
cmV0dXJuIGZhbHNlIGZvciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5jZSBhbmQgQWJzZW5j
ZSBvbiB0aGUgc2FtZQorICAgIC8vIG9iamVjdC91aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQg
Y29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXND
b21wYXRpYmxlV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoISp0aGlzIHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90aGVy
LnVpZCgpIHx8IG9iamVjdCgpICE9IG90aGVyLm9iamVjdCgpOworICAgIH0KKyAgICAKKyAgICAv
LyBUaGVzZSB2YWxpZGl0eS1jaGVja2luZyBtZXRob2RzIGNhbiBvcHRpb25hbGx5IHRha2UgYSBT
dHJ1dHVyZSogaW5zdGVhZCBvZiBsb2FkaW5nIHRoZQorICAgIC8vIFN0cnVjdHVyZSogZnJvbSB0
aGUgb2JqZWN0LiBJZiB5b3UncmUgaW4gdGhlIGNvbmN1cnJlbnQgSklULCB0aGVuIHlvdSBtdXN0
IHVzZSB0aGUgZm9ybXMKKyAgICAvLyB0aGF0IHRha2UgYW4gZXhwbGljaXQgU3RydWN0dXJlKiBi
ZWNhdXNlIHlvdSB3YW50IHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBmb3IgdGhlIHNhbWUKKyAg
ICAvLyBzdHJ1Y3R1cmUgdGhhdCB5b3UgdmFsaWRhdGVkIChpLmUuIGF2b2lkIGEgVE9DVE9VIHJh
Y2UpLgorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJlIGNsYWlt
cyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4gVmFsaWRpdHkKKyAgICAv
LyBkb2VzIG5vdCByZXF1aXJlIHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QuCisgICAgYm9vbCBz
dHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChT
dHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJl
IHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVy
ZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworCisgICAgLy8gQ2hlY2tzIGlmIHRo
ZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2Us
IGlmIHRoZSBvYmplY3QgYW5kCisgICAgLy8gc3RydWN0dXJlIGFsb25lIGRvbid0IGd1YXJhbnRl
ZSB0aGUgY29uZGl0aW9uLiBOb3RlIHRoYXQgdGhpcyBtYXkgcmV0dXJuIHRydWUgaWYgdGhlCisg
ICAgLy8gY29uZGl0aW9uIHN0aWxsIHJlcXVpcmVzIHNvbWUgd2F0Y2hwb2ludHMgb24gdGhlIG9i
amVjdCBpbiBhZGRpdGlvbiB0byBjaGVja2luZyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIElmIHlv
dSB3YW50IHRvIGNoZWNrIGlmIHRoZSBjb25kaXRpb24gaG9sZHMgYnkgdXNpbmcgdGhlIHN0cnVj
dHVyZSBhbG9uZSwKKyAgICAvLyB1c2Ugc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkuCisgICAg
Ym9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBpc1N0aWxsVmFs
aWQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBTaG9ydGhhbmQgZm9yIGNvbmRpdGlvbigpLmlzU3Rp
bGxWYWxpZChzdHJ1Y3R1cmUpLgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0
cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkgY29u
c3Q7CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdl
IGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3
YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0
eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRp
b246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2Vz
KSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisKKyAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBi
eSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVy
ZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLAorICAgICAgICBQ
cm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246
Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIGJvb2wgaXNXYXRjaGFibGUoCisgICAgICAgIFBy
b3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6
TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbmRpdGlvbigpLndhdGNoaW5nUmVxdXJpZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCgpOworICAgIH0KKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9p
bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbigpLndhdGNoaW5nUmVx
dWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUuCisg
ICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZl
cmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
SlNPYmplY3QqIG1fb2JqZWN0OworICAgIFByb3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9uOwor
fTsKKworc3RydWN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4g
a2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGIp
CisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKworI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
Ojpmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAo
Y29uZGl0aW9uLm9iamVjdCgpID09IG9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBjb25kaXRp
b247CisgICAgfQorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworfQorCitP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yQ29u
ZGl0aW9uS2luZCgKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKSBjb25zdAorewor
ICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlz
KSB7CisgICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IGtpbmQpCisgICAgICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWduZWQgbnVtRm91bmQgPSAwOworICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAg
IGlmIChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgewor
ICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOworICAgICAgICAgICAgbnVtRm91bmQrKzsK
KyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChudW1Gb3VuZCA9PSAxKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojph
cmVDb21wYXRpYmxlKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSB8fCAhb3RoZXIuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSA6
ICp0aGlzKSB7CisgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGIg
OiBvdGhlcikgeworICAgICAgICAgICAgaWYgKCFhLmlzQ29tcGF0aWJsZVdpdGgoYikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6bWVyZ2VkV2l0aCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKworICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbj4gcmVzdWx0OworICAgIAorICAgIGlmICghaXNFbXB0eSgpKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kVmVjdG9yKG1fZGF0YS0+dmVjdG9yKTsKKyAgICAKKyAgICBmb3IgKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBuZXdDb25kaXRpb24gOiBvdGhlcikgeworICAgICAg
ICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBleGlzdGluZ0NvbmRpdGlvbiA6
ICp0aGlzKSB7CisgICAgICAgICAgICBpZiAoIW5ld0NvbmRpdGlvbi5pc0NvbXBhdGlibGVXaXRo
KGV4aXN0aW5nQ29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW52YWxpZCgpOwor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdDb25kaXRpb24pOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIG5vbkVtcHR5KHJlc3VsdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpIGNvbnN0Cit7CisgICAg
aWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAg
ICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLnZhbGlkaXR5UmVx
dXJpZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmFyZVN0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25k
aXRpb24uaXNTdGlsbExpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoIlsiKTsKKyAg
ICBpZiAobV9kYXRhKQorICAgICAgICBvdXQucHJpbnQobGlzdER1bXBJbkNvbnRleHQobV9kYXRh
LT52ZWN0b3IsIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworbmFtZXNwYWNlIHsKKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisgICAgVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9w
ZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBv
YmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAg
Y2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7
CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2Uodm0sIG93
bmVyLCBvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlk
LCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICByZXR1cm4g
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcigKKyAgICAgICAgICAgIHZt
LCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlw
ZSgpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAg
fQorfQorCitlbnVtIENvbmN1cnJlbmN5IHsKKyAgICBNYWluVGhyZWFkLAorICAgIENvbmN1cnJl
bnQKK307CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnMoCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kLAorICAgIENvbmN1cnJl
bmN5IGNvbmN1cnJlbmN5ID0gTWFpblRocmVhZCkKK3sKKyAgICBBU1NFUlQoISFwcm90b3R5cGUg
PT0gKGNvbmRpdGlvbiA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpKTsKKyAgICAKKyAg
ICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IGNvbmRpdGlvbnM7CisgICAgCisgICAg
Zm9yICg7OykgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCisgICAgICAgICAg
ICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAg
CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChn
bG9iYWxPYmplY3QpOworICAgICAgICAKKyAgICAgICAgaWYgKHYuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIGlmICghcHJvdG90eXBlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
Pih2KTsKKyAgICAgICAgc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAg
ICAKKyAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIHJlcGVhdGVk
bHksIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0IHNob3VsZCBub3QgYmUKKyAgICAgICAgLy8gdHJl
YXRlZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKSB7CisgICAgICAgICAgICBpZiAoY29uY3VycmVuY3kgPT0gTWFpblRocmVhZCkKKyAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBvYmpl
Y3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQgdGhpc0NvbmRpdGlvbktpbmQ7CisgICAgICAg
IGlmIChraW5kID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSAmJiBvYmplY3QgIT0gcHJv
dG90eXBlKQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBQcm9wZXJ0eUNvbmRpdGlv
bjo6QWJzZW5jZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQg
PSBraW5kOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbmV3Q29u
ZGl0aW9uID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0
LCB1aWQsIHRoaXNDb25kaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFuZXdDb25kaXRpb24gfHwg
IW5ld0NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZh
bGlkKCk7CisgICAgICAgIAorICAgICAgICBjb25kaXRpb25zLmFwcGVuZChuZXdDb25kaXRpb24p
OworICAgICAgICAKKyAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdC4KKyAgICBz
d2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogewor
ICAgICAgICB1bnNpZ25lZCBwcmVzZW5jZUNvdW50ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0aW9ucykgeworICAgICAg
ICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgICAgICBwcmVzZW5jZUNvdW50Kys7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0
aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByZXNlbmNlQ291bnQg
PT0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlvbnMp
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IGtpbmQpOwor
ICAgIH0gfQorICAgIAorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9u
RW1wdHkoY29uZGl0aW9ucyk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3Mo
CisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2Vu
ZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAg
ICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJl
LCBudWxscHRyLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0
ZXIpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUs
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9u
OjpQcmVzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAor
ICAgICAgICB2bSwgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0LCBoZWFkU3RydWN0dXJlLCBudWxscHRy
LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlY2VPZlNldHRlciwKKyAgICAgICAgQ29uY3Vy
cmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2xk
dWUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0
aW9uYWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFj
Y2VzcyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRl
cmVzdGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRp
dGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBp
cyBuZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
KCkgeyB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFs
aWQoKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBub25FbXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2
ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRh
ID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgICpyZXN1bHQubV9kYXRhLT52ZWN0b3Ig
PSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRh
LT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2RhdGE7CisgICAgfQorICAgIAorICAgIHR5cGVk
ZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdp
bigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29u
c3Q7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90
eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNv
bmRpdGlvbiBvbiB0aGUgcHJvdG90eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0
aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5
cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFBy
ZXNlbmNlCisgICAgLy8gaW4gdGhlIHNldCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2Vu
Y2UuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9uIHNldHMgYXJlIGNvbXBhdGlibGUgaWYgdGhl
eSBhcmUgYm90aCB2YWxpZCBhbmQgZWFjaCBjb25kaXRpb24gaW4gKnRoaXMgaXMKKyAgICAvLyBj
b21wYXRpYmxlIHdpdGggZWFjaCBjb25kaXRpb24gaW4gb3RoZXIuCisgICAgYm9vbCBhcmVDb21w
YXRpYmxlV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0
OworICAgIAorICAgIC8vIEF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3IGNvbmRpdGlvbiBzZXQgYnkg
bWVyZ2luZyB0aGlzIG9uZSB3aXRoIHRoZSBvdGhlciBvbmUuIFRoaXMgd2lsbAorICAgIC8vIGZh
aWwgaWYgIXRoaXMuYXJlQ29tcGF0aWJsZVdpdGgob3RoZXIpLiBXaGVuIGl0IGZhaWxzLCBpdCBy
ZXR1cm5zIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRX
aXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29uc3Q7CisgICAg
CisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdDsKKyAgICBib29sIHN0
cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkg
Y29uc3Q7CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29u
c3Q7CisgICAgYm9vbCBhcmVTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIEhlbHBlcnMgZm9yIHVzaW5nIHRo
aXMgaW4gYSB1bmlvbi4KKyAgICB2b2lkKiByZWxlYXNlUmF3UG9pbnRlcigpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkpOworICAgIH0K
KyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgYWRvcHRSYXdQb2ludGVyKHZv
aWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxE
YXRhKj4ocmF3UG9pbnRlcikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBz
dGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZnJvbVJhd1BvaW50ZXIodm9pZCogcmF3
UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVy
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8v
IEludGVybmFsbHksIHRoaXMgcmVwcmVzZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9pbnRlciB0byBh
IERhdGEgdGhhdCBoYXMgYW4gZW1wdHkgdmVjdG9yLgorICAgIAorICAgIC8vIEZJWE1FOiBUaGlz
IGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IGhhdmluZyBpdCBpbnRlcm5hbGx5IHVzZSBh
IHZlY3RvciB0aGF0IGp1c3QgaGFzCisgICAgLy8gdGhlIG5vbi11aWQgcG9ydGlvbiBvZiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiwgYW5kIHRoZW4gcmVxdWlyaW5nIHRoYXQgdGhlIGNhbGxlcnMg
b2YgYWxsCisgICAgLy8gb2YgdGhlIEFQSXMgc3VwcGx5IHRoZSB1aWQuCisgICAgCisgICAgY2xh
c3MgRGF0YSA6IFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGE+IHsKKyAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGF0YSk7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
ICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIERhdGEoKSB7IH0KKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gdmVjdG9yOworICAgIH07CisgICAgCisg
ICAgUmVmUHRyPERhdGE+IG1fZGF0YTsKK307CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
OworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
CShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgdW5zaWduZWQgY2hhaW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKICAgICA6
IG1fdHlwZSh0eXBlKQogICAgICwgbV9jaGFpbkNvdW50KGNoYWluQ291bnQpCiAgICAgLCBtX3N0
cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRp
dGlvblNldCkKICAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0gICAgaWYgKGNo
YWluKQotICAgICAgICBtX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKIH0KIAogR2V0QnlJ
ZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQpAQCAtNzEsNyArNzAsNyBAQCBib29sIEdldEJ5SWRB
Y2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFI
ZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5pc1N0aWxsTGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsocmVwYXRjaEJ1ZmZlcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMTg3MjQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTMsMTMgKzUzLDEyIEBAIHB1YmxpYzoKICAgICAKICAgICBHZXRC
eUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWlu
Q291bnQoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoCiAgICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9IDAsIHVuc2lnbmVkIGNo
YWluQ291bnQgPSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgfkdldEJ5SWRBY2Nl
c3MoKTsKICAgICAKQEAgLTcyLDggKzcxLDcgQEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAK
LSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgp
OyB9Ci0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW5Db3Vu
dDsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQo
KSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0
aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtOTEsOSArODksOCBAQCBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5
cGU7Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFp
bjsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvblNldDsgLy8gRklYTUUg
d2hhdCBhYm91dCBiYXJyaWVycz8KICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJv
dXRpbmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODcyNDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgUHV0QnlJZEFjY2Vz
cyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgICAgICByZXN1bHQubV90eXBlID0gVHJh
bnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQu
bV9uZXdTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1
Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLmNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigKKyAgICAgICAgICAgIHN0
dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKICAgICAgICAgcmVz
dWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIApAQCAtNjQsNiArNjUsOSBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6
OmZyb21TdHJ1Y3R1CiAKIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVT
dGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1f
b2xkU3RydWN0dXJlLmdldCgpKSkKQEAgLTc0LDE1ICs3OCwxMSBAQCBib29sIFB1dEJ5SWRBY2Nl
c3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFNldHRlcjoKICAgICBjYXNlIEN1c3RvbVNldHRlcjoKICAgICAgICAgaWYgKCFIZWFwOjppc01h
cmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMs
NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgUHV0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBl
KEludmFsaWQpCi0gICAgICAgICwgbV9jaGFpbkNvdW50KFVJTlRfTUFYKQogICAgIHsKICAgICB9
CiAgICAgCkBAIC02MiwxNCArNjEsMTQgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVy
LAogICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAgICAgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewogICAgICAgICBQdXRC
eUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAg
ICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUp
OwogICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0
dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworICAg
ICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3Vs
dC5tX2N1c3RvbVNldHRlciA9IDA7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1
YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05NSw4ICs5NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
LAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLAotICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LAorICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCiAgICAgICAgIFBhc3NSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKQEAgLTEwNCwxMCArMTAyLDcgQEAgcHVi
bGljOgogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fb2xk
U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX3R5
cGUgPSBhY2Nlc3NUeXBlOwotICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgICAgIHJlc3Vs
dC5tX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKLSAgICAgICAgICAgIHJlc3VsdC5tX2No
YWluQ291bnQgPSBjaGFpbkNvdW50OwotICAgICAgICB9CisgICAgICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0g
Y3VzdG9tU2V0dGVyOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5l
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ2LDE3ICsxNDEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5z
aXRpb24oKSB8fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9j
aGFpbi5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAg
ICAgcmV0dXJuIG1fY2hhaW5Db3VudDsKLSAgICB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0
OyB9CiAgICAgCiAgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7
CkBAIC0xNzgsOCArMTYzLDcgQEAgcHJpdmF0ZToKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OworICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jIG1fY3VzdG9tU2V0dGVyOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
bV9zdHViUm91dGluZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNvbmRp
dGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZl
cmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQobV9raW5kLCAiIG9m
ICIsIG1fdWlkKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6Cisg
ICAgICAgIG91dC5wcmludCgiIGF0ICIsIG1fb2Zmc2V0LCAiIHdpdGggYXR0cmlidXRlcyAiLCBt
X2F0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNh
c2UgQWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRoIHByb3RvdHlwZSAi
LCBpbkNvbnRleHQoSlNPYmplY3QocHJvdG90eXBlKCkpLCBjb250ZXh0KSk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRoICIs
IGluQ29udGV4dChKU1ZhbHVlOjplbmNvZGUocmVxdWlyZWRWYWx1ZSgpKSwgY29udGV4dCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK2Jvb2wgUHJvcGVy
dHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QKK3sKKyAg
ICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZTogewor
ICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJy
ZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IG9mZnNldCgpIHx8
IGN1cnJlbnRBdHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFi
c2VuY2U6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKCkpICE9IGludmFsaWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUo
KSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBjYXNlIEFic2VuY2VPZlNldHRl
cjogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1
dGVzOworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpICE9IGlu
dmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50QXR0cmlidXRlcyAmIChBY2Nl
c3NvciB8IEN1c3RvbUFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpICE9IHByb3RvdHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEVxdWl2YWxl
bmNlOiB7CisgICAgICAgIGlmICghYmFzZSB8fCBiYXNlLT5zdHJ1Y3R1cmUoKSAhPSBzdHJ1Y3R1
cmUpIHsKKyAgICAgICAgICAgIC8vIENvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgc2luY2Ug
d2UgY2Fubm90IHZlcmlmeSB0aGlzIG9uZSB3aXRob3V0IGhhdmluZyB0aGUKKyAgICAgICAgICAg
IC8vIG9iamVjdC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc29tZXdoYXQgcmFjeSwgYW5kIG1heWJlIG1v
cmUgcmlza3kgdGhhbiB3ZSB3YW50LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjQxCisgICAgICAgIAorICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpOworICAg
ICAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IGJhc2UtPmdldERpcmVjdChjdXJyZW50T2Zmc2V0
KTsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSByZXF1aXJlZFZhbHVlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBp
ZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEVx
dWl2YWxlbmNlOgorICAgICAgICByZXR1cm4gc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzU3RpbGxWYWxpZEFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgYmFzZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBhbiBpbXB1
cmUgcHJvcGVydHkgY2FuIGNhdXNlIGEgcHJvcGVydHkgdG8gYXBwZWFyLCBhbmQgY2FuIGFsc28K
KyAgICAvLyAic2hhZG93IiBhbiBleGlzdGluZyBKUyBwcm9wZXJ0eSBvbiB0aGUgc2FtZSBvYmpl
Y3QuIEhlbmNlIGl0IGFmZmVjdHMgYm90aCBwcmVzZW5jZSBhbmQKKyAgICAvLyBhYnNlbmNlLiBJ
dCBkb2Vzbid0IGFmZmVjdCBBYnNlbmNlT2ZTZXR0ZXIgYmVjYXVzZSBpbXB1cmUgcHJvcGVydGll
cyBhcmVuJ3QgZXZlciBzZXR0ZXJzLgorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQ
cmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3Qo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdoZW5WYWxpZCgKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBp
ZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICBjYXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHNvbWUgdmFyaWFudCBvZiBpc1Zh
bGlkIHJldHVybmVkIHRydWUsIHdoaWNoCisgICAgICAgIC8vIGltcGxpZXMgdGhhdCB3ZSBhbHJl
YWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBzdHJ1Y3R1cmUga25vd3Mgb2YgdGhlIHByb3BlcnR5LiBX
ZSBzaG91bGQKKyAgICAgICAgLy8gYWxzbyBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlIFN0cnVjdHVy
ZSBpcyBhIGNhY2hlYWJsZSBkaWN0aW9uYXJ5LCB3aGljaCBtZWFucyB3ZQorICAgICAgICAvLyBz
aG9sZG4ndCBoYXZlIGEgVE9DVE9VIHJhY2UgZWl0aGVyLgorICAgICAgICBSRUxFQVNFX0FTU0VS
VChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBXYXRjaHBvaW50
U2V0KiBzZXQ7CisgICAgICAgIHN3aXRjaCAoZWZmb3J0KSB7CisgICAgICAgIGNhc2UgTWFrZU5v
Q2hhbmdlczoKKyAgICAgICAgICAgIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVu
dFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVuc3VyZVdhdGNoYWJpbGl0eToKKyAgICAgICAgICAgIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVy
dHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoCisgICAgICAgICAgICAgICAgKkhlYXA6OmhlYXAo
c3RydWN0dXJlKS0+dm0oKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoIXNldC0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwg
YmFzZSkKKyAgICAgICAgJiYgaXNXYXRjaGFibGVXaGVuVmFsaWQoc3RydWN0dXJlLCBlZmZvcnQp
OworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUsIGJhc2UpCisgICAg
ICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9v
bCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAoreworICAgIGlmIChoYXNQ
cm90b3R5cGUoKSAmJiAhSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKQorICAgICAgICAmJiBy
ZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpLmlzQ2VsbCgpCisgICAg
ICAgICYmICFIZWFwOjppc01hcmtlZChyZXF1aXJlZFZhbHVlKCkuYXNDZWxsKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvcGVy
dHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYg
dHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkpCisgICAgICAgIHRyYWNr
ZWQuY2hlY2socHJvdG90eXBlKCkpOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkp
CisgICAgICAgIHRyYWNrZWQuY2hlY2socmVxdWlyZWRWYWx1ZSgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBjb25kaXRpb24pCit7Cisg
ICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246
OlByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIlByZXNlbmNlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAgICAgIG91
dC5wcmludCgiQWJzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiQWJzZW5j
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpF
cXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJFcXVpdmFsZW5jZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1By
b3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFByb3BlcnR5Q29uZGl0aW9uX2gKKyNkZWZpbmUgUHJvcGVydHlDb25kaXRp
b25faAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisKK2NsYXNzIFBy
b3BlcnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBQcmVz
ZW5jZSwKKyAgICAgICAgQWJzZW5jZSwKKyAgICAgICAgQWJzZW5jZU9mU2V0dGVyLAorICAgICAg
ICBFcXVpdmFsZW5jZSAvLyBBbiBhZGFwdGl2ZSB3YXRjaHBvaW50IG9uIHRoaXMgd2lsbCBiZSBh
IHBhaXIgb2Ygd2F0Y2hwb2ludHMsIGFuZCB3aGVuIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMs
IHdlIHdpbGwgc2V0IHRoZSByZXBsYWNlbWVudCB3YXRjaHBvaW50IG9uIHRoZSBuZXcgc3RydWN0
dXJlLgorICAgIH07CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6IG1f
dWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKFByZXNlbmNlKQorICAgIHsKKyAgICAgICAg
bWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRp
dGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV91aWQobnVs
bHB0cikKKyAgICAgICAgLCBtX2tpbmQoQWJzZW5jZSkKKyAgICB7CisgICAgICAgIG1lbXNldCgm
dSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0
aW9uIHByZXNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0
OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQ
cmVzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2Uub2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICByZXN1bHQudS5wcmVzZW5jZS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9u
IHByZXNlbmNlKAorICAgICAgICBWTSYsIEpTQ2VsbCosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBwcmVzZW5jZVdp
dGhvdXRCYXJyaWVyKHVpZCwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3Bl
cnR5Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24g
cmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBBYnNlbmNlOworICAgICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3Rv
dHlwZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFBy
b3BlcnR5Q29uZGl0aW9uIGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VX
aXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcigKKyAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlk
OworICAgICAgICByZXN1bHQubV9raW5kID0gQWJzZW5jZU9mU2V0dGVyOworICAgICAgICByZXN1
bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNl
dHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJp
ZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25k
aXRpb24gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9u
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9r
aW5kID0gRXF1aXZhbGVuY2U7CisgICAgICAgIHJlc3VsdC5lcXVpdmFsZW5jZS52YWx1ZSA9IEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgfQorICAgICAgICAKKyAgICBzdGF0aWMgUHJvcGVy
dHlDb25kaXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVy
KTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7
CisgICAgfQorICAgICAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFt
X3VpZCAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgCisgICAgS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdWlkOyB9CisgICAgCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZSB9OworICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzT2Zmc2V0KCkpOworICAg
ICAgICByZXR1cm4gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgfQorICAgIGJvb2wgaGFzQXR0cmli
dXRlcygpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IFByZXNlbmNlIH07Cisg
ICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFz
QXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiAhISp0aGlz
ICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQgPT0gQWJzZW5jZU9mU2V0dGVyKTsgfQor
ICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAg
fQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRo
aXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNSZXF1aXJlZFZhbHVlKCkpOworICAg
ICAgICByZXR1cm4gdS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IFdURjo6UHRySGFzaDxVbmlxdWVk
U3RyaW5nSW1wbCo+OjpoYXNoKG1fdWlkKSArIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2tpbmQp
OworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAg
ICAgICAgICAgcmVzdWx0ICs9IHUucHJlc2VuY2Uub2Zmc2V0OworICAgICAgICAgICAgcmVzdWx0
ICs9IHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFic2VuY2U6CisgICAgICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOgorICAgICAgICAgICAg
cmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU09iamVjdCo+OjpoYXNoKHUuYWJzZW5jZS5wcm90b3R5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAg
ICAgICAgICByZXN1bHQgKz0gRW5jb2RlZEpTVmFsdWVIYXNoOjpoYXNoKHUuZXF1aXZhbGVuY2Uu
dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb3BlcnR5Q29u
ZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3VpZCAhPSBvdGhlci5t
X3VpZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fa2luZCAhPSBv
dGhlci5tX2tpbmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXR1cm4gdS5w
cmVzZW5jZS5vZmZzZXQgPT0gb3RoZXIudS5wcmVzZW5jZS5vZmZzZXQKKyAgICAgICAgICAgICAg
ICAmJiB1LnByZXNlbmNlLmF0dHJpYnV0ZXMgPT0gb3RoZXIudS5wcmVzZW5jZS5hdHRyaWJ1dGVz
OworICAgICAgICBjYXNlIEFic2VuY2U6CisgICAgICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOgor
ICAgICAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5wcm90b3R5cGUgPT0gb3RoZXIudS5hYnNlbmNl
LnByb3RvdHlwZTsKKyAgICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJldHVy
biBhLmVxdWl2YWxlbmNlLnZhbHVlID09IG90aGVyLnUuZXF1aXZhbGVuY2UudmFsdWU7CisgICAg
ICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IEFic2Vu
Y2U7CisgICAgfQorICAgIAorICAgIC8vIFR3byBjb25kaXRpb25zIGFyZSBjb21wYXRpYmxlIGlm
IHRoZXkgYXJlIGlkZW50aWNhbCBvciBpZiB0aGV5IHNwZWFrIG9mIGRpZmZlcmVudCB1aWRzLiBJ
ZgorICAgIC8vIGZhbHNlIGlzIHJldHVybmVkLCB5b3UgaGF2ZSB0byBkZWNpZGUgaG93IHRvIHJl
c29sdmUgdGhlIGNvbmZsaWN0IC0gZm9yIGV4YW1wbGUgaWYgdGhlcmUgaXMKKyAgICAvLyBhIFBy
ZXNlbmNlIGFuZCBhbiBFcXVpdmFsZW5jZSB0aGVuIGluIHNvbWUgY2FzZXMgeW91J2xsIHdhbnQg
dGhlIG1vcmUgZ2VuZXJhbCBvZiB0aGUgdHdvCisgICAgLy8gd2hpbGUgaW4gb3RoZXIgY2FzZXMg
eW91J2xsIHdhbnQgdGhlIG1vcmUgc3BlY2lmaWMgb2YgdGhlIHR3by4gVGhpcyB3aWxsIGFsc28g
cmV0dXJuIGZhbHNlCisgICAgLy8gZm9yIGNvbnRyYWRpY3Rpb25zLCBsaWtlIFByZXNlbmNlIGFu
ZCBBYnNlbmNlIG9uIHRoZSBzYW1lIHVpZC4gQnkgY29udmVudGlvbiwgaW52YWxpZAorICAgIC8v
IGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4KKyAgICBib29sIGlz
Q29tcGF0aWJsZVdpdGgoY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1aWQoKSAhPSBvdGhlci51aWQo
KTsKKyAgICB9CisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUg
Y2xhaW1zIHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLgorICAgIGJvb2wg
aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiwg
SlNPYmplY3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludCB0byBlbnN1cmUgdmFs
aWRpdHkgZXZlbiBpZgorICAgIC8vIGlzU3RpbGxWYWxpZEFjY29yZGluZ1RvU3RydWN0dXJlKCkg
cmV0dXJuZWQgdHJ1ZS4KKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBj
b25kaXRpb24gaXMgc3RpbGwgdmFsaWQgcmlnaHQgbm93IGZvciB0aGUgZ2l2ZW4gb2JqZWN0IGFu
ZCBzdHJ1Y3R1cmUuCisgICAgLy8gTWF5IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgaWYg
dGhlIG9iamVjdCBhbmQgc3RydWN0dXJlIGFsb25lIGRvbid0IGd1YXJhbnRlZSB0aGUKKyAgICAv
LyBjb25kaXRpb24uIFRoaXMgaGFwcGVucyBmb3IgYW4gQWJzZW5jZSBjb25kaXRpb24gb24gYW4g
b2JqZWN0IHRoYXQgbWF5IGhhdmUgaW1wdXJlCisgICAgLy8gcHJvcGVydGllcy4gSWYgdGhlIG9i
amVjdCBpcyBub3Qgc3VwcGxpZWQsIHRoZW4gYSAidHJ1ZSIgcmV0dXJuIGluZGljYXRlcyB0aGF0
IGNoZWNraW5nIGlmCisgICAgLy8gYW4gb2JqZWN0IGhhcyB0aGUgZ2l2ZW4gc3RydWN0dXJlIGd1
YXJhbnRlZXMgdGhlIGNvbmRpdGlvbiBzdGlsbCBob2xkcy4gSWYgYW4gb2JqZWN0IGlzCisgICAg
Ly8gc3VwcGxpZWQsIHRoZW4geW91IG1heSBuZWVkIHRvIHVzZSBzb21lIG90aGVyIHdhdGNocG9p
bnRzIG9uIHRoZSBvYmplY3QgdG8gZ3VhcmFudGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbiBpbiBh
ZGRpdGlvbiB0byB0aGUgc3RydWN0dXJlIGNoZWNrLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0
cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAgLy8g
SW4gc29tZSBjYXNlcywgdGhlIGNvbmRpdGlvbiBpcyBub3Qgd2F0Y2hhYmxlLCBidXQgY291bGQg
YmUgbWFkZSB3YXRjaGFibGUgYnkgZW5hYmxpbmcgdGhlCisgICAgLy8gYXBwcm9wcmlhdGUgd2F0
Y2hwb2ludC4gRm9yIGV4YW1wbGUsIHJlcGxhY2VtZW50IHdhdGNocG9pbnRzIGFyZSBlbmFibGVk
IG9ubHkgd2hlbiBzb21lCisgICAgLy8gYWNjZXNzIGlzIGNhY2hlZCBvbiB0aGUgcHJvcGVydHkg
aW4gc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgbWFpbmx5IHRvIHNhdmUgc3BhY2UgZm9yCisgICAg
Ly8gZGljdGlvbmFyeSBwcm9wZXJ0aWVzIG9yIHByb3BlcnRpZXMgdGhhdCBuZXZlciBnZXQgdmVy
eSBob3QuIEJ1dCwgaXQncyBhbHdheXMgc2FmZSB0bworICAgIC8vIGVuYWJsZSB3YXRjaGluZywg
cHJvdmlkZWQgdGhhdCB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBl
bnVtIFdhdGNoYWJpbGl0eUVmZm9ydCB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZmF1bHQu
IEl0IG1lYW5zIHRoYXQgd2UgZG9uJ3QgY2hhbmdlIHRoZSBzdGF0ZSBvZiBhbnkgU3RydWN0dXJl
IG9yCisgICAgICAgIC8vIG9iamVjdCwgYW5kIGltcGxpZXMgdGhhdCBpZiB0aGUgcHJvcGVydHkg
aGFwcGVucyBub3QgdG8gYmUgd2F0Y2hhYmxlIHRoZW4gd2UgZG9uJ3QgbWFrZQorICAgICAgICAv
LyBpdCB3YXRjaGFibGUuIFRoaXMgaXMgbWFuZGF0b3J5IGlmIGNhbGxpbmcgZnJvbSBhIEpJVCB0
aHJlYWQuIFRoaXMgaXMgYWxzbyBzb21ld2hhdAorICAgICAgICAvLyBwcmVmZXJhYmxlIHdoZW4g
Zmlyc3QgZGVjaWRpbmcgd2hldGhlciB0byB3YXRjaCBhIGNvbmRpdGlvbiBmb3IgdGhlIGZpcnN0
IHRpbWUgKGkuZS4KKyAgICAgICAgLy8gbm90IGZyb20gYSB3YXRjaHBvaW50IGZpcmUgdGhhdCBj
YXVzZXMgdXMgdG8gc2VlIGlmIHdlIHNob3VsZCBhZGFwdCksIHNpbmNlIGEKKyAgICAgICAgLy8g
d2F0Y2hwb2ludCBub3QgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHdhdGNoaW5nIGltcGxpZXMgdGhh
dCBtYXliZSB3ZSBkb24ndCBrbm93IGVub3VnaAorICAgICAgICAvLyB5ZXQgdG8gbWFrZSBpdCBw
cm9maXRhYmxlIHRvIHdhdGNoIC0tIGFzIGluLCB0aGUgdGhpbmcgYmVpbmcgd2F0Y2hlZCBtYXkg
bm90IGhhdmUKKyAgICAgICAgLy8gc3RhYmlsaXplZCB5ZXQuIFdlIHByZWZlciB0byBvbmx5IGFz
c3VtZSB0aGF0IGEgY29uZGl0aW9uIHdpbGwgaG9sZCBpZiBpdCBoYXMgYmVlbgorICAgICAgICAv
LyBrbm93biB0byBob2xkIGZvciBhIHdoaWxlIGFscmVhZHkuCisgICAgICAgIE1ha2VOb0NoYW5n
ZXMsCisgICAgICAgIAorICAgICAgICAvLyBEbyB3aGF0IGl0IHRha2VzIHRvIGVuc3VyZSB0aGF0
IHRoZSBwcm9wZXJ0eSBjYW4gYmUgd2F0Y2hlZCwgaWYgZG9pbmcgc28gaGFzIG5vCisgICAgICAg
IC8vIHVzZXItb2JzZXJ2YWJsZSBlZmZlY3QuIEZvciBub3cgdGhpcyBqdXN0IG1lYW5zIHRoYXQg
d2Ugd2lsbCBlbnN1cmUgdGhhdCBhIHByb3BlcnR5CisgICAgICAgIC8vIHJlcGxhY2VtZW50IHdh
dGNocG9pbnQgaXMgZW5hYmxlZCBpZiBpdCBoYWRuJ3QgYmVlbiBlbmFibGVkIGFscmVhZHkuIERv
IG5vdCB1c2UgdGhpcworICAgICAgICAvLyBmcm9tIEpJVCB0aHJlYWRzLCBzaW5jZSB0aGUgYWN0
IG9mIGVuYWJsaW5nIHdhdGNocG9pbnRzIGlzIG5vdCB0aHJlYWQtc2FmZS4KKyAgICAgICAgRW5z
dXJlV2F0Y2hhYmlsaXR5CisgICAgfTsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQn
cyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEg
dHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZSBhbmQgcG9zc2li
bHkgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQuCisgICAgYm9vbCBpc1dhdGNoYWJsZUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09i
amVjdCogYmFzZSA9IG51bGxwdHIsIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMp
IGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFu
ZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAg
Ly8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLgorICAgIGJvb2wgaXNXYXRjaGFibGUoCisg
ICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwgV2F0Y2hhYmlsaXR5
RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgYm9vbCB3YXRjaGluZ1Jl
cXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgLy8gQ3VycmVudGx5LCB0aGlzIGlzIHJlcXVpcmVkIGZvciBhbGwgb2Ygb3VyIGNvbmRpdGlv
bnMuCisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKyAgICBib29sIHdhdGNoaW5nUmVx
dWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdHMgaW52b2x2ZWQgaW4gdGhpcyBhcmUgc3RpbGwgbGl2
ZS4KKyAgICBib29sIGlzU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB2YWxpZGF0
ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBib29sIGlzV2F0Y2hhYmxlV2hlblZhbGlkKFN0cnVjdHVyZSosIFdhdGNoYWJpbGl0eUVm
Zm9ydCkgY29uc3Q7CisKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7CisgICAgS2luZCBt
X2tpbmQ7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0OworICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAg
ICAgfSBwcmVzZW5jZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBw
cm90b3R5cGU7CisgICAgICAgIH0gYWJzZW5jZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgIEVuY29kZWRKU1ZhbHVlIHZhbHVlOworICAgICAgICB9IGVxdWl2YWxlbmNlOworICAgIH0g
dTsKK307CisKK3N0cnVjdCBQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAgICAgY29uc3QgUHJvcGVydHlDb25k
aXRpb24mIGEsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjpLaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1
bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gUHJvcGVydHlDb25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODcy
NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsMTkgKzkwLDE4IEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5v
cGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxf
b3V0X29mX2xpbmUpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IGluc3Ry
dWN0aW9uWzZdLnUuc3RydWN0dXJlLmdldCgpOwotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9
IGluc3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCk7Ci0gICAgQVNTRVJUKG5ld1N0
cnVjdHVyZSk7Ci0gICAgQVNTRVJUKGNoYWluKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9y
bWF0aW9uKTsKLSAgICAKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gaW50ZW5k
ZWRDaGFpbjsKLSAgICBpZiAoY2hhaW4pCi0gICAgICAgIGludGVuZGVkQ2hhaW4gPSBhZG9wdFJl
ZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGNo
YWluKSk7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
IGlmIChpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uX25vcm1hbCkKKyAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNv
ZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0
X29mX2xpbmUpKSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NvbmN1cnJlbnRseSgKKyAgICAgICAgICAg
ICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgfQog
ICAgIAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5l
d1N0cnVjdHVyZSwgaW50ZW5kZWRDaGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0
QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKIH0KIAogUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3R1YkluZm9NYXAmIG1hcCwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTE2NSwxNiArMTY0LDE0
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gCiAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJh
bnNpdGlvbi5zdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbj4gY2hhaW47Ci0gICAgICAgICAgICBpZiAoc3R1YkluZm8tPnUucHV0QnlJZFRyYW5z
aXRpb24uY2hhaW4pIHsKLSAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBz
dHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0
KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9p
bnRlcigKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdD
b25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vu
c3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlv
dXNTdHJ1Y3R1cmUuZ2V0KCksCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRy
YW5zaXRpb24uc3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgIGNoYWluLmdldCgpLCBv
ZmZzZXQpOworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkBA
IC0yMTksMTUgKzIxNiwxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUp
OwotICAgICAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsK
LSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzLmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNj
ZXNzLmNoYWluKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZh
bGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0ID0gYWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJp
YW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFj
Y2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjaGFpbi5nZXQoKSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nl
c3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTI1Myw3ICsyNDYs
NyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKnN0dWItPm1fY2Fs
bExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwg
Y29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlv
blNldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVz
KSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNjgs
MjIgKzM2MSwxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAg
ICAgICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCiAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKLSAgICAgICAgUmVm
UHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAg
ICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGUg
cHJvdG90eXBlIGNoYWluIGhhcyBzZXR0ZXJzIG9yIHJlYWQtb25seSBwcm9wZXJ0aWVzLCB0aGVu
IGdpdmUgdXAuCi0gICAgICAgICAgICBpZiAoY2hhaW4tPm1heUludGVyY2VwdFN0b3JlVG8odWlk
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
LSAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhc24ndCBi
ZWVuIG5vcm1hbGl6ZWQgKGkuZS4gdGhlcmUgYXJlIHByb3hpZXMgb3IgZGljdGlvbmFyaWVzKQot
ICAgICAgICAgICAgLy8gdGhlbiBnaXZlIHVwLiBUaGUgZGljdGlvbmFyeSBjYXNlIHdvdWxkIG9u
bHkgaGFwcGVuIGlmIHRoaXMgc3RydWN0dXJlIGhhcyBub3QgYmVlbgotICAgICAgICAgICAgLy8g
dXNlZCBpbiBhbiBvcHRpbWl6ZWQgcHV0X2J5X2lkIHRyYW5zaXRpb24uIEFuZCByZWFsbHkgdGhl
IG9ubHkgcmVhc29uIHdoeSB3ZSB3b3VsZAotICAgICAgICAgICAgLy8gYmFpbCBoZXJlIGlzIHRo
YXQgSSBkb24ndCByZWFsbHkgZmVlbCBsaWtlIGhhdmluZyB0aGUgb3B0aW1pemluZyBKSVQgZ28g
YW5kIGZsYXR0ZW4KLSAgICAgICAgICAgIC8vIGRpY3Rpb25hcmllcyBpZiB3ZSBoYXZlIGV2aWRl
bmNlIHRvIHN1Z2dlc3QgdGhhdCB0aG9zZSBvYmplY3RzIHdlcmUgbmV2ZXIgdXNlZCBhcwotICAg
ICAgICAgICAgLy8gcHJvdG90eXBlcyBpbiBhIGNhY2hlYWJsZSBwcm90b3R5cGUgYWNjZXNzIC0g
aS5lLiB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCBzb21lIG9mCi0gICAgICAgICAgICAvLyB0
aGUgb3RoZXIgY2hlY2tzIGJlbG93IHdpbGwgZmFpbC4KLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzUHJveHkoKSB8fCAhY2hhaW4tPmlzTm9ybWFsaXplZCgpKQorICAgICAgICAgICAgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3Vy
cmVudGx5KAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CiAgICAgICAgIH0KICAgICAKQEAgLTM5NCw3ICszNzYsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpOwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50
KAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFu
c2l0aW9uLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFu
dDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0
KSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODcyNDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Myw4ICs0Myw3IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6
b3BlcmF0b3IKICAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7CiAgICAgbV9vbGRTdHJ1Y3R1cmUg
PSBvdGhlci5tX29sZFN0cnVjdHVyZTsKICAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3
U3RydWN0dXJlOwotICAgIG1fY29uc3RhbnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tz
OwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2Nv
bmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIu
bV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2Fs
bExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9j
YWxsTGlua1N0YXR1cyk7CkBAIC02NCwyOSArNjMsMjYgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJ
ZFZhcmlhbnQ6OnJlcGxhY2UoYwogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJh
bnNpdGlvbigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0
dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAg
ICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9u
OwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKICAgICByZXN1bHQu
bV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgaWYgKHN0cnVjdHVyZUNoYWluKQot
ICAgICAgICBzdHJ1Y3R1cmVDaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5tX2NvbnN0YW50Q2hl
Y2tzKTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1
cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiB7CiAg
ICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CiAg
ICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIGlmIChjaGFpbikgewot
ICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5tX2NvbnN0YW50Q2hlY2tzKTsKLSAg
ICAgICAgcmVzdWx0Lm1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgp
OwotICAgIH0KKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0g
V1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTM0LDE2
ICsxMzAsMTIgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0CiAgICAg
cmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKLVN0cnVjdHVyZVNldCBQdXRCeUlkVmFyaWFu
dDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0CitKU09iamVjdCogUHV0QnlJZFZhcmlhbnQ6OmFsdGVy
bmF0ZUJhc2UoKSBjb25zdAogewotICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAK
LSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpOwot
ICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29uc3RhbnRD
aGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsK
LSAgICByZXR1cm4gc3RydWN0dXJlOworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2luZCA9PSBTZXR0
ZXIpOworICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBtX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9i
amVjdCgpOwogfQogCiBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQ
dXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC0xOTYsNiArMTg4LDcgQEAgYm9vbCBQdXRCeUlkVmFy
aWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNl
Lm1fb2Zmc2V0KTsKICAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKICAg
ICBBU1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVCghcmVw
bGFjZS5jb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdpbmcg
b25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3
IGZpZWxkIHdoaWNoCiAgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUgdGhl
IG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndApAQCAt
MjMyLDEzICsyMjUsMTMgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29u
dGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKICAgICAgICAgICAgIHBvaW50
ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAg
ICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygpLCBjb250ZXh0KSwgIl0sIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0
aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVyOgogICAgICAgICBvdXQucHJpbnQo
CiAgICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0
KSwgIiwgWyIsCi0gICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygp
LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwg
Y29udGV4dCksICJdIik7CiAgICAgICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgICAg
ICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0
ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKICAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNyArNDYsNiBA
QCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoKQogICAgICAgICA6IG1fa2luZChOb3RTZXQp
CiAgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICAgICAgLCBtX2FsdGVybmF0
ZUJhc2UobnVsbHB0cikKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgIHsK
ICAgICB9CkBAIC01NCwxNiArNTMsMTUgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KGNv
bnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25z
dCBQdXRCeUlkVmFyaWFudCYpOwogCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2Uo
Ci0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpOworICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVy
ZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQg
dHJhbnNpdGlvbigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAg
ICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICAgICAgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2Fs
bExpbmtTdGF0dXMpOworICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CiAgICAgCiAgICAgS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkBAIC0xMDAsMTAgKzk4LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0Nh
bGxzKCkgY29uc3Q7CiAgICAgCi0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgY29uc3RhbnRDaGVja3MoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29uc3Rh
bnRDaGVja3M7Ci0gICAgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtMTExLDEzICsxMDYsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICB9CiAgICAgCi0gICAgSlNP
YmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwotICAgIH0KLSAg
ICAKLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OworICAgIEpTT2JqZWN0
KiBhbHRlcm5hdGVCYXNlKCkgY29uc3Q7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxM
aW5rU3RhdHVzKCkgY29uc3QKICAgICB7CkBAIC0xMzYsOCArMTI1LDcgQEAgcHJpdmF0ZToKICAg
ICBLaW5kIG1fa2luZDsKICAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CiAgICAgU3Ry
dWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9y
IG1fY29uc3RhbnRDaGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9m
ZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2Fs
bExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNw
cAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NiwyNCAr
NDYsMjkgQEAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogU3RydWN0dQogCiB2b2lk
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJl
RGV0YWlsJikKIHsKLSAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVt
aXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgotICAgIC8vIFRoYXQgd29y
a3MsIGJlY2F1c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0
J3MgbGlzdCwgYW5kCi0gICAgLy8gdGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcg
aXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2luZy4KLSAgICBtX2hvbGRlci5jb2RlQmxv
Y2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICBpZiAoIW1fa2V5Lmlz
V2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAg
ICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1pc2U6IHN0dWIgcmVz
ZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCisgICAgICAgIC8vIFRoYXQgd29ya3MsIGJlY2F1
c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3MgbGlzdCwg
YW5kCisgICAgICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJv
YnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCisgICAgICAgIG1faG9sZGVyLmNvZGVCbG9j
aygpLT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlv
bldhdGNocG9pbnQodGhpcyk7CiB9CiAKIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6
fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygpCiB7CiB9CiAKLVN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0
Y2hwb2ludCgpCitTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dDo6cHVzaCgqdGhpcywgbV9oZWFkKTsKKyAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludDo6cHVzaChrZXksICp0aGlzLCBtX2hlYWQpOwogfQogCiBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3Vy
ZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCi0gICAgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKICAgICBpZiAoIWhvbGRl
clJlZikKICAgICAgICAgaG9sZGVyUmVmID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbyhjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CkBAIC03Miw3ICs3Nyw3IEBAIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAgICAgQVNTRVJUKGhv
bGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAgIAotICAgIHJldHVy
biBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoKTsKKyAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRX
YXRjaHBvaW50KGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKIAor
I2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2lu
dC5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTQ2LDE1ICs0NywxMSBAQCBjbGFzcyBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50IDogCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgKLSAgICAgICAg
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIpCi0gICAgICAgIDogbV9ob2xk
ZXIoaG9sZGVyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwK
ICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBuZXh0KQot
ICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKKyAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAg
ICwgbV9ob2xkZXIoaG9sZGVyKQogICAgICAgICAsIG1fbmV4dChXVEY6Om1vdmUobmV4dCkpCiAg
ICAgewogICAgIH0KQEAgLTY5LDYgKzY2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgor
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OwogICAgIFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbyYgbV9ob2xkZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG1fbmV4dDsKIH07CkBAIC04MywxMSArODEsMTEgQEAgcHVi
bGljOgogICAgIAogICAgIH5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKTsKICAgICAK
LSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KCk7Cisg
ICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgK
ICAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJl
ZiwKLSAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyAgICAgICAgQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5KTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUJsb2NrOyB9CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHViSW5mbzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODcyNDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwxMiBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CiAg
ICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRp
dGlvblNldCk7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxm
OgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgogICAgIGNhc2UgYWNjZXNzX3Vu
c2V0OgogICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byByZWxlYXNl
IGFueSBhbGxvY2F0ZWQgbWVtb3J5CkBAIC03NSw4ICs3OCwxMCBAQCBib29sIFN0cnVjdHVyZVN0
dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVj
dDoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZp
b3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0
QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6Omlz
TWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKQorICAgICAgICAgICAgfHwg
IUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgdS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzEx
Myw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAgICAvLyBQdXRCeUlkKgogCi0g
ICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1
Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCBib29sIGlzRGlyZWN0KQorICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0
aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldCwgYm9vbCBpc0RpcmVjdCkKICAgICB7CiAgICAgICAgIGlmIChpc0RpcmVjdCkKICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OwpA
QCAtMTIyLDcgKzEyMiw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAgICAgICAg
dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBwcmV2
aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLnNl
dCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24uY2hh
aW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldC5yZWxlYXNlUmF3UG9pbnRlcigpOwogICAgIH0K
IAogICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3Ry
dWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlKQpAQCAtMTc1LDEwICsxNzUsMTEgQEAgc3RydWN0
IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgfQogICAgICAg
ICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQq
IGFkZFdhdGNocG9pbnQoCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hw
b2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMpOworICAgICAg
ICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29uZGl0aW9uKTsKICAgICB9CiAg
ICAgCiAgICAgaW50OF90IGFjY2Vzc1R5cGU7CkBAIC0yMTcsMjMgKzIxOCwxMiBAQCBzdHJ1Y3Qg
U3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1
cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIH0gZ2V0QnlJZFNlbGY7CiAgICAgICAg
IHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9i
amVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBw
cm90b3R5cGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBib29sIGlzRGlyZWN0OwotICAgICAgICB9
IGdldEJ5SWRQcm90bzsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
b3VudCA6IDMxOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA6IDE7Ci0gICAgICAgIH0gZ2V0
QnlJZENoYWluOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBnZXRCeUlkTGlzdDsKICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcmV2aW91c1N0cnVjdHVy
ZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7Ci0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAg
ICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKICAgICAgICAgfSBwdXRCeUlkVHJhbnNpdGlv
bjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6
OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQorICAg
IDogbV9rZXkoa2V5KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsK
K30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omluc3Rh
bGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAor
ICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQo
Jm1fc3RydWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gbV9rZXktPm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KG1fa2V5LnVp
ZCgpKTsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJl
KCktPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgc2V0LT5h
ZGRXYXRjaHBvaW50KCZtX3Byb3BlcnR5V2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpmaXJlKGNvbnN0IEZpcmVEZXRhaWwmIGRl
dGFpbCkKK3sKKyAgICAvLyBPbmUgb2YgdGhlIHdhdGNocG9pbnRzIGZpcmVkLCBidXQgdGhlIG90
aGVyIG9uZSBkaWRuJ3QuIE1ha2Ugc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlbSBhcmUKKyAgICAv
LyBpbiBhbnkgc2V0IGFueW1vcmUuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgYnkgYWxsb3dpbmcg
dXMgdG8gcmVpbnN0YWxsIHRoZSB3YXRjaHBvaW50cworICAgIC8vIHdoZXJldmVyIGZyb20gc2Ny
YXRjaC4KKyAgICBpZiAobV9zdHJ1Y3R1cmVXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAg
IG1fc3RydWN0dXJlV2F0Y2hwb2ludC5yZW1vdmUoKTsKKyAgICBpZiAobV9wcm9wZXJ0eVdhdGNo
cG9pbnQuaXNPbkxpc3QoKSkKKyAgICAgICAgbV9wcm9wZXJ0eVdhdGNocG9pbnQucmVtb3ZlKCk7
CisgICAgCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1
cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAg
ICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50
ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAg
IH0KKyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50KCJBZGFw
dGF0aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAgICBTdHJp
bmdGaXJlRGV0YWlsIGRldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAKKyAgICBt
X2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5w
cm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZkZXRhaWwpOworfQorCit2
b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0
Y2hwb2ludDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sK
KyAgICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoCisgICAgICAgIEFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50
KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBh
cmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBt
eU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisKK3ZvaWQgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6
OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRy
ZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fcHJvcGVydHlXYXRjaHBvaW50KTsKKyAgICAK
KyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9Cisg
ICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7
CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAorICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAgIAorICAg
IHZvaWQgaW5zdGFsbCgpOworCitwcml2YXRlOgorICAgIGNsYXNzIFN0cnVjdHVyZVdhdGNocG9p
bnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBTdHJ1Y3R1cmVX
YXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmly
ZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9OworICAgIGNsYXNz
IFByb3BlcnR5V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFByb3BlcnR5V2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAg
dmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7Cisg
ICAgfTsKKyAgICAKKyAgICB2b2lkIGZpcmUoY29uc3QgRmlyZURldGFpbCYpOworICAgIAorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7CisgICAgU3RydWN0dXJlV2F0Y2hwb2ludCBtX3N0cnVjdHVyZVdhdGNocG9pbnQ7CisgICAg
UHJvcGVydHlXYXRjaHBvaW50IG1fcHJvcGVydHlXYXRjaHBvaW50OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1cmllc1N0cmN1dHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1Jl
cGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxl
KCkpOworICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlv
bldhdGNocG9pbnQodGhpcyk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIGlmIChtX2tl
eS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgewor
ICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAg
ICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tl
eSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5n
UHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwg
IiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwo
b3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29u
KAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBD
b3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXks
CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAg
ICB2b2lkIGluc3RhbGwoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50
ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw4IEBAIHByaXZhdGU6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZUNvbnN0
YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbios
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwog
ICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSogaGFuZGxlR2V0QnlP
ZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSBvcCA9IEdl
dEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwg
Tm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAg
ICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7
CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKAogICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5k
LCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwK
ICAgICAgICAgY29uc3QgR2V0QnlJZFN0YXR1cyYpOwpAQCAtMjEyLDcgKzIxMywyOSBAQCBwcml2
YXRlOgogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAog
ICAgICAgICBib29sIGlzRGlyZWN0KTsKLSAgICB2b2lkIGVtaXRDaGVja3MoY29uc3QgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYpOworICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBF
aXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhpcyBjb25k
aXRpb24uIFJldHVybnMgZmFsc2UgaWYgdGhlCisgICAgLy8gY29uZGl0aW9uIG5vIGxvbmdlciBo
b2xkcywgYW5kIHRoZXJlZm9yZSBubyByZWFzb25hYmxlIGNoZWNrIGNhbiBiZSBlbWl0dGVkLgor
ICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKKyAg
ICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhp
cyBjb25kaXRpb24uIEl0IG11c3QgYmUgYSBQcmVzZW5jZQorICAgIC8vIGNvbmRpdGlvbi4gSXQg
d2lsbCBhdHRlbXB0IHRvIHByb21vdGUgYSBQcmVzZW5jZSBjb25kaXRpb24gdG8gYW4gRXF1aXZh
bGVuY2UgY29uZGl0aW9uLgorICAgIC8vIEVtaXRzIGNvZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUg
dGhhdCB0aGUgY29uZGl0aW9uIGd1YXJkcywgYW5kIHJldHVybnMgYSBub2RlIGNvbnRhaW5pbmcK
KyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgdGhlIGNvbmRpdGlvbiBu
byBsb25nZXIgaG9sZHMuCisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAg
ICAvLyBDYWxscyBjaGVjaygpIGZvciBlYWNoIGNvbmRpdGlvbiBpbiB0aGUgc2V0OiB0aGF0IGlz
LCBpdCBlaXRoZXIgZW1pdHMgY2hlY2tzIG9yIHJlZ2lzdGVycworICAgIC8vIHdhdGNocG9pbnRz
IChvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28pIHRvIG1ha2UgdGhlIGNvbmRpdGlvbnMgaG9s
ZC4gSWYgYW55IG9mIHRob3NlCisgICAgLy8gY29uZGl0aW9ucyBhcmUgbm8gbG9uZ2VyIGNoZWNr
YWJsZSwgcmV0dXJucyBmYWxzZS4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0Jik7CisgICAgCisgICAgLy8gQ2FsbHMgY2hlY2soKSBmb3IgdGhvc2UgY29u
ZGl0aW9ucyB0aGF0IGFyZW4ndCB0aGUgc2xvdCBiYXNlLCBhbmQgY2FsbHMgbG9hZCgpIGZvciB0
aGUgc2xvdAorICAgIC8vIGJhc2UuIERvZXMgYSBjb21iaW5hdGlvbiBvZiB3YXRjaHBvaW50IHJl
Z2lzdHJhdGlvbiBhbmQgY2hlY2sgZW1pc3Npb24gdG8gZ3VhcmQgdGhlCisgICAgLy8gY29uZGl0
aW9ucywgYW5kIGVtaXRzIGNvZGUgdG8gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2xvdCBiYXNl
LiBSZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0
dXJucyBudWxsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyB3ZXJlIG5vIGxvbmdlciBjaGVja2Fi
bGUuCisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKIAogICAgIHZvaWQgcHJlcGFy
ZVRvUGFyc2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJDYWNoZXMoKTsKQEAgLTcwNiw2ICs3Mjks
OSBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGUqIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVD
aGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgeworICAgICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcm91dGUgdG8gZW1pdFByb3BlcnR5Q2hlY2ssIG5vdCB0
aGUgb3RoZXIgd2F5IGFyb3VuZC4gQnV0IGN1cnJlbnRseSwKKyAgICAgICAgLy8gdGhpcyBnZXRz
IG5vIHByb2ZpdCBmcm9tIHVzaW5nIGVtaXRQcm9wZXJ0eUNoZWNrKCkgc2luY2Ugd2UnbGwgbm9u
LWFkYXB0aXZlbHkgd2F0Y2ggdGhlCisgICAgICAgIC8vIG9iamVjdCdzIHN0cnVjdHVyZSBhcyBz
b29uIGFzIHdlIG1ha2UgaXQgYSB3ZWFrSlNDb3NudGFudC4KICAgICAgICAgTm9kZSogb2JqZWN0
Tm9kZSA9IHdlYWtKU0NvbnN0YW50KG9iamVjdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tT
dHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgb2Jq
ZWN0Tm9kZSk7CiAgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwpAQCAtMjI0MCw5ICsyMjY2LDE2
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBOb2RlVHlwZSBvcCkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlJiBwYXNzZWRTdHJ1Y3R1cmVTZXQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7CiAgICAgaWYgKGJhc2Ut
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBzdHJ1Y3R1
cmVTZXQgPSBwYXNzZWRTdHJ1Y3R1cmVTZXQ7CisgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuaXNU
b3AoKSB8fCBzdHJ1Y3R1cmVTZXQuaXNDbG9iYmVyZWQoKSkgeworICAgICAgICAgICAgRnJvemVu
VmFsdWUqIHZhbHVlID0gYmFzZS0+Y29uc3RhbnQoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+
c3RydWN0dXJlKCkgJiYgdmFsdWUtPnN0cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpKQorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZVNldCA9IHZhbHVlLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdl
dENvbnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0
KSkgewogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKICAgICAgICAgICAg
IHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7CkBAIC0yMjY0LDYgKzIyOTcsMTMgQEAg
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIHJldHVybiBnZXRC
eU9mZnNldDsKIH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCit7CisgICAgcmV0dXJuIGhh
bmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICBwcmVkaWN0aW9uLCBiYXNlLCBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjp0b3AoKSwgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpLAorICAg
ICAgICBvZmZzZXQsIG9wKTsKK30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgTm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMjI4
MSwxMCArMjMyMSwxNDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0
KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVj
a3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKQordm9pZCBCeXRl
Q29kZVBhcnNlcjo6ZW1pdEdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5v
ZGUqIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBOb2RlKiBwcm9wZXJ0eVN0
b3JhZ2U7CisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IGJhc2U7CisgICAgZWxzZQorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRU
b0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CisgICAgCisgICAgU3RvcmFnZUFjY2Vzc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CisgICAgZGF0YS0+b2Zm
c2V0ID0gb2Zmc2V0OworICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVt
YmVyOworICAgIAorICAgIE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChvcCwgT3BJbmZv
KGRhdGEpLCBPcEluZm8ocHJlZGljdGlvbiksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisKKyAg
ICByZXR1cm4gZ2V0QnlPZmZzZXQ7Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCit7CisgICAgaWYgKG1fZ3Jh
cGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVy
ZSgpOworICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1
cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYWRkVG9HcmFwaCgKKyAgICAg
ICAgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChzdHJ1Y3R1cmUpKSwKKyAgICAgICAgd2Vha0pTQ29uc3RhbnQoY29uZGl0aW9uLm9iamVjdCgp
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAor
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24sIE5vZGVUeXBlIG9wKQoreworICAgIC8vIFdlIG1pZ2h0IHByb21vdGUg
dGhpcyB0byBFcXVpdmFsZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBz
dWNoIHByb21vdGlvbgorICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5
IHRoaXMgY2Fubm90IGJlIGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgor
ICAgIC8vIE5vbmUgb2YgdGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEg
bG9hZCBvZiBhbiBFcXVpdmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBw
b3J0aW5nIGl0IHdvdWxkIGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVM
RUFTRV9BU1NFUlQoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2Vu
Y2UpOworICAgIAorICAgIC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRo
aXMsIGZyb20gbW9zdCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAg
Ly8gMSkgV2F0Y2hwb2ludCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBh
IGNvbnN0YW50IG5vZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIg
Y29kZSBpcyBlbWl0dGVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMg
bmV2ZXIgcmVnaXN0ZXJlZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBj
b2RlIGFuZCB3ZSB3b24ndCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QK
KyAgICAvLyAgICB0cmFuc2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJs
ZSByaWdodCBub3cuCisgICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQg
dGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQg
YnkgdGhlCisgICAgLy8gICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNo
IHRoZSBzdHJ1Y3R1cmUgYW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8v
ICAgIGNvbmRpdGlvbiwgc2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBj
b25zdGFudCBpbiBJUiB3aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUg
c3RydWN0dXJlIGFueXdheSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUg
Y29uZGl0aW9uLgorICAgIC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRo
ZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0
aGUKKyAgICAvLyAgICBERkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFs
aWQoKSBhbmQgIWRmZ1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0
aGUgY29uZGl0aW9uLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRv
IGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5v
dCB3YXRjaGFibGUuIEVtaXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQg
YSBsb2FkLgorICAgIC8vCisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBH
aXZlIHVwIGFuZCByZXR1cm4gbnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWdyZWUg
b24gd2hhdCB0aGUgc3RydWN0dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGluZyB0aGVz
ZSB2YXJpb3VzCisgICAgLy8gY2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29u
ZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRv
IHByb21vdGUgUHJlc2VuY2UgdG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5n
IGFueXRoaW5nIGVsc2UKKyAgICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4g
QWxzbywgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0
CisgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVx
dWl2YWxlbmNlIChzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAoMiks
IGFuZCAoMykgYWJvdmUpLgorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQoY29uZGl0
aW9uLm9mZnNldCgpKSkgeworICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNhdXNlIG9u
bHkgdGhlIEdDIGNhbiBjYXVzZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdhcmJhZ2UK
KyAgICAgICAgLy8gdmFsdWUuCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRpb24ub2Jq
ZWN0KCktPmdldERpcmVjdChjb25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAg
ICAgICBjb25kaXRpb24ub2JqZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOworICAgICAg
ICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAg
ICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQodmFsdWUpOworICAgIH0KKyAgICAKKyAgICAv
LyBBdCB0aGlzIHBvaW50LCB3ZSdsbCBoYXZlIHRvIG1hdGVyaWFsaXplIHRoZSBjb25kaXRpb24n
cyBiYXNlIGFzIGEgY29uc3RhbnQgaW4gREZHIElSLiBPbmNlCisgICAgLy8gd2UgZG8gdGhpcywg
dGhlIGZyb3plbiB2YWx1ZSB3aWxsIGhhdmUgaXRzIG93biBpZGVhIG9mIHdoYXQgdGhlIHN0cnVj
dHVyZSBpcy4gVXNlIHRoYXQgZnJvbQorICAgIC8vIG5vdyBvbiBqdXN0IGJlY2F1c2UgaXQncyBs
ZXNzIGNvbmZ1c2luZy4KKyAgICBOb2RlKiBiYXNlTm9kZSA9IHdlYWtKU0NvbnN0YW50KGNvbmRp
dGlvbi5vYmplY3QoKSk7CisgICAgc3RydWN0dXJlID0gYmFzZU5vZGUtPmNvbnN0YW50KCktPnN0
cnVjdHVyZSgpOworICAgIAorICAgIC8vIENoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSd2
ZSByZWdpc3RlcmVkIG1ha2VzIHRoZSBjb25kaXRpb24gaG9sZC4gSWYgbm90LCBqdXN0IGdpdmUK
KyAgICAvLyB1cC4gVGhpcyBpcyBjYXNlICg1KSBhYm92ZS4KKyAgICBpZiAoIWNvbmRpdGlvbi5z
dHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgCisgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRjaGVkIGJ5IHRoZSBERkcg
YWxyZWFkeSwgdGhlbiBqdXN0IHVzZSB0aGlzIGZhY3QgdG8gZW1pdCB0aGUgbG9hZC4KKyAgICAv
LyBUaGlzIGlzIGNhc2UgKDIpIGFib3ZlLgorICAgIGlmIChzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdh
dGNoKCkpCisgICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNl
Tm9kZSwgY29uZGl0aW9uLnVpZCgpLCBjb25kaXRpb24ub2Zmc2V0KCksIG9wKTsKKyAgICAKKyAg
ICAvLyBJZiB3ZSBjYW4gd2F0Y2ggdGhlIGNvbmRpdGlvbiByaWdodCBub3csIHRoZW4gd2UgY2Fu
IGVtaXQgdGhlIGxvYWQgYWZ0ZXIgd2F0Y2hpbmcgaXQuIFRoaXMKKyAgICAvLyBpcyBjYXNlICgz
KSBhYm92ZS4KKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAg
ICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZU5vZGUsIGNvbmRp
dGlvbi51aWQoKSwgY29uZGl0aW9uLm9mZnNldCgpLCBvcCk7CisgICAgCisgICAgLy8gV2UgY2Fu
J3Qgd2F0Y2ggYW55dGhpbmcgYnV0IHdlIGtub3cgdGhhdCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUg
c2F0aXNmaWVzIHRoZSBjb25kaXRpb24uIFNvLAorICAgIC8vIGNoZWNrIGZvciB0aGF0IHN0cnVj
dHVyZSBhbmQgdGhlbiBlbWl0IHRoZSBsb2FkLgorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIENo
ZWNrU3RydWN0dXJlLCAKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0
cnVjdHVyZSkpLAorICAgICAgICB3ZWFrSlNDb25zdGFudChiYXNlTm9kZSkpOworICAgIAorICAg
IHJldHVybiBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5vZGUs
IHN0cnVjdHVyZSwgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25kaXRpb24udWlkKCkp
LAorICAgICAgICBjb25kaXRpb24ub2Zmc2V0KCksIG9wKTsKK30KKworYm9vbCBCeXRlQ29kZVBh
cnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCkKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6
IGNvbmRpdGlvblNldCkgeworICAgICAgICBpZiAoIWNoZWNrKGNvbmRpdGlvbikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBOb2RlVHlwZSBvcCkK
IHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQotICAg
ICAgICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sodmVjdG9yW2ldLmNvbnN0YW50KCks
IHZlY3RvcltpXS5zdHJ1Y3R1cmUoKSk7CisgICAgTm9kZSogcmVzdWx0ID0gbnVsbHB0cjsKKyAg
ICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlv
blNldCkgeworICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghcmVzdWx0KTsgLy8gU2hvdWxkIG9ubHkgc2VlIGV4YWN0bHkgb25lIG9mIHRoZXNlLgorICAg
ICAgICAgICAgcmVzdWx0ID0gbG9hZChwcmVkaWN0aW9uLCBjb25kaXRpb24sIG9wKTsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIWNoZWNr
KGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMxMyw4ICsyNDky
LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgIC8vIDEp
IEVtaXQgcHJvdG90eXBlIHN0cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMuIFRoaXMgY291
bGQgc29ydCBvZiBtYXliZSBub3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwgaWYgdGhlcmUg
aXMgc29tZSByYXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCByZXF1aXJlcyBh
IGxvdAogICAgICAgICAvLyAgICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBhcmUgbm90IHdh
dGNocG9pbnRhYmxlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5
SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KQotICAgICAgICAgICAgZW1p
dENoZWNrcyhnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJp
YW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGVtaXRQcm9wZXJ0eUNoZWNr
cygKKyAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRD
aGVja3MoKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmll
ck51bWJlcl0pOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyAyKSBFbWl0IGEgTXVs
dGlHZXRCeU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKQEAgLTIzMzUsMTEgKzI1MTcsMjUgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKICAgICAKLSAgICBlbWl0Q2hlY2tz
KHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7Ci0KLSAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVC
YXNlKCkpCi0gICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSk7CisgICAgU3BlY3VsYXRlZFR5cGUgbG9hZFByZWRpY3Rpb247CisgICAgTm9kZVR5cGUg
bG9hZE9wOworICAgIGlmICh2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgbG9h
ZFByZWRpY3Rpb24gPSBTcGVjQ2VsbE90aGVyOworICAgICAgICBsb2FkT3AgPSBHZXRHZXR0ZXJT
ZXR0ZXJCeU9mZnNldDsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkUHJlZGljdGlvbiA9IHBy
ZWRpY3Rpb247CisgICAgICAgIGxvYWRPcCA9IEdldEJ5T2Zmc2V0OworICAgIH0KICAgICAKKyAg
ICBOb2RlKiBsb2FkZWRWYWx1ZTsKKyAgICBpZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNF
bXB0eSgpKQorICAgICAgICBsb2FkZWRWYWx1ZSA9IGxvYWQobG9hZFByZWRpY3Rpb24sIHZhcmlh
bnQuY29uZGl0aW9uU2V0KCksIGxvYWRPcCk7CisgICAgZWxzZSB7CisgICAgICAgIGxvYWRlZFZh
bHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFz
ZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zm
c2V0KCksCisgICAgICAgICAgICBsb2FkT3ApOworICAgIH0KKwogICAgIC8vIFVubGVzcyB3ZSB3
YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3
ODMsIHdlIG5lZWQgdG8KICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2lu
YWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCiAgICAgLy8g
YWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRo
ZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUKQEAgLTIzNDcsMTEgKzI1NDMsNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIGlmIChvcmlnaW5hbEJhc2UgIT0g
YmFzZSkKICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcmlnaW5hbEJhc2UpOwogICAgIAot
ICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgIHZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAotICAgICAg
ICBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSwKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gR2V0R2V0dGVy
U2V0dGVyQnlPZmZzZXQgOiBHZXRCeU9mZnNldCk7Ci0gICAgCiAgICAgaWYgKCF2YXJpYW50LmNh
bGxMaW5rU3RhdHVzKCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlv
bk9wZXJhbmQpLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MjksNyArMjYy
MCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsg
dmFyaWFudEluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFy
aWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGVtaXRDaGVja3MocHV0QnlJ
ZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICAgICAgICAg
IGVtaXRQcm9wZXJ0eUNoZWNrcygKKyAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1c1t2
YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0yNDU0LDcgKzI2NDcsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeUlkKAogICAgIAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b246IHsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAg
IGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZW1pdFByb3Bl
cnR5Q2hlY2tzKAorICAgICAgICAgICAgdmFyaWFudC5jb25zdGFudENoZWNrcygpLAorICAgICAg
ICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKIAogICAgICAg
ICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgIApAQCAtMjUxMCw3ICsyNzA1
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgYWRkVG9H
cmFwaCgKICAgICAgICAgICAgIENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgCi0gICAgICAg
IGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgZW1pdFByb3Bl
cnR5Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSwgbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJOdW1iZXJdKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSkKICAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFs
dGVybmF0ZUJhc2UoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDkgQEAgdm9p
ZCBDb21tb25EYXRhOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgIHRy
YWNrZWRSZWZlcmVuY2VzLmNoZWNrKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29u
c3RhbnQoKSk7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgZm9yIChBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQqIHdhdGNocG9pbnQgOiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRz
KQorICAgICAgICB3YXRjaHBvaW50LT5rZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJl
ZmVyZW5jZXMpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1
ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTgsNiAr
MTAwLDggQEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1Jl
ZmVyZW5jZXM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0
dXJlUmVmZXJlbmNlczsKICAgICBCYWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3
YXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ+IGFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7
CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsKICAgICAKICAg
ICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJ
KHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9p
bnRBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJW
aWV3KiB2aWV3LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQogeworICAg
IFdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9j
ayk7CiAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50KiBuZXV0ZXJpbmdXYXRjaHBv
aW50ID0KICAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50OjpjcmVhdGUoKmNv
ZGVCbG9jay0+dm0oKSk7CiAgICAgbmV1dGVyaW5nV2F0Y2hwb2ludC0+c2V0KCktPmFkZCh3YXRj
aHBvaW50KTsKQEAgLTQ1LDEwICs0NiwyMyBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9p
bnRBZGFwdG9yOjphCiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgKLSAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgV2F0Y2hw
b2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1
ZSogaW5mZXJyZWRWYWx1ZSwgQ29tbW9uRGF0YSYgY29tbW9uKQogewogICAgIGNvZGVCbG9jay0+
YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNu
J3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0
IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBpbmZlcnJlZFZhbHVlLT5hZGQod2F0Y2hw
b2ludCk7CisgICAgaW5mZXJyZWRWYWx1ZS0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29k
ZUJsb2NrKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6
YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAgc3dpdGNoIChrZXkua2luZCgp
KSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIGNv
bW1vbi5hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmFkZChrZXksIGNv
ZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgY29tbW9uLmFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29kZUJsb2Nr
KS0+aW5zdGFsbCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIERlc2lyZWRXYXRjaHBv
aW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CkBAIC03NCw2ICs4OCwxMSBAQCB2b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJyCiAgICAgbV9idWZmZXJWaWV3cy5hZGRM
YXppbHkodmlldyk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBtX2FkYXB0aXZlU3RydWN0
dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNv
bnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdT
aG91bGRXYXRjaCgpKQpAQCAtODgsNiArMTA3LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6
OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBj
b21tb25EYXRhKTsKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNv
bW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9u
RGF0YSk7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywg
Y29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlk
KCkgY29uc3QKQEAgLTk1LDcgKzExNSw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVT
dGlsbFZhbGlkKCkKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAm
JiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1
ZXMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxp
ZCgpOworICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAm
JiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJJ
bmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRl
ICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCkBAIC00MSwxNSArNDIsMTUgQEAgY2xhc3MgR3JhcGg7
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewotICAg
IHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBUIHNldCwgV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21t
b25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2lu
dCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVC
bG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQp
IHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KIH07CiAKIHN0cnVjdCBJbmZl
cnJlZFZhbHVlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVy
cmVkVmFsdWUqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayos
IEluZmVycmVkVmFsdWUqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbklu
dmFsaWRhdGVkKEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUpCiAgICAgewogICAgICAgICBy
ZXR1cm4gaW5mZXJyZWRWYWx1ZS0+aGFzQmVlbkludmFsaWRhdGVkKCk7CkBAIC01NywxMiArNTgs
MTggQEAgc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBcnJheUJ1
ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9j
ayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIENvbW1vbkRhdGEmKTsKICAgICBzdGF0
aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAg
ewotICAgICAgICBib29sIHJlc3VsdCA9ICF2aWV3LT5sZW5ndGgoKTsKLSAgICAgICAgV1RGOjps
b2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiAh
dmlldy0+bGVuZ3RoKCk7CisgICAgfQorfTsKKworc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludEFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBo
YXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAg
ICB7CisgICAgICAgIHJldHVybiAha2V5LmlzV2F0Y2hhYmxlKCk7CiAgICAgfQogfTsKIApAQCAt
ODcsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFk
ZGVkKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQotICAgICAg
ICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24ud2F0Y2hwb2ludHMuYWRk
KGNvZGVCbG9jaykpOworICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBj
b21tb24pOwogICAgICAgICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQpA
QCAtMTIyLDYgKzEyOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMYXppbHkoSW5mZXJyZWRW
YWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAgCisg
ICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHku
IFVzZQorICAgIC8vIEdyYXBoOjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQsIHdoaWNo
IGRvZXMgdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwuCisgICAgdm9pZCBhZGRMYXppbHko
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKICAgICBib29sIGNvbnNpZGVy
KFN0cnVjdHVyZSopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1v
bkRhdGEmKTsKQEAgLTE0NCwxMiArMTU1LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9CisgICAgYm9vbCBpc1dh
dGNoZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAg
ICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNl
dCo+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElubGluZVdhdGNocG9p
bnRTZXQqPiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZl
cnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAg
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVy
Vmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOworICAgIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDE0IEBAIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6
fkRlc2lyZWRXZWFrUmVmZXIKIAogdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemls
eShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKKyAgICBpZiAo
Y2VsbCkKKyAgICAgICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKK30KKwordm9pZCBEZXNpcmVk
V2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZS5pc0NlbGwoKSkKKyAgICAgICAgYWRkTGF6aWx5KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAogYm9v
bCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5j
ZXMuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw2ICs0OCw3IEBA
IHB1YmxpYzoKICAgICB+RGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7CiAKICAgICB2b2lkIGFkZExh
emlseShKU0NlbGwqKTsKKyAgICB2b2lkIGFkZExhemlseShKU1ZhbHVlKTsKICAgICBib29sIGNv
bnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0
YSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NDgsNiArODQ4LDIxIEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFs
bE5vZGVzKE5vZGVGbGEKICAgICB9CiB9CiAKK2Jvb2wgR3JhcGg6OmFkZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAg
IGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAgaWYg
KGtleS5oYXNQcm90b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExh
emlseShrZXkucHJvdG90eXBlKCkpOworICAgIGlmIChrZXkuaGFzUmVxdWlyZWRWYWx1ZSgpKQor
ICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5yZXF1aXJlZFZhbHVl
KCkpOworICAgIAorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0Zv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6
dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRl
Y29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSw5IEBAIHB1YmxpYzoK
ICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlk
ZW50aWZpZXJzOyB9CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0
dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQogICAgIAorICAgIC8vIFJldHVybnMgZmFsc2UgaWYg
dGhlIGtleSBpcyBhbHJlYWR5IGludmFsaWQuCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVu
ZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYg
bGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMiw2ICszMjIsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVU
eXBlJiBzdAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJC
eU9mZnNldDoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IG5lZWRzIHRvIGFsc28gY2hlY2sgdGhlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IGhh
dmUgYmVlbiByZWdpc3RlcmVkLgorICAgICAgICAvLyBJZiB3ZSBoYXZlIG9uZSB0aGF0IGd1YXJh
bnRlZXMgdGhlIHByZXNlbmNlIG9mIHRoaXMgcHJvcGVydHksIHRoZW4gdGhpcyBpcyBhbHdheXMg
c2FmZQorICAgICAgICAvLyB0byBleGVjdXRlLgorICAgICAgICBGSVhNRTsKKyAgICAgICAgCiAg
ICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CiAgICAgICAgIGlmICh2YWx1ZS5pc1RvcCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQg
cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5j
dGlvbiwKICAgICBib29sIGNvbXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8o
KS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJl
LT5uZWVkc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS5yZWdpc3Rlcldh
dGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNo
cG9pbnQoY29kZUJsb2NrKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNvZGVCbG9jayk7CkBAIC0xMzIsNDcgKzEzMiwzMCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJ
ZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKAotICAgIEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNy
b0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
R1BSUmVnIHNjcmF0Y2hHUFIpCitzdGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0
aW9uKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgTWFjcm9B
c3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgR1BS
UmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gc3RydWN0
dXJlICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkg
ewotICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7
Ci0gICAgICAgICAgICAvLyBJZiB3ZSBleGVjdXRlIHRoaXMgY29kZSwgdGhlIG9iamVjdCBtdXN0
IGhhdmUgdGhlIHN0cnVjdHVyZSB3ZSBleHBlY3QuIEFzc2VydAotICAgICAgICAgICAgLy8gdGhp
cyBpbiBkZWJ1ZyBtb2Rlcy4KLSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgb2sgPSBicmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAgICAgaml0LAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBqaXQuYWJv
cnRXaXRoUmVhc29uKFJlcGF0Y2hJbmVmZmVjdGl2ZVdhdGNocG9pbnQpOwotICAgICAgICAgICAg
b2subGluaygmaml0KTsKLSAgICAgICAgfQorICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgIGNvbmRpdGlvbi5v
YmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAg
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRj
aEdQUik7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKLSAgICAgICAgYnJhbmNoU3RydWN0dXJl
KGppdCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgYnJhbmNoU3RydWN0
dXJlKAorICAgICAgICAgICAgaml0LCBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmUpKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKAotICAgIEpTVmFsdWUgcHJvdG90eXBlLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIE1hY3JvQXNzZW1ibGVyJiBq
aXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRj
aEdQUikKLXsKLSAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Ci0gICAgCi0gICAgYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICBwcm90b3R5cGUuYXNDZWxsKCksIHByb3RvdHlw
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCksIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwKLSAgICAg
ICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJv
cGVydHlDb25kaXRpb25zKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBz
ZXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisg
ICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVD
YXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogc2V0KSB7CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24oCisgICAgICAgICAgICBjb25kaXRpb24sIGNvZGVCbG9jaywgc3R1YkluZm8s
IGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lk
IHJlcGxhY2VXaXRoSnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCkBA
IC0yOTYsMTEgKzI3OSwxMiBAQCBzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1
dFByCiAKIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgRXhlY1N0YXRlKiBleGVj
LCBCeUlkU3R1YktpbmQga2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLAotICAg
IEZ1bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwKKyAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBib29sIGxvYWRUYXJnZXRGcm9tUHJveHksIFdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRTZXQsCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRp
b25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGlu
ZSkKIHsKLQorICAgIEFTU0VSVChjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CisgICAgCiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IEpTVmFs
dWVSZWdzKApAQCAtMzQ2LDMzICszMzAsMjUgQEAgc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1
YigKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dh
dGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpIHx8IGNvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAg
ICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5h
bWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKICAgICBpZiAod2F0Y2hw
b2ludFNldCkKICAgICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9p
bnQoY29kZUJsb2NrKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmU7IAotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgaWYgKGNoYWluKSB7Ci0g
ICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAg
ICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxv
b2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0gcHJv
dG9PYmplY3QtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50
eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAg
ICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5h
bWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG9PYmplY3QsIHBy
b3RvU3RydWN0dXJlLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAg
ICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJl
ID0gaXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCghcHJvdG9PYmplY3QgfHwg
cHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpID09IGN1cnJTdHJ1Y3R1cmUpOwotICAgIH0KKyAgICBj
aGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9uU2V0LCBjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAgCisg
ICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOworICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0
eSgpKQorICAgICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIGVsc2UKKyAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKTsKICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVy
dHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOworICAgIAogICAgIEdQUlJlZyBiYXNlRm9y
QWNjZXNzR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICBpZiAoa2luZCAhPSBHZXRVbmRlZmluZWQp
IHsKLSAgICAgICAgaWYgKGNoYWluKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRjaEdQ
UiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRoZSB0
YXJnZXQuCiAgICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQ
cm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsKQEAgLTYyNyw5ICs2MDMsOCBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWCiAgICAgICAgIGFzT2Jq
ZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQotICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBv
aW50cygpKQorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgcmV0dXJuIEF0dGVtcHRU
b0NhY2hlOwpAQCAtODI3LDIxICs4MDIsMjIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUJ1aWxkR2V0QnlJRAogICAgIH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3Qu
aXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgU3Ry
dWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAwOwor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICAK
ICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkg
ewogICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwogCiAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyhleGVjLCBzdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcygKLSAgICAgICAgICAgICAgICBleGVj
LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgICAgIGlm
IChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdChleGVjLCBzdHJ1
Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hh
aW4oZXhlYyk7CisgICAgICAgIAorICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJh
c2VDb25kaXRpb24oKS5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8pOwpA
QCAtODUyLDcgKzgyOCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5
SUQKICAgICAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIGJv
b2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90
KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3Vu
dCwgb2Zmc2V0LCAKKyAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZv
cihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgb2Zmc2V0LCAKICAgICAgICAgc3RydWN0
dXJlLCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgCiAgICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJl
bnRTbG93UGF0aFRhcmdldChzdHViSW5mbykpLCBzdHViUm91dGluZSk7CkBAIC04NzEsNyArODQ3
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIAogICAg
IGxpc3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAogICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsCi0g
ICAgICAgIHByb3RvdHlwZUNoYWluLCBjb3VudCkpOworICAgICAgICBjb25kaXRpb25TZXQpKTsK
ICAgICAKICAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0
dWJSb3V0aW5lLmdldCgpKTsKICAgICAKQEAgLTk5MywyNiArOTY5LDI4IEBAIHN0YXRpYyBib29s
IGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFN0cnVj
dHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKEV4ZWNTdGF0ZSog
ZXhlYywgVk0qIHZtLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCAKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIGJvb2wgZW1pdFB1dFRyYW5zaXRp
b25TdHViKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgVk0qIHZtLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1
cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCAKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kLAorICAg
IFN0cnVjdHVyZSomIG9sZFN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCkKIHsKICAgICBQcm9wZXJ0eU5hbWUgcG5hbWUoaWRlbnQpOwotICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIG9sZFN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBvbGRTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpIHx8IHBhcnNlSW5kZXgocG5hbWUpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUHJvcGVydHlPZmZzZXQgcHJvcGVy
dHlPZmZzZXQ7CiAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgaWRlbnQuaW1w
bCgpLCAwLCBwcm9wZXJ0eU9mZnNldCk7CiAKICAgICBpZiAoIXN0cnVjdHVyZSB8fCAhc3RydWN0
dXJlLT5pc09iamVjdCgpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgIXN0cnVjdHVy
ZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBj
YXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCiAgICAgLy8gZW5v
dWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KICAgICBpZiAoR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMgPCA2CiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKICAgICAgICAgJiYgb2xkU3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRo
ZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCkBAIC0x
MDIwLDE0ICs5OTgsMTMgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHVi
QQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAogICAg
IGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0
cnVjdHVyZSkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YgorICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgeworICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3Mo
ZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAgICAg
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGlu
ZTsKQEAgLTEwODMsMTcgKzEwNjAsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNp
dGlvblN0dWJBCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKICAgICAK
LSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIG9sZFN0cnVjdHVyZS0+
c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwg
ZmFpbHVyZUNhc2VzLAotICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAKLSAgICBp
ZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAoKml0
KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwgZmFpbHVyZUNhc2VzLAotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
fQotICAgIH0KKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29u
ZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUjEpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgIApAQCAtMTIyOCw3ICsxMTk2LDcgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1
dFRyYW5zaXRpb25TdHViQQogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBz
dHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBp
ZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkKQEAgLTEyNTYsOCArMTIyNCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRU
cmFuc2l0aW9uU3R1YkEKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1
dGFibGUoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUp
OwotCi0gICAgcmV0dXJuIG9sZFN0cnVjdHVyZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0xMjgxLDEyICsxMjQ5LDExIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAoc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewogICAgICAgICBpZiAo
c2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewogCi0gICAgICAg
ICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdl
dE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQpOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUpCisgICAgICAgICAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9u
U3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQs
IG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHBy
b3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAg
ICAgIAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKICAgICAgICAgICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KApAQCAtMTI5NCw3ICsxMjYxLDcg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CiAgICAgICAgICAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1
dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3Ry
dWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7Cisg
ICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LCBwdXRLaW5kID09IERpcmVjdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KQEAgLTEzMTIsMjAgKzEyNzksMjIgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAmJiBzdHViSW5mby5w
YXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7CiAKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNo
YWluID0gMDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZSAh
PSBzbG90LmJhc2UoKSkgewotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVD
aGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LCBv
ZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNl
VmFsdWUpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwg
c2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7
Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNv
bmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9
IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCog
bGlzdDsKICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2lu
ZCwgc3R1YkluZm8pOwogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigK
LSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCks
IHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5k
Rm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0
LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
LApAQCAtMTMzNiw3ICsxMzA1LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
UHV0QnlJRAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAog
ICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAg
ICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0
QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1
YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTM4MCwxNyAr
MTM0OSwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAg
ICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAotICAgICAgICAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRP
bGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHVi
SW5mbywgcHV0S2luZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKSAKKyAgICAg
ICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJh
bnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHVi
SW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
cHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAg
ICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgICAgIGxp
c3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9u
KAogICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
Ci0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVD
aGFpbiwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwKICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICB9
IGVsc2UgewpAQCAtMTQyMywyMSArMTM5MSwyNCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5QnVpbGRQdXRCeUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xv
dC5pc0NhY2hlYWJsZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1v
ZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmU7Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAg
IHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkp
IHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFj
Y2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7
Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAg
ICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBi
YXNlVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAg
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAg
ICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFtZS5pbXBsKCkp
OworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBz
dHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBv
ZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogICAg
ICAgICAKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgbGlz
dCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwogCiAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMs
IGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywg
cHJvdG90eXBlQ2hhaW4sIGNvdW50LAorICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwg
cHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsCiAg
ICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+
Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLApAQCAtMTQ0OCw3ICsxNDE5LDcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3Mo
UHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0
QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAg
ICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVy
KCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
c2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwpAQCAtMTQ4NywxMSArMTQ1OCwxNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5UmVwYXRjaEluKAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CiAgICAgCi0gICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0SWdub3JlZDsKLSAgICBKU1ZhbHVlIGZvdW5kU2xvdEJhc2UgPSB3YXNGb3Vu
ZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKTsKLSAgICBzaXplX3QgY291bnQgPSAhZm91
bmRTbG90QmFzZSB8fCBmb3VuZFNsb3RCYXNlICE9IGJhc2UgPyAKLSAgICAgICAgbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIGZvdW5kU2xvdEJh
c2UsIGlkZW50LCBvZmZzZXRJZ25vcmVkKSA6IDA7Ci0gICAgaWYgKGNvdW50ID09IEludmFsaWRQ
cm90b3R5cGVDaGFpbikKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQ7CisgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0g
YmFzZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBz
bG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKGV4
ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwpAQCAtMTUx
Niw3ICsxNDkxLDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgCiAgICAgewpAQCAtMTU0Nywx
OCArMTUyMSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAg
ICAgIGlmIChzbG90LndhdGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2lu
dFNldCgpLT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAgICAg
ICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgICAgICBKU09iamVjdCog
cHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4
ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b3R5cGUt
PnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJvdG9TdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9j
aygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygpLm5l
d0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgICAgIHZtLT5y
ZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1YkluZm8uYWRkV2F0
Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisg
ICAgICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9rKCksIHN0dWJJbmZvLCBzdHVi
Sml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAgICAgICAKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmlu
dGVyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9w
cm90b3R5cGUocHJvdG90eXBlKQotewotICAgIEFTU0VSVChtX3Byb3RvdHlwZS5pc051bGwoKSB8
fCBtX3Byb3RvdHlwZS5pc09iamVjdCgpKTsKLSAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChw
cm90b3R5cGUpLT5zdHJ1Y3R1cmUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3Jl
ZFByb3RvdHlwZVN0cnVjdHVyZSgpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY3VycmVudCk7
Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkKQotICAgIDogbV9nbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBl
Rm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBpZiAobV9wcm90b3R5cGUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGFzT2Jq
ZWN0KG1fcHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1
cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJv
dG90eXBlU3RydWN0dXJlKQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2ds
b2JhbE9iamVjdCkpCi17Ci0gICAgbV92ZWN0b3IuYXBwZW5kKHByb3RvdHlwZVN0cnVjdHVyZSk7
Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWlu
KQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAs
IG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgY2hhaW4tPmhlYWQoKVtpXTsgKytpKQotICAgICAg
ICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVk
U3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3Vu
dCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAg
LCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQot
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBtX3Zl
Y3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0
dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCkKLXsKLX0KLQotYm9vbCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjppc1N0aWxsVmFsaWQoKSBjb25zdAotewotICAgIEpTVmFsdWUgY3Vy
cmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoYXNPYmplY3QoY3VycmVudFBy
b3RvdHlwZSktPnN0cnVjdHVyZSgpICE9IG1fdmVjdG9yW2ldKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0gbV92ZWN0b3JbaV0tPnN0b3JlZFBy
b3RvdHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjptYXRjaGVzKFN0cnVjdHVyZUNoYWluKiBjaGFpbikgY29uc3QKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1fdmVjdG9yW2ldICE9IGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChjaGFpbi0+aGVhZCgpW21fdmVjdG9yLnNp
emUoKV0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJbnRlcmNlcHRTdG9yZVRvKFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRy
aWJ1dGVzKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3Nv
cikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6
aXNOb3JtYWxpemVkKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZlY3Rvcltp
XTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHko
KQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKGF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSlNPYmpl
Y3QqIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIW1fdmVjdG9yLmlzRW1wdHkoKSk7Ci0gICAgaWYgKG1fdmVjdG9yLnNpemUo
KSA9PSAxKQotICAgICAgICByZXR1cm4gYXNPYmplY3QobV9wcm90b3R5cGUpOwotICAgIHJldHVy
biBhc09iamVjdChtX3ZlY3RvclttX3ZlY3Rvci5zaXplKCkgLSAyXS0+c3RvcmVkUHJvdG90eXBl
KCkpOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om9wZXJhdG9yPT0oY29uc3Qg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2xv
YmFsT2JqZWN0ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0Ci0gICAgICAgICYmIG1fcHJvdG90eXBl
ID09IG90aGVyLm1fcHJvdG90eXBlCi0gICAgICAgICYmIG1fdmVjdG9yID09IG90aGVyLm1fdmVj
dG9yOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmdhdGhlckNoZWNrcyhDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSBj
dXJyZW50UHJvdG90eXBlID0gbV9wcm90b3R5cGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gYXNP
YmplY3QoY3VycmVudFByb3RvdHlwZSk7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVj
dHVyZSA9IGF0KGkpOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKENvbnN0YW50U3RydWN0dXJlQ2hl
Y2soY3VycmVudE9iamVjdCwgY3VycmVudFN0cnVjdHVyZSkpOwotICAgICAgICBjdXJyZW50UHJv
dG90eXBlID0gY3VycmVudFN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2Jq
ZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkUG9pbnRlcigmbV9nbG9iYWxPYmplY3QpOwotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRWYWx1ZSgmbV9wcm90b3R5cGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmVjdG9yLnNp
emUoKTsgaS0tOykKLSAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1f
dmVjdG9yW2ldKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIDApOwotfQotCi12
b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KAotICAgICAg
ICAiKGdsb2JhbCA9ICIsIFJhd1BvaW50ZXIobV9nbG9iYWxPYmplY3QpLCAiLCBoZWFkID0gIiwK
LSAgICAgICAgaW5Db250ZXh0KG1fcHJvdG90eXBlLCBjb250ZXh0KSwgIiwgdmVjdG9yID0gWyIp
OwotICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV92ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1
bXBJbkNvbnRleHQobV92ZWN0b3JbaV0sIGNvbnRleHQpKTsKLSAgICBvdXQucHJpbnQoIl0pIik7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAx
ODcyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW5faAotI2RlZmluZSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLQotI2luY2x1
ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29k
ZUJsb2NrOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNs
YXNzIFZNOwotc3RydWN0IER1bXBDb250ZXh0OwotCi1jbGFzcyBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gewotcHVibGlj
OgotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKik7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUq
IHByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pOwot
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCk7Ci0gICAgfklu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oKTsKLSAgICAKLSAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNv
bnN0OwotICAgIGJvb2wgbWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiopIGNvbnN0OwotICAgIGJvb2wg
bWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICBib29sIGlz
Tm9ybWFsaXplZCgpOwotICAgIAotICAgIGJvb2wgdGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJl
UHJvcGVydHkoKTsKLSAgICAKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvdG90eXBlOyB9Ci0gICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3ZlY3Rvci5zaXplKCk7IH0KLSAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOyB9Ci0gICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgSlNPYmpl
Y3QqIHRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBsYXN0
KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IubGFzdCgpOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mKSBjb25zdDsKLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgZ2F0aGVyQ2hlY2tzKENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKSBjb25zdDsKLSAg
ICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
LCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0dsb2JhbE9iamVj
dCogbV9nbG9iYWxPYmplY3Q7Ci0gICAgSlNWYWx1ZSBtX3Byb3RvdHlwZTsKLSAgICBWZWN0b3I8
U3RydWN0dXJlKj4gbV92ZWN0b3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0
LDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRp
Y3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CiAgICAgYm9vbCBpc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgPT0gVW5j
YWNoZWREaWN0aW9uYXJ5S2luZDsgfQogICAKLSAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFy
eUtpbmQgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCk7IH0KKyAgICBi
b29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZAorICAgICAgICAgICAg
JiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkKKyAgICAgICAgICAgICYm
ICEodHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5l
d0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBw
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvLmhh
c0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpCisgICAgICAgICAgICAmJiB0eXBlSW5mby5uZXdJ
bXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKTsKKyAgICB9CiAKICAgICAvLyBXZSB1c2Ug
U2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBmb3Igc3RydWN0dXJlcyB0aGF0IG1heSBnZXQgbmV3
IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRvIHByZXZlbnQKICAgICAvLyBERkcgZnJvbSBpbmxp
bmluZyBwcm9wZXJ0eSBhY2Nlc3NlcyBzaW5jZSBzdHJ1Y3R1cmVzIGRvbid0IHRyYW5zaXRpb24g
d2hlbiBhIG5ldyBpbXB1cmUgcHJvcGVydHkgYXBwZWFycy4KQEAgLTIwMiw3ICsyMTQsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Q
cm9wZXJ0eVNsb3QoKTsKICAgICB9Ci0KKyAgICAKICAgICAvLyBUeXBlIGFjY2Vzc29ycy4KICAg
ICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0lu
Zm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZs
YWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlz
T2JqZWN0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24g
MTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBj
b3B5KQpAQCAtNTM4LDYgKzUzOCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGRpc2NhcmRBbGxDb2RlKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyV2F0Y2hwb2ludEZvcklt
cHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImLCBXYXRjaHBvaW50Kik7CisgICAgCiAgICAg
Ly8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBpdCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRp
Zmllci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0
IFN0cmluZyYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257395</attachid>
            <date>2015-07-23 15:43:05 -0700</date>
            <delta_ts>2015-07-23 19:34:09 -0700</delta_ts>
            <desc>so small patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>208193</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODcyNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01ODgsNiArNTkwLDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2
MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIy
MTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNG
RjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmNwcCAqLzsgfTsKKwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuY3BwICovOyB9OworCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9w
ZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJG
MDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5NCw2ICs3MDQsOCBA
QAogCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5
NkIgLyogREZHRWRnZS5jcHAgKi87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmNwcCAqLzsgfTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjRCNTIyMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBG
RjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZG
IC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4
RUJENTgwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8q
IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlG
RiAvKiB1ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICov
OyB9OwpAQCAtMTM4Nyw4ICsxMzk5LDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8q
IFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NC
QzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMx
OEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8q
IFNwaWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cCAqLzsgfTsKLQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFs
aXplci5oICovOyB9OwogCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5
NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg1MSw2
ICsxODYxLDggQEAKIAkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0Qg
LyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFC
NDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdN
aW5pZmllZEdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Qx
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBk
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVG
MCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
SmV0dGlzb25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkx
OEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM0
Miw2ICsyMzU0LDE0IEBACiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFM0ZGMUI2MThB
QUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZn
L0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQzRTQwNDFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9w
ZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2
QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdC
YXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFD
RjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21p
bmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NDMsNiArMjQ2Myw4IEBACiAJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9
IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0Rjgx
QUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDVBMUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBwYXRoID0gZGZn
L0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzMwMTU4
RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fz
c2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfZGVjb2RlLmM7IHBhdGggPSBkaXNhc3Nl
bWJsZXIvdWRpczg2L3VkaXM4Nl9kZWNvZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMxNTEsOCArMzE3Myw2IEBACiAJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQ
YXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4
NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZDMTc5NzM4QjgwMDlERjc0NCAvKiBERkdG
YWlsZWRGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRmFpbGVkRmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RDE3OTczOEI4MDA5REY3NDQg
LyogREZHRmFpbGVkRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ZhaWxlZEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RTE3OTczOEI4MDA5REY3NDQgLyog
REZHRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0ZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NjksOCArNDQ4OSw2IEBACiAJCQkJQTdBOEFGMkIxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLywKLQkJCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCi0JCQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUg
LyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAwODA2NkRE
IC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMTJCQkZGMzFCMDQ0QTk4MDA2NjRCNjkg
LyogSW50bE9iamVjdC5jcHAgKi8sCkBAIC00ODUzLDYgKzQ4NzEsMTAgQEAKIAkJCQlBNzA0RDhG
RjE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCAqLywK
IAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8s
CiAJCQkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLywK
KwkJCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8sCisJCQkJ
MEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAgKi8sCisJCQkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggKi8sCiAJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0FsbG9jYXRvci5oICovLAogCQkJCUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFs
eXNpcy5oICovLApAQCAtNTAxMiw2ICs1MDM0LDggQEAKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCiAJCQkJMEY4RjE0MzExQURGMDkwMTAwRUQ3
OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwICovLAogCQkJCTBGOEYxNDMyMUFERjA5
MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCisJCQkJMEZGMkNENTkx
QjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKKwkJCQkw
RkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywK
IAkJCQkwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCAq
LywKIAkJCQkwRkMzQ0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmgg
Ki8sCiAJCQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8sCkBAIC01MzE3LDYgKzUzNDEsMTAgQEAKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0ExNEY1
QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkx
NENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLywK
KwkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwICovLAorCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oICovLAorCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCisJCQkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8sCiAJCQkJOTY5QTA3OTQwRUQxRDNBRTAw
RjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8q
IE9wY29kZS5oICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5o
ICovLApAQCAtNTMyOCw2ICs1MzU2LDggQEAKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0
MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUzN0Yw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKKwkJCQkwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLAorCQkJCTBGRDNFNDA4MUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGOTMzMjk5MTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCkBAIC01ODI3LDYgKzU4NTcsNyBAQAogCQkJ
CUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRDQjlGRiAvKiBERkdEaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBF
MUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUz
NENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
LApAQCAtNjA3OSw2ICs2MTEwLDcgQEAKIAkJCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyog
Q29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4ODE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRj
aGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERG
R011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0
NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjA4OCw3ICs2MTIwLDYgQEAKIAkJCQlBN0E4
QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAotCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJu
YWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5
IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAx
MTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMDEsNiArNjEzMiw3IEBA
CiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjM5Niw5ICs2NDI4LDExIEBACiAJCQkJMkFBRDk2
NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0Nh
bGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyog
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThC
NDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0Iy
MjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIx
QjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1h
dGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcw
ODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NDc1LDYgKzY1MDksNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEg
LyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFD
MTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Bo
aUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYg
LyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MjY2LDYgKzczMDEsNyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlD
b25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJB
IC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1
MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3
ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTcyNzYsNiArNzMxMiw3IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZU
TExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3
RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZG
MkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3
MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMjYsNiArNzM2Myw3IEBA
CiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2Vu
dFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzMzNiw3ICs3Mzc0LDYgQEAKIAkJ
CQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAw
QkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNG
OTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJw
cmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8q
IEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNTMsNiArNzM5MCw3
IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82
NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nl
c3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjAwLDYgKzc2Mzgs
NyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWlu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwQjFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzAxM0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4RiAv
KiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MDksNiArNzY0OCw3
IEBACiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRl
bXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE4RDNDRjFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJh
dG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ6OmZpcgogICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAKICAgICBtX2NvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgcmVtb3ZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBs
ZXhHZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKICAgICAvLyBo
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0CkBAIC00
MCwzMiArNDAsMjYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdQog
ICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
OworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAogICAg
IENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJbmxpbmVhYmxl
OwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAgIHJlc3VsdC5t
X2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3VudCkpOworICAg
IGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJlc3VsdC5tX2No
YWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25kaXRpb25TZXQu
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4gc2tpcCgpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWluLT50YWtlc1Ns
b3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRha2Vz
U2xvd1BhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0g
cmVzdWx0Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSog
Y3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAgICAgIAotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOworICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0
eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmli
dXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7Ci0gICAgfQor
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAg
ICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKICNkZWZp
bmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3RhdHVzKCkKICAg
ICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zm
c2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAgICAgfQogICAg
IApAQCAtOTcsMjEgKzk2LDE3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIENv
bXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAg
ICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KLSAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmlj
VmFsdWU7IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFpbi5nZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAog
cHJpdmF0ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
LSAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7
Ci0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYs
OCArMjA2LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJ
ZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVj
dHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4o
KSwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVz
Lm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlv
blNldCgpLCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAg
ICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQp
Ci0gICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNv
bmRpdGlvblNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0
dXMoV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlm
IChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNo
YWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1f
Y29uc3RhbnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRC
eUlkVmFyaWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBA
IEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50
JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikK
IHsKICAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29u
c3RhbnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFz
ZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1f
Y29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1h
a2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03
MiwxNiArNjcsNiBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZhcmlhbnQ6OmJhc2VT
dHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KIGJvb2wg
R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhl
cikKIHsKICAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZSkK
QEAgLTkwLDEwICs3NSwxMyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFh
cmVDb21wYXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldCA9
CisgICAgICAgIG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQp
OworICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2Nv
bnN0YW50Q2hlY2tzKTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTIsOCArMTAwLDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
IlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsK
KyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBpZiAobV9hbHRlcm5hdGVC
YXNlKQogICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChK
U1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3
ICs0Myw3IEBAIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFy
aWFudCgKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1
cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKLSAgICAgICAg
Y29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBudWxscHRyLAorICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzID0gbnVsbHB0cik7CiAgICAgCiAgICAgfkdldEJ5SWRWYXJpYW50KCk7CkBAIC01NSw5
ICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
aXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9Ci0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdCB7IHJldHVybiBt
X2FsdGVybmF0ZUJhc2U7IH0KLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0
OworCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIGEgY29uZGl0aW9uIHNldCBtZWFucyB0aGF0IHRo
aXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAg
ICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICAKQEAgLTcwLDggKzcxLDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgR2V0QnlJZFN0YXR1czsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQg
bV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0
YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9v
ZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3Rh
dHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQu
cHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91
dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZShtX29iamVjdCksIGNvbnRleHQpLCAiOiAiLCBpbkNv
bnRleHQobV9jb25kaXRpb24sIGNvbnRleHQpKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisg
ICAgU3RydXR1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24u
aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydXRjdXJlRW5zdXJlc1ZhbGlk
aXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3Qt
PnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRp
dHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QK
K3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0
cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZh
bGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlv
bi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBtX29iamVjdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQobV9v
YmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKTsKK30KKworYm9v
bCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhaWRpdHkoKSBjb25z
dAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5
Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBQcm9wZXJ0
eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgp
LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJs
ZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJp
bGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0
Y2hhYmxlKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBl
ZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9y
dCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKCFIZWFwOjppc01hcmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZl
cmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52
YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3Bl
cnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAg
ICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAg
ICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9v
YmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdp
dGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
eworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVy
dHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0
ZXMpOyAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNl
V2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJh
cnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAg
cmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2UodWlkLCBwcm90
b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVj
dCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIp
OworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90
b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29i
amVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25k
aXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCog
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOwor
ICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQs
IHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3Qg
PSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9u
OjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
ZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxl
bmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisg
ICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJv
cGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0K
KyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0
IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5z
aWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJp
YnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25k
aXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9v
bCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWly
ZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkg
KyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29u
ZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmpl
Y3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAg
CisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRp
Y2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJl
bnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cg
dG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
IGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwg
d2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBj
YXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAg
Ly8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2Vu
Y2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50
aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4K
KyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1
aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9
CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9u
YWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1
Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwg
dGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0
IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9y
IHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9p
ZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0
cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZh
bGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0
LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3Jk
aW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKworICAgIC8v
IENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkgY29uc2VydmF0aXZlbHkg
cmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0cnVjdHVyZSBhbG9uZSBk
b24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiB0
cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJlcyBzb21lIHdhdGNocG9p
bnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhlCisgICAgLy8gc3Ry
dWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9uIGhvbGRzIGJ5IHVz
aW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVjdHVyZUVuc3VyZXNWYWxp
ZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJv
b2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hvcnRoYW5kIGZvciBjb25k
aXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29sIHN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxs
IHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0
aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBp
bXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFBy
b3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6
TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmls
aXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9y
Y2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJl
KiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxl
KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVy
dHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hp
bmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVyaWVzU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24o
KS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBz
dGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBt
X2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2lu
ZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhp
cykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAg
IG51bUZvdW5kKys7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91
bmQgPT0gMSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6YXJlQ29tcGF0aWJsZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGEgOiAqdGhpcykgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBiIDogb3RoZXIpIHsKKyAgICAgICAgICAgIGlmICghYS5pc0NvbXBhdGlibGVX
aXRoKGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFv
dGhlci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHko
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3Ro
ZXIpIHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3Rp
bmdDb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXND
b21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub25FbXB0eShyZXN1bHQpOworfQorCitib29s
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBj
b25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRo
aXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAo
IWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlv
bi52YWxpZGl0eVJlcXVyaWVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExpdmUoKSBjb25zdAoreworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAg
ICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnBy
aW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgb3V0LnByaW50KGxpc3REdW1wSW5D
b250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCJdIik7Cit9
CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK25hbWVz
cGFjZSB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0aW9uKAorICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7CisgICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgIGlmIChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnBy
ZXNlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAg
fQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6IHsKKyAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKAorICAgICAgICAgICAgdm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkpOwor
ICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAg
ICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIoCisg
ICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5z
dG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbigpOworICAgIH0KK30KKworZW51bSBDb25jdXJyZW5jeSB7CisgICAgTWFpblRocmVhZCwK
KyAgICBDb25jdXJyZW50Cit9OworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVD
b25kaXRpb25zKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgSlNPYmplY3QqIHByb3RvdHlw
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCwK
KyAgICBDb25jdXJyZW5jeSBjb25jdXJyZW5jeSA9IE1haW5UaHJlYWQpCit7CisgICAgQVNTRVJU
KCEhcHJvdG90eXBlID09IChjb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNl
KSk7CisgICAgCisgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBjb25kaXRpb25z
OworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgp
KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KCk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2LmlzTnVs
bCgpKSB7CisgICAgICAgICAgICBpZiAoIXByb3RvdHlwZSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxp
ZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4odik7CisgICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJl
KHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3Rv
dHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQgbm90IGJlCisg
ICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IE1haW5U
aHJlYWQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIHRoaXNDb25kaXRpb25L
aW5kOworICAgICAgICBpZiAoa2luZCA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UgJiYg
b2JqZWN0ICE9IHByb3RvdHlwZSkKKyAgICAgICAgICAgIHRoaXNDb25kaXRpb25LaW5kID0gUHJv
cGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXND
b25kaXRpb25LaW5kID0ga2luZDsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIG5ld0NvbmRpdGlvbiA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwg
b3duZXIsIG9iamVjdCwgdWlkLCB0aGlzQ29uZGl0aW9uS2luZCk7CisgICAgICAgIGlmICghbmV3
Q29uZGl0aW9uIHx8ICFuZXdDb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6aW52YWxpZCgpOworICAgICAgICAKKyAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQo
bmV3Q29uZGl0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvYmplY3QgPT0gcHJvdG90eXBl
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8vIFZhbGlkYXRlIHRoZSBy
ZXN1bHQuCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgcHJlc2VuY2VDb3VudCA9IDA7CisgICAgICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlv
bnMpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICAg
ICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICAgICAgcHJl
c2VuY2VDb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChw
cmVzZW5jZUNvdW50ID09IDEpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDog
eworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiBjb25kaXRpb25zKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLmtpbmQo
KSA9PSBraW5kKTsKKyAgICB9IH0KKyAgICAKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlvbnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwKKyAgICAg
ICAgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6
QWJzZW5jZU9mU2V0dGVyKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUG90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVj
dCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJu
IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlwZSwgdWlkLAorICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisg
ICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRl
Q29uZGl0aW9ucygKKyAgICAgICAgdm0sIG51bGxwdHIsIGdsb2JhbE9iamVjdCwgaGVhZFN0cnVj
dHVyZSwgbnVsbHB0ciwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZWNlT2ZTZXR0ZXIsCisg
ICAgICAgIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKyNkZWZpbmUgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCIKKyNpbmNsZHVlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
QW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhl
IHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVlZCB0byBiZSBtZXQgZm9y
IHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2FuIGhhdmUgdGhlIGZvbGxv
d2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5OiBUaGVyZSBhcmUgbm8g
c3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisvLyBJbnZhbGlkOiBUaGUg
aGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6IFRoZXJlIGFyZSBzb21l
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdmFsaWQuCisKK2NsYXNz
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9yPE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICAqcmVzdWx0Lm1f
ZGF0YS0+dmVjdG9yID0gdmVjdG9yOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Rh
dGEgfHwgIW1fZGF0YS0+dmVjdG9yLmlzRW1wdHkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhOworICAgIH0KKyAg
ICAKKyAgICB0eXBlZGVmIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKiBpdGVyYXRvcjsK
KyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
ZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRh
LT52ZWN0b3IuYmVnaW4oKTsKKyAgICB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5lbmQoKTsKKyAgICB9CisgICAgCisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gZm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0OworICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvckNvbmRpdGlvbktpbmQoUHJvcGVydHlDb25kaXRp
b246OktpbmQpIGNvbnN0OworICAgIAorICAgIC8vIElmIHRoaXMgaXMgYSBjb25kaXRpb24gc2V0
IGZvciBhIHByb3RvdHlwZSBoaXQsIHRoZW4gdGhpcyBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB0
aGUKKyAgICAvLyBjb25kaXRpb24gb24gdGhlIHByb3RvdHlwZSBpdHNlbGYuIFRoaXMgYWxsb3dz
IHlvdSB0byBnZXQgdGhlIG9iamVjdCwgb2Zmc2V0LCBhbmQKKyAgICAvLyBhdHRyaWJ1dGVzIGZv
ciB0aGUgcHJvdG90eXBlLiBUaGlzIHdpbGwgUkVMRUFTRV9BU1NFUlQgdGhhdCB0aGVyZSBpcyBl
eGFjdGx5IG9uZSBQcmVzZW5jZQorICAgIC8vIGluIHRoZSBzZXQsIGFuZCBpdCB3aWxsIHJldHVy
biB0aGF0IHByZXNlbmNlLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNsb3RCYXNlQ29u
ZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbiBzZXRzIGFyZSBjb21w
YXRpYmxlIGlmIHRoZXkgYXJlIGJvdGggdmFsaWQgYW5kIGVhY2ggY29uZGl0aW9uIGluICp0aGlz
IGlzCisgICAgLy8gY29tcGF0aWJsZSB3aXRoIGVhY2ggY29uZGl0aW9uIGluIG90aGVyLgorICAg
IGJvb2wgYXJlQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IG90aGVyKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhIG5ldyBjb25k
aXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0aGUgb3RoZXIgb25lLiBUaGlzIHdp
bGwKKyAgICAvLyBmYWlsIGlmICF0aGlzLmFyZUNvbXBhdGlibGVXaXRoKG90aGVyKS4gV2hlbiBp
dCBmYWlscywgaXQgcmV0dXJucyBpbnZhbGlkKCkuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbWVyZ2VkV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIp
IGNvbnN0OworICAgIAorICAgIGJvb2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkgY29uc3Q7
CisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgYXJlU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBIZWxwZXJz
IGZvciB1c2luZyB0aGlzIGluIGEgdW5pb24uCisgICAgdm9pZCogcmVsZWFzZVJhd1BvaW50ZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihtX2RhdGEubGVha1Jl
ZigpKTsKKyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGFkb3B0
UmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYo
c3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGZyb21SYXdQb2lu
dGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBzdGF0aWNfY2FzdDxEYXRh
Kj4ocmF3UG9pbnRlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICAvLyBJbnRlcm5hbGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1c2luZyBh
IHBvaW50ZXIgdG8gYSBEYXRhIHRoYXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKyAgICAKKyAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcGFjdCBieSBoYXZpbmcgaXQgaW50
ZXJuYWxseSB1c2UgYSB2ZWN0b3IgdGhhdCBqdXN0IGhhcworICAgIC8vIHRoZSBub24tdWlkIHBv
cnRpb24gb2YgT2JqZWN0UHJvcGVydHlDb25kaXRpb24sIGFuZCB0aGVuIHJlcXVpcmluZyB0aGF0
IHRoZSBjYWxsZXJzIG9mIGFsbAorICAgIC8vIG9mIHRoZSBBUElzIHN1cHBseSB0aGUgdWlkLgor
ICAgIAorICAgIGNsYXNzIERhdGEgOiBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9CisgICAg
ICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsKKyAg
ICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBl
LAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHko
CisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhl
YWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywx
NCArMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nl
c3MoCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQpCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fY2hhaW5Db3VudChjaGFpbkNvdW50
KQogICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRp
dGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQog
ewotICAgIGlmIChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7
CiB9CiAKIEdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcxLDcgKzcwLDcgQEAg
Ym9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogewogICAgIGlmIChtX3N0
cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4u
Z2V0KCkpKQorICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNTdGlsbExpdmUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hC
dWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlz
aW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEzICs1MywxMiBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgR2V0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAg
ICAgICwgbV9jaGFpbkNvdW50KDApCiAgICAgewogICAgIH0KICAgICAKICAgICBHZXRCeUlkQWNj
ZXNzKAogICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8
SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogPSAw
LCB1bnNpZ25lZCBjaGFpbkNvdW50ID0gMCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwogICAgIAogICAg
IH5HZXRCeUlkQWNjZXNzKCk7CiAgICAgCkBAIC03Miw4ICs3MSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4g
bV9jaGFpbi5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX2NoYWluQ291bnQ7IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAg
ICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAgLTkxLDkgKzg5
LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgIAogICAgIEFj
Y2Vzc1R5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsKICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9jb25kaXRpb25T
ZXQ7IC8vIEZJWE1FIHdoYXQgYWJvdXQgYmFycmllcnM/CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNp
b24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw4IEBA
IFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKICAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5
RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKTsKICAg
ICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uY29weUZyb20oc3R1
YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIoCisg
ICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTY0LDYgKzY1LDkgQEAgUHV0QnlJZEFjY2VzcyBQ
dXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogCiBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2Vh
ayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBjb25zdAogeworICAgIGlmICghbV9jb25k
aXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgUmVwbGFjZToKICAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCkBAIC03NCwxNSArNzgsMTEgQEAgYm9v
bCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fbmV3U3RydWN0dXJlLmdldCgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtl
ZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CiAgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFp
bi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgIAogICAgIFB1dEJ5SWRBY2Nlc3MoKQogICAg
ICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudChVSU5UX01BWCkK
ICAgICB7CiAgICAgfQogICAgIApAQCAtNjIsMTQgKzYxLDE0IEBAIHB1YmxpYzoKICAgICAgICAg
SlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
CiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsK
ICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBU
cmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwg
b2xkU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2bSwgb3duZXIs
IGNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owog
ICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwogICAgICAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTUsOCAr
OTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAg
ICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAogICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CkBAIC0xMDQsMTAg
KzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgICAg
ICByZXN1bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAg
ICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Ci0gICAgICAgICAg
ICByZXN1bHQubV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKLSAgICAgICAgfQorICAgICAgICBy
ZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1
c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUg
PSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0NiwxNyArMTQxLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQog
ICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAg
ICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGNoYWlu
Q291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0dGVyKCkgfHwgaXNDdXN0
b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluQ291bnQ7Ci0gICAgfQorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBt
X2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgp
IGNvbnN0CiAgICAgewpAQCAtMTc4LDggKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzVHlw
ZSBtX3R5cGU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1Y3R1cmU7CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQcm9wZXJ0
eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgi
PGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50
KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNl
IFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBtX29mZnNldCwgIiB3aXRoIGF0
dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJz
ZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0
aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTT2JqZWN0KHByb3RvdHlwZSgpKSwgY29udGV4dCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnBy
aW50KCIgd2l0aCAiLCBpbkNvbnRleHQoSlNWYWx1ZTo6ZW5jb2RlKHJlcXVpcmVkVmFsdWUoKSks
IGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQor
Citib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2Up
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2Ug
UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVudE9mZnNldCAh
PSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJp
YnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJl
KCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhl
CisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJhY3ks
IGFuZCBtYXliZSBtb3JlIHJpc2t5IHRoYW4gd2Ugd2FudC4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQorICAgICAgICAKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUgPSBiYXNlLT5nZXREaXJlY3Qo
Y3VycmVudE9mZnNldCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gcmVxdWlyZWRWYWx1
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6
CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJh
c2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1l
IHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNhbiBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwg
YW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRvdyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24g
dGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBhZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAg
Ly8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZlY3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1w
dXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIgc2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZh
bGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNv
bnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZh
cmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVz
IHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRo
ZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAgICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0
IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFibGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UK
KyAgICAgICAgLy8gc2hvbGRuJ3QgaGF2ZSBhIFRPQ1RPVSByYWNlIGVpdGhlci4KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICAKKyAgICAg
ICAgV2F0Y2hwb2ludFNldCogc2V0OworICAgICAgICBzd2l0Y2ggKGVmZm9ydCkgeworICAgICAg
ICBjYXNlIE1ha2VOb0NoYW5nZXM6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPnByb3Bl
cnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbnN1cmVXYXRjaGFiaWxpdHk6CisgICAgICAgICAgICBzZXQgPSBzdHJ1
Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KAorICAgICAgICAgICAgICAg
ICpIZWFwOjpoZWFwKHN0cnVjdHVyZSktPnZtKCksIG9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFzZXQtPmlzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAor
eworICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVj
dHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJl
LCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9y
dCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sK
KyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkK
KyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKS5p
c0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2Vs
bCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tl
ZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpKQor
ICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFzUmVx
dWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQgY29u
ZGl0aW9uKQoreworICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNl
OgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQu
cHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2Ui
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIFBy
b3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2Vz
OworCitjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsK
KyAgICAgICAgUHJlc2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VPZlNl
dHRlciwKKyAgICAgICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0
aGlzIHdpbGwgYmUgYSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJl
IHRyYW5zaXRpb25zLCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0
aGUgbmV3IHN0cnVjdHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKCkK
KyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkKKyAg
ICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAg
UHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgeworICAg
ICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29u
ZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1
bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9w
ZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1
cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAg
ICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90
b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJl
dHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJp
ZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRlcjsK
KyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlv
biBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNldHRl
cldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQuZXF1aXZhbGVu
Y2UudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVy
KHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIAorICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wgaGFzT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2UgfTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09m
ZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBi
b29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQ
cmVzZW5jZSB9OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0F0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLmF0
dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyBy
ZXR1cm4gISEqdGhpcyAmJiAobV9raW5kID09IEFic2VuY2UgfHwgbV9raW5kID09IEFic2VuY2VP
ZlNldHRlcik7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNQcm90b3R5cGUoKSk7CisgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJv
dG90eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsgfQorICAgIEpTVmFsdWUg
cmVxdWlyZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUmVxdWlyZWRW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWU7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0
ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9raW5kKTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQ
cmVzZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAg
ICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFi
c2VuY2UucHJvdG90eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2
YWxlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1
LmVxdWl2YWxlbmNlLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91
aWQgIT0gb3RoZXIubV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAg
ICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0Cisg
ICAgICAgICAgICAgICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2Vu
Y2UuYXR0cmlidXRlczsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2Vu
Y2VPZlNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90
aGVyLnUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAg
ICAgICAgICByZXR1cm4gYS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNl
LnZhbHVlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1f
a2luZCA9PSBBYnNlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUg
Y29tcGF0aWJsZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZm
ZXJlbnQgdWlkcy4gSWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVj
aWRlIGhvdyB0byByZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
CisgICAgLy8gYSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2Vz
IHlvdSdsbCB3YW50IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGlu
IG90aGVyIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRo
aXMgd2lsbCBhbHNvIHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlr
ZSBQcmVzZW5jZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGlu
dmFsaWQKKyAgICAvLyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcu
CisgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkg
IT0gb3RoZXIudWlkKCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0
J3Mgc3RydWN0dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRl
ZC4KKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQg
dG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdU
b1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENo
ZWNrcyBpZiB0aGUgY29uZGl0aW9uIGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdp
dmVuIG9iamVjdCBhbmQgc3RydWN0dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1
cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50
ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29u
ZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRp
ZXMuIElmIHRoZSBvYmplY3QgaXMgbm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBp
bmRpY2F0ZXMgdGhhdCBjaGVja2luZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVu
IHN0cnVjdHVyZSBndWFyYW50ZWVzIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9i
amVjdCBpcworICAgIC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBv
dGhlciB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBj
b25kaXRpb24gaW4gYWRkaXRpb24gdG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlz
U3RpbGxWYWxpZChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0Owor
ICAgIAorICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJs
ZSwgYnV0IGNvdWxkIGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFw
cHJvcHJpYXRlIHdhdGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50
cyBhcmUgZW5hYmxlZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24g
dGhlIHByb3BlcnR5IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNw
YWNlIGZvcgorICAgIC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQg
bmV2ZXIgZ2V0IHZlcnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFi
bGUgd2F0Y2hpbmcsIHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQuCisgICAgZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlz
IHRoZSBkZWZhdWx0LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2Yg
YW55IFN0cnVjdHVyZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYg
dGhlIHByb3BlcnR5IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1h
a2UKKyAgICAgICAgLy8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5n
IGZyb20gYSBKSVQgdGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJl
ZmVyYWJsZSB3aGVuIGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24g
Zm9yIHRoZSBmaXJzdCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2lu
dCBmaXJlIHRoYXQgY2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBh
CisgICAgICAgIC8vIHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGlu
ZyBpbXBsaWVzIHRoYXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0
IHRvIG1ha2UgaXQgcHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5n
IHdhdGNoZWQgbWF5IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVm
ZXIgdG8gb25seSBhc3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJl
ZW4KKyAgICAgICAgLy8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAg
ICBNYWtlTm9DaGFuZ2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0
byBlbnN1cmUgdGhhdCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhh
cyBubworICAgICAgICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVz
dCBtZWFucyB0aGF0IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyBy
ZXBsYWNlbWVudCB3YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxl
ZCBhbHJlYWR5LiBEbyBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywg
c2luY2UgdGhlIGFjdCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUu
CisgICAgICAgIEVuc3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkg
Ynkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1
cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wg
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3Ry
dWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBN
YWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBz
dGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJh
bnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlz
V2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIs
IFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJv
b2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9m
IG91ciBjb25kaXRpb25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9v
bCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMg
YXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAg
IHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBX
YXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlk
OworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFs
ZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0
IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25I
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwxOCBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCi0gICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
LSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IGludGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENo
YWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywg
c3RydWN0dXJlLCBjaGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9w
Y29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0
aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsX291dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzb25jdXJyZW50bHko
CisgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHByb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOworICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
c3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGludGVuZGVkQ2hhaW4uZ2V0KCksIG9mZnNldCk7Cisg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0
dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBt
YXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0x
NjUsMTYgKzE2NCwxNCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAogICAgICAgICAgICAgc3R1YkluZm8t
PnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAg
ICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgUmVmUHRyPElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT51
LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKSB7Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9w
dFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJv
ZmlsZWRCbG9jaywgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1
cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0
aW9uLmNoYWluLmdldCgpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRy
YW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBj
aGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNl
dCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgfQpAQCAtMjE5LDE1ICsyMTYsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJl
KCktPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhz
bG93UGF0aFN0YXRlKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gY2hhaW47Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hh
aW4oCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBhY2Nlc3Mub2xkU3Ry
dWN0dXJlKCksIGFjY2Vzcy5jaGFpbigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2hh
aW4tPmlzU3RpbGxWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwg
Y2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1
Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBA
IC0yNTMsNyArMjQ2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ss
ICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojpz
ZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0
dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0
YXR1cy5jb25kaXRpb25TZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShj
YWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzY4LDIyICszNjEsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgp
KQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAg
Ci0gICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAgICBpZiAoIWlz
RGlyZWN0KSB7Ci0gICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAg
ICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFkLW9ubHkgcHJv
cGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNl
cHRTdG9yZVRvKHVpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBj
aGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9yIGRp
Y3Rpb25hcmllcykKLSAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhlIGRpY3Rpb25hcnkg
Y2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbm90IGJlZW4KLSAg
ICAgICAgICAgIC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0cmFuc2l0aW9uLiBB
bmQgcmVhbGx5IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKLSAgICAgICAgICAgIC8vIGJh
aWwgaGVyZSBpcyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9wdGlt
aXppbmcgSklUIGdvIGFuZCBmbGF0dGVuCi0gICAgICAgICAgICAvLyBkaWN0aW9uYXJpZXMgaWYg
d2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3ZXJlIG5ldmVy
IHVzZWQgYXMKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUgcHJvdG90
eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBvZgotICAg
ICAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwuCi0gICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6ZWQoKSkKKyAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgICAgICB9CiAgICAgCkBAIC0zOTQsNyArMzc2LDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQu
YXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4uZ2V0KCksIG9mZnNldCkpOworICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRp
b25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNp
b24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0
QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9raW5kID0gb3RoZXIubV9raW5kOwogICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CiAgICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9j
b25zdGFudENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJh
c2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29m
ZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQog
ICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1
cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNjQsMjkgKzYzLDI2IEBAIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGMKIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gVHJhbnNpdGlvbjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7
CiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgIGlmIChzdHJ1
Y3R1cmVDaGFpbikKLSAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQu
bV9jb25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gU2V0dGVyOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBp
ZiAoY2hhaW4pIHsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9jb25zdGFu
dENoZWNrcyk7Ci0gICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBjaGFpbi0+dGVybWlu
YWxQcm90b3R5cGUoKTsKLSAgICB9CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxs
TGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTEzNCwxNiArMTMwLDEyIEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMo
KSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQg
UHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAorSlNPYmplY3QqIFB1dEJ5SWRW
YXJpYW50OjphbHRlcm5hdGVCYXNlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoa2luZCgpID09IFNl
dHRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBz
dHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZv
cihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2tpbmQgPT0gU2V0dGVyKTsKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VD
b25kaXRpb24oKS5vYmplY3QoKTsKIH0KIAogYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRv
TWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQpAQCAtMTk2LDYgKzE4OCw3IEBAIGJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAg
ICBBU1NFUlQoIXJlcGxhY2UuY29uZGl0aW9uU2V0KCkpOwogICAgIAogICAgIC8vIFRoaXMgc29y
dCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNo
IHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAogICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVy
ZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlz
IGRvZXNuJ3QKQEAgLTIzMiwxMyArMjI1LDEzIEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQoUHJpbnQKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0
aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAg
ICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIs
IFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29u
dGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29u
dGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
Ij4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoKICAgICAg
ICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29u
c3RhbnRDaGVja3MoKSwgY29udGV4dCksICJdIik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9j
b25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNl
KQogICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQo
SlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgi
LCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAgICAgICAgOiBt
X2tpbmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCi0gICAgICAg
ICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9m
ZnNldCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYgKzUzLDE1IEBAIHB1YmxpYzoKICAgICBQdXRC
eUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBv
cGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFy
aWFudCByZXBsYWNlKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShj
b25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xk
U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAg
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwogICAgIAogICAg
IEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIApAQCAtMTAwLDEwICs5
OCw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAg
IGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7
IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTEx
MSwxMyArMTA2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAgfQog
ICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fYWx0ZXJuYXRlQmFz
ZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsK
KyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0OwogICAgIAogICAgIENhbGxMaW5r
U3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewpAQCAtMTM2LDggKzEyNSw3IEBA
IHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0
dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0
ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAg
ICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDYsMjQgKzQ2LDI5IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFN0
cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJu
YWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1
c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KLSAg
ICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0
IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNh
bCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0gICAgbV9o
b2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAg
aWYgKCFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmls
aXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVt
aXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAgICAvLyBUaGF0
IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhl
IHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9y
IGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAgICAgICBtX2hv
bGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCkt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKQogewogfQogCi1T
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCog
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFkKTsKIH0KIAog
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJlZlB0cjxXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9jayogY29kZUJs
b2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7CiAg
ICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVmKG5ldyBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykpOwpAQCAtNzIs
NyArNzcsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvCiAgICAg
ICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAgcmV0dXJuIGhv
bGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSArNDcsMTEgQEAg
Y2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQotICAg
ICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9s
ZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAgIDogbV9rZXko
a2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25leHQoV1RGOjpt
b3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKICAgICBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpAQCAtODMsMTEg
KzgxLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0
Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgc3Rh
dGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFk
ZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKik7
CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgsMTIgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoK
ICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKICAgICBj
YXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhh
dmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgsMTAgQEAgYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJh
bnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjpp
c01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAg
IHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAg
ICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHUu
cHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8g
UHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQ
dXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNE
aXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50
ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc1
LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwog
ICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRk
V2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKICAgICB7CiAgICAg
ICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5j
ZUFuZEFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0
aGlzKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRpdGlv
bik7CiAgICAgfQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpAQCAtMjE3LDIzICsyMTgs
MTIgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAgICAgICB9IGdldEJ5SWRT
ZWxmOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1
Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFN0cnVjdHVyZT4gcHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVj
dDsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAg
ICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgOiAxOwot
ICAgICAgICB9IGdldEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFBv
bHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0QnlJZExpc3Q7CiAgICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJl
dmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
c3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4g
Y2hhaW47CisgICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7CiAgICAgICAgIH0gcHV0
QnlJZFRyYW5zaXRpb247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpF
cXVpdmFsZW5jZSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJs
ZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRp
b25XYXRjaHBvaW50KCZtX3N0cnVjdHVyZVdhdGNocG9pbnQpOworICAgIAorICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IG1fa2V5LT5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENvbmN1cnJl
bnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXkub2JqZWN0
KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQp
OworICAgIHNldC0+YWRkV2F0Y2hwb2ludCgmbV9wcm9wZXJ0eVdhdGNocG9pbnQpOworfQorCit2
b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6ZmlyZShjb25zdCBG
aXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgLy8gT25lIG9mIHRoZSB3YXRjaHBvaW50cyBmaXJl
ZCwgYnV0IHRoZSBvdGhlciBvbmUgZGlkbid0LiBNYWtlIHN1cmUgdGhhdCBuZWl0aGVyIG9mIHRo
ZW0gYXJlCisgICAgLy8gaW4gYW55IHNldCBhbnltb3JlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdz
IGJ5IGFsbG93aW5nIHVzIHRvIHJlaW5zdGFsbCB0aGUgd2F0Y2hwb2ludHMKKyAgICAvLyB3aGVy
ZXZlciBmcm9tIHNjcmF0Y2guCisgICAgaWYgKG1fc3RydWN0dXJlV2F0Y2hwb2ludC5pc09uTGlz
dCgpKQorICAgICAgICBtX3N0cnVjdHVyZVdhdGNocG9pbnQucmVtb3ZlKCk7CisgICAgaWYgKG1f
cHJvcGVydHlXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fcHJvcGVydHlXYXRjaHBv
aW50LnJlbW92ZSgpOworICAgIAorICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNv
bmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2Vt
Ymx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2lu
dCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91
dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7Cisg
ICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7
CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0
dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0
YWlsKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6
OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWls
JiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAor
ICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fc3RydWN0
dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOwor
fQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6UHJvcGVy
dHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWls
KQoreworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3Byb3BlcnR5V2F0Y2hw
b2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMp
IC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRj
aHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7
IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBTdHJ1
Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmly
dHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAg
fTsKKyAgICBjbGFzcyBQcm9wZXJ0eVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7Cisg
ICAgcHVibGljOgorICAgICAgICBQcm9wZXJ0eVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYp
IG92ZXJyaWRlOworICAgIH07CisgICAgCisgICAgdm9pZCBmaXJlKGNvbnN0IEZpcmVEZXRhaWwm
KTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnQgbV9zdHJ1Y3R1cmVXYXRj
aHBvaW50OworICAgIFByb3BlcnR5V2F0Y2hwb2ludCBtX3Byb3BlcnR5V2F0Y2hwb2ludDsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LndhdGNoaW5nUmVxdXJpZXNTdHJjdXR1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgha2V5LndhdGNo
aW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tl
eS5pc1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCkt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sK
KyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNo
YWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGRh
dGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlz
KSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgfQorICAg
IAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFkYXB0YXRpb24g
b2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0cmluZ0ZpcmVE
ZXRhaWwgZGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAgIG1fY29kZUJs
b2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVk
V2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
OyB9CisgICAgCisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsMTEg
QEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJv
b2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRl
cm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcyk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2Rl
KiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3Ry
dWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5v
ZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0
QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBO
b2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9
IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAgICBOb2RlKiBsb2FkKE5vZGUqIGJhc2UsIGNvbnN0IEdl
dEJ5SWRWYXJpYW50JiB2YXJpYW50KTsKKyAgICAgICAgCiAgICAgdm9pZCBoYW5kbGVHZXRCeUlk
KAogICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZSog
YmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICAgICAgY29uc3QgR2V0QnlJZFN0
YXR1cyYpOwpAQCAtMjEyLDcgKzIxNiwyOSBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlUHV0
QnlJZCgKICAgICAgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9k
ZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0KTsK
LSAgICB2b2lkIGVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYp
OworICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBi
YXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBv
aW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uIFJldHVybnMgZmFsc2UgaWYg
dGhlCisgICAgLy8gY29uZGl0aW9uIG5vIGxvbmdlciBob2xkcywgYW5kIHRoZXJlZm9yZSBubyBy
ZWFzb25hYmxlIGNoZWNrIGNhbiBiZSBlbWl0dGVkLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3
YXRjaHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uIEl0IG11c3QgYmUg
YSBQcmVzZW5jZQorICAgIC8vIGNvbmRpdGlvbi4gSXQgd2lsbCBhdHRlbXB0IHRvIHByb21vdGUg
YSBQcmVzZW5jZSBjb25kaXRpb24gdG8gYW4gRXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8v
IEVtaXRzIGNvZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUgdGhhdCB0aGUgY29uZGl0aW9uIGd1YXJk
cywgYW5kIHJldHVybnMgYSBub2RlIGNvbnRhaW5pbmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVl
LiBSZXR1cm5zIG51bGwgaWYgdGhlIGNvbmRpdGlvbiBubyBsb25nZXIgaG9sZHMuCisgICAgTm9k
ZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBO
b2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAgICAvLyBDYWxscyBjaGVjaygpIGZvciBl
YWNoIGNvbmRpdGlvbiBpbiB0aGUgc2V0OiB0aGF0IGlzLCBpdCBlaXRoZXIgZW1pdHMgY2hlY2tz
IG9yIHJlZ2lzdGVycworICAgIC8vIHdhdGNocG9pbnRzIChvciBhIGNvbWJpbmF0aW9uIG9mIHRo
ZSB0d28pIHRvIG1ha2UgdGhlIGNvbmRpdGlvbnMgaG9sZC4gSWYgYW55IG9mIHRob3NlCisgICAg
Ly8gY29uZGl0aW9ucyBhcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZSwgcmV0dXJucyBmYWxzZS4KKyAg
ICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jik7CisgICAgCisg
ICAgLy8gQ2FsbHMgY2hlY2soKSBmb3IgdGhvc2UgY29uZGl0aW9ucyB0aGF0IGFyZW4ndCB0aGUg
c2xvdCBiYXNlLCBhbmQgY2FsbHMgbG9hZCgpIGZvciB0aGUgc2xvdAorICAgIC8vIGJhc2UuIERv
ZXMgYSBjb21iaW5hdGlvbiBvZiB3YXRjaHBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgY2hlY2sgZW1p
c3Npb24gdG8gZ3VhcmQgdGhlCisgICAgLy8gY29uZGl0aW9ucywgYW5kIGVtaXRzIGNvZGUgdG8g
bG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2xvdCBiYXNlLiBSZXR1cm5zIGEgbm9kZSBjb250YWlu
aW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlmIGFueSBvZiB0aGUg
Y29uZGl0aW9ucyB3ZXJlIG5vIGxvbmdlciBjaGVja2FibGUuCisgICAgTm9kZSogbG9hZChTcGVj
dWxhdGVkVHlwZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBOb2RlVHlwZSA9
IEdldEJ5T2Zmc2V0KTsKIAogICAgIHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIHZv
aWQgY2xlYXJDYWNoZXMoKTsKQEAgLTcwNiw2ICs3MzIsOSBAQCBwcml2YXRlOgogICAgIAogICAg
IE5vZGUqIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cm91dGUgdG8gZW1pdFByb3BlcnR5Q2hlY2ssIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gQnV0
IGN1cnJlbnRseSwKKyAgICAgICAgLy8gdGhpcyBnZXRzIG5vIHByb2ZpdCBmcm9tIHVzaW5nIGVt
aXRQcm9wZXJ0eUNoZWNrKCkgc2luY2Ugd2UnbGwgbm9uLWFkYXB0aXZlbHkgd2F0Y2ggdGhlCisg
ICAgICAgIC8vIG9iamVjdCdzIHN0cnVjdHVyZSBhcyBzb29uIGFzIHdlIG1ha2UgaXQgYSB3ZWFr
SlNDb3NudGFudC4KICAgICAgICAgTm9kZSogb2JqZWN0Tm9kZSA9IHdlYWtKU0NvbnN0YW50KG9i
amVjdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBo
LmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgb2JqZWN0Tm9kZSk7CiAgICAgICAgIHJldHVy
biBvYmplY3ROb2RlOwpAQCAtMjI0MCw5ICsyMjY5LDE2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBO
b2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK05vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBwYXNzZWRTdHJ1
Y3R1cmVTZXQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgTm9kZVR5cGUgb3ApCiB7CiAgICAgaWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAg
ICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBzdHJ1Y3R1cmVTZXQgPSBwYXNzZWRTdHJ1Y3R1cmVT
ZXQ7CisgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuaXNUb3AoKSB8fCBzdHJ1Y3R1cmVTZXQuaXND
bG9iYmVyZWQoKSkgeworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHZhbHVlID0gYmFzZS0+Y29u
c3RhbnQoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+c3RydWN0dXJlKCkgJiYgdmFsdWUtPnN0
cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZVNl
dCA9IHZhbHVlLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYg
KEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+
YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkgewogICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBiYXNlKTsKICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChj
b25zdGFudCk7CkBAIC0yMjY0LDYgKzIzMDAsMTMgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5T2Zmc2V0KAogICAgIHJldHVybiBnZXRCeU9mZnNldDsKIH0KIAorTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24s
IE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgTm9kZVR5cGUgb3ApCit7CisgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAg
ICBwcmVkaWN0aW9uLCBiYXNlLCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjp0b3AoKSwgbV9ncmFw
aC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpLAorICAgICAgICBvZmZzZXQsIG9wKTsKK30KKwog
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCiB7CiAg
ICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMjI4MSwxMCArMjMyNCwxODAgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVja1ZlY3RvciYgdmVjdG9yKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEdldEJ5T2Zm
c2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK3sKKyAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CisgICAgZWxz
ZQorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFz
ZSk7CisgICAgCisgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGEuYWRkKCk7CisgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OworICAgIGRhdGEt
PmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgIAorICAgIE5vZGUqIGdl
dEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlv
biksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisKKyAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7Cit9
CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24pCit7CisgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0
aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgIGlmICghY29uZGl0aW9u
LnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsCisgICAg
ICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAgICAgICAg
d2Vha0pTQ29uc3RhbnQoY29uZGl0aW9uLm9iamVjdCgpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKKy8vIEZJWE1FOiBDb25zaWRlcmluZyBhYnN0cmFjdGluZyBvdXQgYSB2ZXJzaW9uIG9mIHRo
aXMgdGhhdCBqdXN0IGVtaXRzIHRoZSBjaGVja3MsIGFuZCB0aGVuIHRlbGxzCisvLyB5b3UgaG93
IHRvIGdvIGFib3V0IGRvaW5nIHRoZSBsb2FkLiBUaGF0IHNob3VsZCB0aGVuIGJlIHVzZWQgZm9y
IE11bHRpR2V0QnlPZmZzZXQuCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uLCBOb2RlVHlwZSBvcCkKK3sKKyAgICAvLyBXZSBtaWdodCBwcm9tb3RlIHRoaXMgdG8g
RXF1aXZhbGVuY2UsIGFuZCBhIGxhdGVyIERGRyBwYXNzIG1pZ2h0IGFsc28gZG8gc3VjaCBwcm9t
b3Rpb24KKyAgICAvLyBldmVuIGlmIHdlIGZhaWwsIGJ1dCBmb3Igc2ltcGxpY2l0eSB0aGlzIGNh
bm5vdCBiZSBhc2tlZCB0byBsb2FkIGFuIGVxdWl2YWxlbmNlIGNvbmRpdGlvbi4KKyAgICAvLyBO
b25lIG9mIHRoZSBjbGllbnRzIG9mIHRoaXMgbWV0aG9kIHdpbGwgcmVxdWVzdCBhIGxvYWQgb2Yg
YW4gRXF1aXZhbGVuY2UgY29uZGl0aW9uIGFueXdheSwKKyAgICAvLyBhbmQgc3VwcG9ydGluZyBp
dCB3b3VsZCBjb21wbGljYXRlIHRoZSBoZXVyaXN0aWNzIGJlbG93LgorICAgIFJFTEVBU0VfQVNT
RVJUKGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsKKyAg
ICAKKyAgICAvLyBIZXJlJ3MgdGhlIHJhbmtpbmcgb2YgaG93IHRvIGhhbmRsZSB0aGlzLCBmcm9t
IG1vc3QgcHJlZmVycmVkIHRvIGxlYXN0IHByZWZlcnJlZDoKKyAgICAvLworICAgIC8vIDEpIFdh
dGNocG9pbnQgb24gYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uIGFuZCByZXR1cm4gYSBjb25zdGFu
dCBub2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlLgorICAgIC8vICAgIE5vIG90aGVyIGNvZGUgaXMg
ZW1pdHRlZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2Ugb2JqZWN0IGlzIG5ldmVyIHJl
Z2lzdGVyZWQuCisgICAgLy8gICAgSGVuY2UgdGhpcyByZXN1bHRzIGluIHplcm8gY29kZSBhbmQg
d2Ugd29uJ3QgamV0dGlzb24gdGhpcyBjb21waWxhdGlvbiBpZiB0aGUgb2JqZWN0CisgICAgLy8g
ICAgdHJhbnNpdGlvbnMsIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRjaGFibGUgcmlnaHQg
bm93LgorICAgIC8vCisgICAgLy8gMikgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJy
ZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyBnb2luZyB0byBiZSB3YXRjaGVkIGJ5IHRoZQor
ICAgIC8vICAgIERGRyBhbnl3YXkgKGkuZS4gZGZnU2hvdWxkV2F0Y2gpLiBXYXRjaCB0aGUgc3Ry
dWN0dXJlIGFuZCBlbWl0IHRoZSBsb2FkLiBEb24ndCB3YXRjaCB0aGUKKyAgICAvLyAgICBjb25k
aXRpb24sIHNpbmNlIHRoZSBhY3Qgb2YgdHVybmluZyB0aGUgYmFzZSBpbnRvIGEgY29uc3RhbnQg
aW4gSVIgd2lsbCBjYXVzZSB0aGUgREZHIHRvCisgICAgLy8gICAgd2F0Y2ggdGhlIHN0cnVjdHVy
ZSBhbnl3YXkgYW5kIGRvaW5nIHNvIHdvdWxkIHN1YnN1bWUgd2F0Y2hpbmcgdGhlIGNvbmRpdGlv
bi4KKyAgICAvLworICAgIC8vIDMpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVu
dCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgd2F0Y2hhYmxlIGJ1dCBub3QgYnkgdGhlCisgICAg
Ly8gICAgREZHIChpLmUuIHRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkgYW5k
ICFkZmdTaG91bGRXYXRjaElmUG9zc2libGUoKSkuIFdhdGNoCisgICAgLy8gICAgdGhlIGNvbmRp
dGlvbiwgYW5kIGVtaXQgYSBsb2FkLgorICAgIC8vCisgICAgLy8gNCkgTmVlZCB0byBlbWl0IGEg
bG9hZCwgYW5kIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyBub3Qgd2F0Y2hh
YmxlLiBFbWl0IGEKKyAgICAvLyAgICBzdHJ1Y3R1cmUgY2hlY2ssIGFuZCBlbWl0IGEgbG9hZC4K
KyAgICAvLworICAgIC8vIDUpIFRoZSBjb25kaXRpb24gZG9lcyBub3QgaG9sZC4gR2l2ZSB1cCBh
bmQgcmV0dXJuIG51bGwuCisgICAgCisgICAgLy8gTWFrZSBzdXJlIHdlIGFncmVlIG9uIHdoYXQg
dGhlIHN0cnVjdHVyZSBpcyBmb3IgdGhlIHB1cnBvc2Ugb2YgZW1pdHRpbmcgdGhlc2UgdmFyaW91
cworICAgIC8vIGNoZWNrcy4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5v
YmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgLy8gRmlyc3QsIHRyeSB0byBwcm9tb3Rl
IFByZXNlbmNlIHRvIEVxdWl2YWxlbmNlLiBXZSBkbyB0aGlzIGJlZm9yZSBkb2luZyBhbnl0aGlu
ZyBlbHNlCisgICAgLy8gYmVjYXVzZSBpdCdzIHRoZSBtb3N0IHByb2ZpdGFibGUuIEFsc28sIHRo
ZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgcHJlc2VuY2UgaXMgd2F0Y2hhYmxlIGJ1dAorICAgIC8v
IHdlIGRvbid0IHdhbnQgdG8gd2F0Y2ggaXQgdW5sZXNzIGl0IGJlY2FtZSBhbiBlcXVpdmFsZW5j
ZSAoc2VlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorICAgIC8vICgxKSwgKDIpLCBhbmQgKDMp
IGFib3ZlKS4KKyAgICBpZiAoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KGNvbmRpdGlvbi5vZmZz
ZXQoKSkpIHsKKyAgICAgICAgLy8gVGhpcyBsb2FkIGlzIGZpbmUgYmVjYXVzZSBvbmx5IHRoZSBH
QyBjYW4gY2F1c2UgYSBkZWxldGVkIHByb3BlcnR5IHRvIGhhdmUgYSBnYXJiYWdlCisgICAgICAg
IC8vIHZhbHVlLgorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29uZGl0aW9uLm9iamVjdCgpLT5n
ZXREaXJlY3QoY29uZGl0aW9uLm9mZnNldCgpKTsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gZXF1aXZhbGVuY2VDb25kaXRpb24gPQorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgICAgICAgICAgY29u
ZGl0aW9uLm9iamVjdCgpLCBjb25kaXRpb24udWlkKCksIHZhbHVlKTsKKyAgICAgICAgaWYgKG1f
Z3JhcGgud2F0Y2hDb25kaXRpb24oZXF1aXZhbGVuY2VDb25kaXRpb24pKQorICAgICAgICAgICAg
cmV0dXJuIHdlYWtKU0NvbnN0YW50KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgLy8gQXQgdGhp
cyBwb2ludCwgd2UnbGwgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgY29uZGl0aW9uJ3MgYmFzZSBh
cyBhIGNvbnN0YW50IGluIERGRyBJUi4gT25jZQorICAgIC8vIHdlIGRvIHRoaXMsIHRoZSBmcm96
ZW4gdmFsdWUgd2lsbCBoYXZlIGl0cyBvd24gaWRlYSBvZiB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMu
IFVzZSB0aGF0IGZyb20KKyAgICAvLyBub3cgb24ganVzdCBiZWNhdXNlIGl0J3MgbGVzcyBjb25m
dXNpbmcuCisgICAgTm9kZSogYmFzZU5vZGUgPSB3ZWFrSlNDb25zdGFudChjb25kaXRpb24ub2Jq
ZWN0KCkpOworICAgIHN0cnVjdHVyZSA9IGJhc2VOb2RlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUo
KTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiB0aGUgc3RydWN0dXJlIHRoYXQgd2UndmUgcmVnaXN0
ZXJlZCBtYWtlcyB0aGUgY29uZGl0aW9uIGhvbGQuIElmIG5vdCwganVzdCBnaXZlCisgICAgLy8g
dXAuIFRoaXMgaXMgY2FzZSAoNSkgYWJvdmUuCisgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IAorICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZCBieSB0aGUgREZHIGFscmVhZHks
IHRoZW4ganVzdCB1c2UgdGhpcyBmYWN0IHRvIGVtaXQgdGhlIGxvYWQuCisgICAgLy8gVGhpcyBp
cyBjYXNlICgyKSBhYm92ZS4KKyAgICBpZiAoc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQor
ICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZU5vZGUsIGNv
bmRpdGlvbi51aWQoKSwgY29uZGl0aW9uLm9mZnNldCgpLCBvcCk7CisgICAgCisgICAgLy8gSWYg
d2UgY2FuIHdhdGNoIHRoZSBjb25kaXRpb24gcmlnaHQgbm93LCB0aGVuIHdlIGNhbiBlbWl0IHRo
ZSBsb2FkIGFmdGVyIHdhdGNoaW5nIGl0LiBUaGlzCisgICAgLy8gaXMgY2FzZSAoMykgYWJvdmUu
CisgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0
dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBjb25kaXRpb24udWlk
KCksIGNvbmRpdGlvbi5vZmZzZXQoKSwgb3ApOworICAgIAorICAgIC8vIFdlIGNhbid0IHdhdGNo
IGFueXRoaW5nIGJ1dCB3ZSBrbm93IHRoYXQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIHNhdGlzZmll
cyB0aGUgY29uZGl0aW9uLiBTbywKKyAgICAvLyBjaGVjayBmb3IgdGhhdCBzdHJ1Y3R1cmUgYW5k
IHRoZW4gZW1pdCB0aGUgbG9hZC4KKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVj
dHVyZSwgCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUp
KSwKKyAgICAgICAgd2Vha0pTQ29uc3RhbnQoYmFzZU5vZGUpKTsKKyAgICAKKyAgICByZXR1cm4g
aGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgIHByZWRpY3Rpb24sIGJhc2VOb2RlLCBzdHJ1Y3R1
cmUsIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0aW9uLnVpZCgpKSwKKyAgICAg
ICAgY29uZGl0aW9uLm9mZnNldCgpLCBvcCk7Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNo
ZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7Cisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRp
b25TZXQpIHsKKyAgICAgICAgaWYgKCFjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgTm9kZVR5cGUgb3ApCit7CisgICAg
Tm9kZSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlvblNldCkgeworICAgICAgICBzd2l0Y2ggKGNvbmRp
dGlvbi5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsgLy8gU2hvdWxkIG9ubHkgc2Vl
IGV4YWN0bHkgb25lIG9mIHRoZXNlLgorICAgICAgICAgICAgcmVzdWx0ID0gbG9hZChwcmVkaWN0
aW9uLCBjb25kaXRpb24sIG9wKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBpZiAoIWNoZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZChOb2RlKiBiYXNlLCBjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCkKIHsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBjZWxsQ29u
c3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sodmVjdG9yW2ldLmNvbnN0YW50KCksIHZlY3RvcltpXS5z
dHJ1Y3R1cmUoKSk7CisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7CisgICAg
CisgICAgU3BlY3VsYXRlZFR5cGUgbG9hZFByZWRpY3Rpb247CisgICAgTm9kZVR5cGUgbG9hZE9w
OworICAgIGlmICh2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgbG9hZFByZWRp
Y3Rpb24gPSBTcGVjQ2VsbE90aGVyOworICAgICAgICBsb2FkT3AgPSBHZXRHZXR0ZXJTZXR0ZXJC
eU9mZnNldDsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkUHJlZGljdGlvbiA9IHByZWRpY3Rp
b247CisgICAgICAgIGxvYWRPcCA9IEdldEJ5T2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBOb2Rl
KiBsb2FkZWRWYWx1ZTsKKyAgICBpZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgp
KQorICAgICAgICBsb2FkZWRWYWx1ZSA9IGxvYWQobG9hZFByZWRpY3Rpb24sIHZhcmlhbnQuY29u
ZGl0aW9uU2V0KCksIGxvYWRPcCk7CisgICAgZWxzZSB7CisgICAgICAgIGxvYWRlZFZhbHVlID0g
aGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwgdmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwK
KyAgICAgICAgICAgIGxvYWRPcCk7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIGJhY2t3YXJk
cyBwcm9wYWdhdGlvbiBrbm93cyB0aGF0IHdlJ3ZlIHVzZWQgYmFzZS4KKyAgICBhZGRUb0dyYXBo
KFBoYW50b20sIGJhc2UpOworICAgIAorICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKIH0KIAogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKQEAgLTIzMDcsMTUgKzI1MjAsMjAgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkK
LSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQo
KTsKLSAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNrcyBm
b3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAgICAgICAv
LyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNlIGluIHRo
ZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNrcyBhbmQg
dGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5k
ZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4
XS5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgdmFy
aWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIGlmICghY2hlY2soZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNv
bmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVz
dGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlk
LCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBp
bGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7CisgICAgCiAgICAgICAgIC8vIDIpIEVt
aXQgYSBNdWx0aUdldEJ5T2Zmc2V0CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52
YXJpYW50cyA9IGdldEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKQEAgLTIzMjgsMzAgKzI1NDYsMTYg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICBBU1NFUlQoZ2V0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwogICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQg
PSBnZXRCeUlkU3RhdHVzWzBdOwogICAgICAgICAgICAgICAgIAorICAgIE5vZGUqIGxvYWRlZFZh
bHVlID0gbG9hZChiYXNlLCB2YXJpYW50KTsKKyAgICBpZiAoIWxvYWRlZFZhbHVlKSB7CisgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAg
IGFkZFRvR3JhcGgoZ2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJl
ZGljdGlvbiksIGJhc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX2dy
YXBoLmNvbXBpbGF0aW9uKCkpCiAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNl
SW5saW5lZEdldEJ5SWQoKTsKICAgICAKLSAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNlOwot
ICAgICAgICAgICAgICAgIAotICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOwot
ICAgIAotICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKLQotICAgIGlm
ICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50
KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAKLSAgICAvLyBVbmxlc3Mgd2Ugd2FudCBi
dWdzIGxpa2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NzgzLCB3
ZSBuZWVkIHRvCi0gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJhc2Ugb2YgdGhlIG9yaWdpbmFsIGdl
dF9ieV9pZCBpcyBrZXB0IGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aAotICAgIC8vIGFsbCBv
ZiB0aGUgc3BlY3VsYXRpb25zLiBXZSBvbmx5IGluc2VydCB0aGUgUGhhbnRvbSBpZiB0aGVyZSBo
YWQgYmVlbiBhIENoZWNrU3RydWN0dXJlCi0gICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4g
dGhlIGJhc2UgZm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNlLgotICAgIGlmIChv
cmlnaW5hbEJhc2UgIT0gYmFzZSkKLSAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcmlnaW5h
bEJhc2UpOwotICAgIAotICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQo
Ci0gICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVk
aWN0aW9uLAotICAgICAgICBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmll
ck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1
cygpID8gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQgOiBHZXRCeU9mZnNldCk7Ci0gICAgCiAgICAg
aWYgKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIHJldHVybjsK
QEAgLTI0MjIsMTcgKzI2MjYsMjAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJ
ZCgKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24o
KS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKLSAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJl
Y3QpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBp
ZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgZW1pdENoZWNrcyhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3Mo
KSk7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRl
eF0uY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9u
KCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRC
eUlkKCk7CisgICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1f
Z3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+dmFyaWFu
dHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJO
dW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwpAQCAtMjQ1NCw3ICsyNjYxLDEwIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbjogewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNl
KTsKLSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAg
ICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICBlbWl0
UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNE
aXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1MDUsMTkgKzI3MTUsMTEgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBOb2RlKiBvcmlnaW5hbEJh
c2UgPSBiYXNlOwotICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgIENo
ZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1
Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5j
b25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0
ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRs
ZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgdmFyaWFudC5i
YXNlU3RydWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAg
ICAgICAgICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAgICAgIE5vZGUqIGxvYWRlZFZh
bHVlID0gbG9hZChiYXNlLCB2YXJpYW50KTsKKyAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgewor
ICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1
dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgTm9kZSogc2V0dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxv
YWRlZFZhbHVlKTsKICAgICAgICAgCkBAIC0yNTQ1LDcgKzI3NDcsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CiAgICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0
ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIElt
bWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0
ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihuZXh0UmVnaXN0ZXIrKyksIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAg
ICAgICAgIGhhbmRsZUNhbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDkgQEAg
dm9pZCBDb21tb25EYXRhOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAg
IHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNrKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zlcnku
Y29uc3RhbnQoKSk7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgZm9yIChBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQqIHdhdGNocG9pbnQgOiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRzKQorICAgICAgICB3YXRjaHBvaW50LT5rZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tl
ZFJlZmVyZW5jZXMpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTg3MjQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2lu
Y2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTgs
NiArMTAwLDggQEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vh
a1JlZmVyZW5jZXM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3Ry
dWN0dXJlUmVmZXJlbmNlczsKICAgICBCYWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50
PiB3YXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQ+IGFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dHM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsKICAgICAK
ICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNo
cG9pbnRBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZm
ZXJWaWV3KiB2aWV3LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQogewor
ICAgIFdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVC
bG9jayk7CiAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50KiBuZXV0ZXJpbmdXYXRj
aHBvaW50ID0KICAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50OjpjcmVhdGUo
KmNvZGVCbG9jay0+dm0oKSk7CiAgICAgbmV1dGVyaW5nV2F0Y2hwb2ludC0+c2V0KCktPmFkZCh3
YXRjaHBvaW50KTsKQEAgLTQ1LDEwICs0NiwyMyBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNo
cG9pbnRBZGFwdG9yOjphCiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgKLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgV2F0
Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRW
YWx1ZSogaW5mZXJyZWRWYWx1ZSwgQ29tbW9uRGF0YSYgY29tbW9uKQogewogICAgIGNvZGVCbG9j
ay0+YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRv
ZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRv
IGl0IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBpbmZlcnJlZFZhbHVlLT5hZGQod2F0
Y2hwb2ludCk7CisgICAgaW5mZXJyZWRWYWx1ZS0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQo
Y29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRv
cjo6YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAgc3dpdGNoIChrZXkua2lu
ZCgpKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAg
IGNvbW1vbi5hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmFkZChrZXks
IGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgY29tbW9uLmFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29kZUJs
b2NrKS0+aW5zdGFsbCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIERlc2lyZWRXYXRj
aHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CkBAIC03NCw2ICs4OCwxMSBAQCB2b2lk
IERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJyCiAgICAgbV9idWZmZXJWaWV3cy5h
ZGRMYXppbHkodmlldyk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHko
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBtX2FkYXB0aXZlU3Ry
dWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5k
ZmdTaG91bGRXYXRjaCgpKQpAQCAtODgsNiArMTA3LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2lu
dHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2Nr
LCBjb21tb25EYXRhKTsKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ss
IGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29t
bW9uRGF0YSk7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9j
aywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZh
bGlkKCkgY29uc3QKQEAgLTk1LDcgKzExNSw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjph
cmVTdGlsbFZhbGlkKCkKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAg
ICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRW
YWx1ZXMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxW
YWxpZCgpOworICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQorICAgICAg
ICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRl
ICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCkBAIC00MSwxNSArNDIsMTUgQEAgY2xhc3MgR3Jh
cGg7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3Igewot
ICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBUIHNldCwgV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCkKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBD
b21tb25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hw
b2ludCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNv
ZGVCbG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBz
ZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KIH07CiAKIHN0cnVjdCBJ
bmZlcnJlZFZhbHVlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIElu
ZmVycmVkVmFsdWUqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9j
ayosIEluZmVycmVkVmFsdWUqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVl
bkludmFsaWRhdGVkKEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUpCiAgICAgewogICAgICAg
ICByZXR1cm4gaW5mZXJyZWRWYWx1ZS0+aGFzQmVlbkludmFsaWRhdGVkKCk7CkBAIC01NywxMiAr
NTgsMTggQEAgc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBcnJh
eUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVC
bG9jayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIENvbW1vbkRhdGEmKTsKICAgICBz
dGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAg
ICAgewotICAgICAgICBib29sIHJlc3VsdCA9ICF2aWV3LT5sZW5ndGgoKTsKLSAgICAgICAgV1RG
Ojpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVy
biAhdmlldy0+bGVuZ3RoKCk7CisgICAgfQorfTsKKworc3RydWN0IEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludEFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9v
bCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkK
KyAgICB7CisgICAgICAgIHJldHVybiAha2V5LmlzV2F0Y2hhYmxlKCk7CiAgICAgfQogfTsKIApA
QCAtODcsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxs
eUFkZGVkKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQotICAg
ICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24ud2F0Y2hwb2ludHMu
YWRkKGNvZGVCbG9jaykpOworICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0
LCBjb21tb24pOwogICAgICAgICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAg
fQpAQCAtMTIyLDYgKzEyOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMYXppbHkoSW5mZXJy
ZWRWYWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAg
CisgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0
bHkuIFVzZQorICAgIC8vIEdyYXBoOjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQsIHdo
aWNoIGRvZXMgdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwuCisgICAgdm9pZCBhZGRMYXpp
bHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKICAgICBib29sIGNvbnNp
ZGVyKFN0cnVjdHVyZSopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENv
bW1vbkRhdGEmKTsKQEAgLTE0NCwxMiArMTU1LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9CisgICAgYm9vbCBp
c1dhdGNoZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9
CiAgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2lu
dFNldCo+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElubGluZVdhdGNo
cG9pbnRTZXQqPiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJ
bmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAg
ICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVm
ZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOworICAgIEdlbmVyaWNEZXNp
cmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTg3MjQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDE0IEBAIERlc2lyZWRXZWFrUmVmZXJlbmNl
czo6fkRlc2lyZWRXZWFrUmVmZXIKIAogdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExh
emlseShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKKyAgICBp
ZiAoY2VsbCkKKyAgICAgICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKK30KKwordm9pZCBEZXNp
cmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYWRkTGF6aWx5KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAog
Ym9vbCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKEpTQ2VsbCogY2VsbCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVy
ZW5jZXMuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw2ICs0OCw3
IEBAIHB1YmxpYzoKICAgICB+RGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7CiAKICAgICB2b2lkIGFk
ZExhemlseShKU0NlbGwqKTsKKyAgICB2b2lkIGFkZExhemlseShKU1ZhbHVlKTsKICAgICBib29s
IGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9u
RGF0YSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NDgsNiArODQ4LDIxIEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NP
bkFsbE5vZGVzKE5vZGVGbGEKICAgICB9CiB9CiAKK2Jvb2wgR3JhcGg6OndhdGNoQ29uZGl0aW9u
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNX
YXRjaGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFr
UmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5Lmhhc1Byb3Rv
dHlwZSgpKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5wcm90
b3R5cGUoKSk7CisgICAgaWYgKGtleS5oYXNSZXF1aXJlZFZhbHVlKCkpCisgICAgICAgIG1fcGxh
bi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5LnJlcXVpcmVkVmFsdWUoKSk7CisgICAgCisg
ICAgbV9wbGFuLndhdGNocG9pbnRzLmFkZExhemlseShrZXkpOworICAgIHJldHVybiB0cnVlOwor
fQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1
bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3Mu
ZmluZChjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NjUsNiArNjY1LDkgQEAgcHVibGljOgogICAgIERlc2lyZWRJ
ZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0K
ICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndh
dGNocG9pbnRzOyB9CiAgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUga2V5IGlzIGFs
cmVhZHkgaW52YWxpZC4KKyAgICBib29sIHdhdGNoQ29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNz
Rm9yKENvZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJ
bmxpbmVDYWxsRnJhbWUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
TXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoiKTsK
KyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5w
cmludChpbkNvbnRleHQoY29uc3RhbnQoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpLCAiQCIsIGluQ29udGV4dChKU1ZhbHVlKHByb3RvdHlwZSgpKSwgY29udGV4dCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6S2luZCBraW5k
KQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldENhc2U6
OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXRDYXNlOjpMb2FkOgorICAgICAgICBvdXQucHJp
bnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldENh
c2U6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGcm9tUHJvdG90
eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKyNkZWZpbmUgREZHTXVsdGlH
ZXRCeU9mZnNldERhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJEdW1w
Q29udGV4dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgTXVsdGlHZXRCeU9mZnNldENhc2UgeworcHVibGljOgorICAg
IGVudW0gS2luZCB7CisgICAgICAgIENvbnN0YW50LAorICAgICAgICBMb2FkLAorICAgICAgICBM
b2FkRnJvbVByb3RvdHlwZQorICAgIH07CisgICAgCisgICAgTXVsdGlHZXRCeU9mZnNldENhc2Uo
KQorICAgICAgICA6IG1fa2luZChDb25zdGFudCkKKyAgICB7CisgICAgICAgIHUuY29uc3RhbnQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE11
bHRpR2V0QnlPZmZzZXRDYXNlIGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBD
b25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3RhbnQgPSBKU1ZhbHVlOjplbmNvZGUodmFs
dWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTXVs
dGlHZXRCeU9mZnNldENhc2UgbG9hZChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAg
ICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBMb2FkOworICAgICAgICByZXN1bHQudS5sb2FkLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE11bHRpR2V0QnlPZmZzZXRD
YXNlIGxvYWRGcm9tUHJvdG90eXBlKEpTT2JqZWN0KiBwcm90b3R5cGUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKKyAgICB7CisgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IExvYWRGcm9tUHJvdG90eXBlOworICAgICAgICByZXN1bHQu
dS5sb2FkLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZz
ZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIEpTVmFsdWUgY29u
c3RhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFudCk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodS5jb25zdGFudCk7CisgICAgfQorICAg
IAorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiB1LmxvYWQucHJv
dG90eXBlOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkIHx8IGtpbmQoKSA9PSBMb2FkRnJv
bVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiB1LmxvYWQub2Zmc2V0OworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICB1bmlvbiB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlIGNvbnN0YW50OworICAgICAgICBzdHJ1
Y3QgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1f
a2luZDsKK307CisKK3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNh
c2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6Ok11bHRpR2V0QnlP
ZmZzZXRDYXNlOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlz
aW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNiArMzIyLDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0
ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2Ug
R2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CiAgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAg
ICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBhbHNvIGNoZWNrIHRoZSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4KKyAgICAgICAgLy8gSWYgd2UgaGF2
ZSBvbmUgdGhhdCBndWFyYW50ZWVzIHRoZSBwcmVzZW5jZSBvZiB0aGlzIHByb3BlcnR5LCB0aGVu
IHRoaXMgaXMgYWx3YXlzIHNhZmUKKyAgICAgICAgLy8gdG8gZXhlY3V0ZS4KKyAgICAgICAgRklY
TUU7CisgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IHN0
YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlOwogICAgICAgICBpZiAodmFs
dWUuaXNUb3AoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3
IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25Q
dHIgJnNsb3dQYXRoRnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisg
ICAgaWYgKHN0cnVjdHVyZS0+bmVlZHNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAg
ICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBz
dHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgIAogICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwpAQCAtMTMyLDQ3ICsxMzIsMzAgQEAgc3RhdGlj
IHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQorc3RhdGljIHZvaWQgY2hlY2tPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChvYmplY3QtPnN0cnVj
dHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hw
b2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUs
IHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKLSAg
ICAgICAgICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAgICAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gYnJhbmNoU3RydWN0dXJlKAotICAgICAg
ICAgICAgICAgIGppdCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5lZmZlY3RpdmVXYXRjaHBvaW50
KTsKLSAgICAgICAgICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KKyAgICBpZiAoY29uZGl0
aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAg
ICAgICBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hw
b2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG9iamVjdCksIHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAg
IGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAg
ICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0YXRpYyB2
b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBN
YWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAg
IAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90eXBlLmFz
Q2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CitzdGF0aWMgdm9p
ZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBj
aGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQog
fQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1
ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgdGFyZ2V0KQpAQCAtMjk2LDExICsyNzksMTIgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1
c3RvbUZvcihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgRnVuY3Rp
b25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRj
aHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NM
YWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVy
ZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworICAg
IAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2
YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzMyArMzMwLDI1IEBAIHN0YXRpYyBib29s
IGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVy
ZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwog
CiAgICAgaWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChzdHVi
SW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJyU3Ry
dWN0dXJlID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAg
IGlmIChjaGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFp
bi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwg
KytpdCkgewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90
b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChw
cm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwot
ICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1Ykpp
dCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQo
IXByb3RvT2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJl
KTsKLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgIGNv
bmRpdGlvblNldCwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOwogICAgIAorICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICBpZiAoY29u
ZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsK
KyAgICBlbHNlCisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VD
b25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CiAgICAgY3VyclN0cnVjdHVyZS0+c3Rh
cnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKKyAgICAKICAg
ICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKGtpbmQg
IT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xv
YmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNl
R1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJv
eHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7CkBA
IC02MjcsOSArNjAzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNlbGwo
VgogICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwog
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KLSAgICBBU1NFUlQoIXN0cnVj
dHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgaWYgKHR5cGVJbmZv
Lmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9w
ZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAg
IHJldHVybiBBdHRlbXB0VG9DYWNoZTsKQEAgLTgyNywyMSArODAyLDIyIEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICB9CiAKICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9m
ZnNldCgpOwotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgc2l6
ZV90IGNvdW50ID0gMDsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7CiAgICAgCiAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2Uo
KSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAg
ICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1p
c3MoZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoCi0gICAg
ICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LCBvZmZz
ZXQpOwotICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVy
dHlIaXQoZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1
cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgb2Zmc2V0ID0gY29u
ZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAg
IFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpm
cm9tKHN0dWJJbmZvKTsKQEAgLTg1Miw3ICs4MjgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4
ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90
b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCks
IGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9mZnNldCwg
CiAgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50
U2V0KCksIAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUp
OwpAQCAtODcxLDcgKzg0Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdl
dEJ5SUQKICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAg
Y29uZGl0aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYgKzk2OSwy
OCBAQCBzdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVj
dHVyZShFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29s
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3Ry
dWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlk
ZW50KTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkg
fHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3Bl
cnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1
Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1
Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAg
b3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3Qg
aGF2ZQogICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYg
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAg
ICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNr
aXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3Ry
dWN0dXJlIGhhcwpAQCAtMTAyMCwxNCArOTk4LDEzIEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YkEKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEg
SW1wbGVtZW50IGl0IQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzA5MTQKICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRl
cigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChub3JtYWxpemVQcm90b3R5
cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAvLyBlbWl0UHV0VHJhbnNpdGlvblN0dWIKKyAgICBpZiAocHV0S2luZCA9PSBOb3RE
aXJlY3QpIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlTZXR0ZXJNaXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lID0gc3R1
YkluZm8uc3R1YlJvdXRpbmU7CkBAIC0xMDgzLDE3ICsxMDYwLDggQEAgc3RhdGljIFN0cnVjdHVy
ZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKICAgICAgICAgb2xkU3Ry
dWN0dXJlKSk7CiAgICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAg
ICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1
YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQUjEpOwotICAg
ICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGZvciAo
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0
OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAg
ICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bnMoCisgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBz
dHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKQEAgLTEyMjgsNyArMTE5Niw3IEBAIHN0YXRpYyBT
dHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcGF0
Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBpZiAoYWxsb2Nh
dG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCkBAIC0xMjU2LDggKzEyMjQsOCBAQCBzdGF0aWMgU3Ry
dWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxv
Y2soKS0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAg
ICAgICAgc3RydWN0dXJlKTsKLQotICAgIHJldHVybiBvbGRTdHJ1Y3R1cmU7CisgICAgCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTI4MSwx
MiArMTI0OSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAg
ICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkp
IHsKICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVy
dHkpIHsKIAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJh
bnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJl
KQorICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFl
bWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0
dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4o
ZXhlYyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAg
ICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAg
LTEyOTQsNyArMTI2MSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZl
ciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2lu
ZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEyLDIwICsx
Mjc5LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAg
ICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAg
IGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3Qu
YmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlk
UHJvdG90eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xv
dC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgPSBjb25kaXRp
b25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCiAgICAgICAgIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdl
bmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwg
Y3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LAorICAgICAg
ICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1Yklu
Zm8sIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwg
bnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1Nsb3dDYXNlKSwKQEAgLTEzMzYsNyArMTMwNSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRB
Y2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nl
c3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0
cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHVi
Um91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3Vz
dG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
KTsKQEAgLTEzODAsMTcgKzEzNDksMTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1
aWxkUHV0QnlJZAogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNp
b24uCiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5z
aXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotCi0gICAgICAgICAgICBpZiAoIW9sZFN0
cnVjdHVyZSkgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAg
IGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICAgICAg
U3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFp
bihleGVjKTsKICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7
CiAgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0QnlJZEFj
Y2Vzczo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVj
dHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwg
c3RydWN0dXJlLCBjb25kaXRpb25TZXQsCiAgICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5l
KSk7CiAKICAgICAgICAgfSBlbHNlIHsKQEAgLTE0MjMsMjEgKzEzOTEsMjQgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgIGlmICgoc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKICAgICAgICAgJiYgc3R1Yklu
Zm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9m
ZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFzZVZhbHVl
ICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgcHJvcGVy
dHlOYW1lLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5
cGVDaGFpbikKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAo
c2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPQor
ICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0
KAorICAgICAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9w
ZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIHBy
b3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAg
fQorICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCku
b2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNo
ZWRPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxp
c3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQs
IHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0g
ICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihz
bG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMs
IGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywg
Y29uZGl0aW9uU2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxs
cHRyLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKQEAgLTE0NDgsNyArMTQx
OSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAg
bGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFi
bGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3Rv
bVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBz
bG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJl
LCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAg
ICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTE0ODcsMTEgKzE0NTgsMTUgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgqdm0pOwogICAg
IAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgSlNWYWx1ZSBmb3VuZFNs
b3RCYXNlID0gd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCk7Ci0gICAgc2l6
ZV90IGNvdW50ID0gIWZvdW5kU2xvdEJhc2UgfHwgZm91bmRTbG90QmFzZSAhPSBiYXNlID8gCi0g
ICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0
dXJlLCBmb3VuZFNsb3RCYXNlLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgOiAwOwotICAgIGlmIChj
b3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICBpZiAoc2xv
dC5zbG90QmFzZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgIGV4
ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICB9
CisgICAgfSBlbHNlCisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5TWlzcyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAg
ICAKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdDsKQEAgLTE1MTYsNyArMTQ5MSw2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlSZXBhdGNoSW4oCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICB9CiAg
ICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFp
bihleGVjKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIAog
ICAgIHsKQEAgLTE1NDcsMTggKzE1MjEsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
UmVwYXRjaEluKAogICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50U2V0KCkpCiAgICAgICAgICAg
ICBzbG90LndhdGNocG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJs
b2NrKSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwot
ICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAg
ICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0
dXJlID0gcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvU3RydWN0dXJl
LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAg
ZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVy
ZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAg
ICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQs
IHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBjdXJyU3Ry
dWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25zKAorICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvaygp
LCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVz
dWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCi0jaW5jbHVk
ZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdCkKLSAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKLXsKLSAgICBBU1NFUlQobV9wcm90
b3R5cGUuaXNOdWxsKCkgfHwgbV9wcm90b3R5cGUuaXNPYmplY3QoKSk7Ci0gICAgaWYgKHByb3Rv
dHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoU3RydWN0dXJlKiBjdXJy
ZW50ID0gYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3Iu
YXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVh
ZCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBl
KGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgaWYgKG1f
cHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUq
IGN1cnJlbnQgPSBhc09iamVjdChtX3Byb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCi0gICAgICAgIG1f
dmVjdG9yLmFwcGVuZChjdXJyZW50KTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFk
LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5
cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIG1fdmVjdG9yLmFwcGVuZChwcm90
b3R5cGVTdHJ1Y3R1cmUpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbikKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9n
bG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGNoYWluLT5oZWFkKClb
aV07ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkp
OwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgdW5zaWduZWQgY291bnQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1f
Z2xvYmFsT2JqZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQot
Ci1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpCi17Ci19
Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKLXsK
LSAgICBKU1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3RvdHlwZTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGFz
T2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAhPSBtX3ZlY3RvcltpXSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IG1fdmVj
dG9yW2ldLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBjaGFpbi0+aGVhZCgpW2ldLmdl
dCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoY2hhaW4tPmhl
YWQoKVttX3ZlY3Rvci5zaXplKCldKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3Rv
cmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJl
YWRPbmx5IHwgQWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEludGVuZGVk
U3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbV92ZWN0b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJv
cGVydHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLUpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW5hbFByb3Rv
dHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rvci5pc0VtcHR5KCkpOwotICAgIGlm
IChtX3ZlY3Rvci5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGFzT2JqZWN0KG1fcHJvdG90
eXBlKTsKLSAgICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgpIC0gMl0t
PnN0b3JlZFByb3RvdHlwZSgpKTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpv
cGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotewot
ICAgIHJldHVybiBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2dsb2JhbE9iamVjdAotICAgICAg
ICAmJiBtX3Byb3RvdHlwZSA9PSBvdGhlci5tX3Byb3RvdHlwZQotICAgICAgICAmJiBtX3ZlY3Rv
ciA9PSBvdGhlci5tX3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpn
YXRoZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKSBjb25zdAot
ewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBKU09iamVjdCogY3Vy
cmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpOwotICAgICAgICBTdHJ1Y3R1
cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAgICAgdmVjdG9yLmFwcGVuZChDb25z
dGFudFN0cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRTdHJ1Y3R1cmUpKTsKLSAg
ICAgICAgY3VycmVudFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxv
b2t1cChtX2dsb2JhbE9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJl
Q2hhaW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFsT2JqZWN0KTsKLSAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJm1fcHJvdG90eXBlKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRQb2ludGVyKCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQo
b3V0LCAwKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIG91
dC5wcmludCgKLSAgICAgICAgIihnbG9iYWwgPSAiLCBSYXdQb2ludGVyKG1fZ2xvYmFsT2JqZWN0
KSwgIiwgaGVhZCA9ICIsCi0gICAgICAgIGluQ29udGV4dChtX3Byb3RvdHlwZSwgY29udGV4dCks
ICIsIHZlY3RvciA9IFsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9yW2ldLCBjb250ZXh0KSk7Ci0gICAg
b3V0LnByaW50KCJdKSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZpbmUgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbl9oCi0KLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgU3Ry
dWN0dXJlQ2hhaW47Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1wQ29udGV4dDsKLQotY2xhc3MgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IHsKLXB1YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSopOwotICAg
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSog
aGVhZCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJl
Q2hhaW4qIGNoYWluKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQg
Y291bnQpOwotICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7Ci0gICAgCi0gICAgYm9vbCBp
c1N0aWxsVmFsaWQoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoU3RydWN0dXJlQ2hhaW4qKSBj
b25zdDsKLSAgICBib29sIG1heUludGVyY2VwdFN0b3JlVG8oVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7Ci0gICAgYm9vbCBpc05vcm1hbGl6ZWQoKTsKLSAgICAKLSAgICBib29sIHRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCk7Ci0gICAgCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUo
KSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAgIAotICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0gICAgU3RydWN0dXJlKiBhdChzaXpl
X3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsgfQotICAgIFN0cnVjdHVy
ZSogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQot
ICAgIAotICAgIEpTT2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0OwotICAgIAotICAg
IFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmxhc3QoKTsgfQotICAg
IAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluJikgY29u
c3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0g
ICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotICAgIEpTVmFsdWUgbV9wcm90b3R5
cGU7Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9yOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxODcyNDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk0LDcgKzE5NCwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBj
b25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQog
ICAgIGJvb2wgaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9u
YXJ5S2luZCgpID09IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQ7IH0KICAgCi0gICAgYm9vbCBwcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBV
bmNhY2hlZERpY3Rpb25hcnlLaW5kICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZygpOyB9CisgICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtp
bmQKKyAgICAgICAgICAgICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
CisgICAgICAgICAgICAmJiAhKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgp
ICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgewor
ICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgICAgICAg
ICAmJiB0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKQorICAgICAgICAgICAg
JiYgdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCk7CisgICAgfQog
CiAgICAgLy8gV2UgdXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9yIHN0cnVjdHVyZXMg
dGhhdCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBwcmV2ZW50CiAgICAg
Ly8gREZHIGZyb20gaW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ugc3RydWN0dXJlcyBk
b24ndCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFwcGVhcnMuCkBAIC0y
MDIsNyArMjE0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCku
aGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gVHlw
ZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyht
X291dE9mTGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw2ICs1MzgsNyBAQCBwdWJsaWM6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCiAgICAgdm9pZCByZWdpc3Rl
cldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2lu
dCopOworICAgIAogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1l
cmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1
cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257422</attachid>
            <date>2015-07-23 19:34:09 -0700</date>
            <delta_ts>2015-07-23 21:27:47 -0700</delta_ts>
            <desc>some tweaking</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>210980</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODcyNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01ODgsNiArNTkwLDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2
MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIy
MTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNG
RjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmNwcCAqLzsgfTsKKwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuY3BwICovOyB9OworCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9w
ZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJG
MDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5NCw2ICs3MDQsOCBA
QAogCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5
NkIgLyogREZHRWRnZS5jcHAgKi87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmNwcCAqLzsgfTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjRCNTIyMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBG
RjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZG
IC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4
RUJENTgwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8q
IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlG
RiAvKiB1ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICov
OyB9OwpAQCAtMTM4Nyw4ICsxMzk5LDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8q
IFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NC
QzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMx
OEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8q
IFNwaWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cCAqLzsgfTsKLQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFs
aXplci5oICovOyB9OwogCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5
NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg1MSw2
ICsxODYxLDggQEAKIAkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0Qg
LyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFC
NDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdN
aW5pZmllZEdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Qx
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBk
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVG
MCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
SmV0dGlzb25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkx
OEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM0
Miw2ICsyMzU0LDE0IEBACiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFM0ZGMUI2MThB
QUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZn
L0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQzRTQwNDFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9w
ZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2
QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdC
YXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFD
RjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21p
bmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NDMsNiArMjQ2Myw4IEBACiAJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9
IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0Rjgx
QUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDVBMUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBwYXRoID0gZGZn
L0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzMwMTU4
RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fz
c2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfZGVjb2RlLmM7IHBhdGggPSBkaXNhc3Nl
bWJsZXIvdWRpczg2L3VkaXM4Nl9kZWNvZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMxNTEsOCArMzE3Myw2IEBACiAJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQ
YXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4
NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZDMTc5NzM4QjgwMDlERjc0NCAvKiBERkdG
YWlsZWRGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRmFpbGVkRmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RDE3OTczOEI4MDA5REY3NDQg
LyogREZHRmFpbGVkRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ZhaWxlZEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RTE3OTczOEI4MDA5REY3NDQgLyog
REZHRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0ZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NjksOCArNDQ4OSw2IEBACiAJCQkJQTdBOEFGMkIxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLywKLQkJCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCi0JCQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUg
LyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAwODA2NkRE
IC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMTJCQkZGMzFCMDQ0QTk4MDA2NjRCNjkg
LyogSW50bE9iamVjdC5jcHAgKi8sCkBAIC00ODUzLDYgKzQ4NzEsMTAgQEAKIAkJCQlBNzA0RDhG
RjE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCAqLywK
IAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8s
CiAJCQkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLywK
KwkJCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8sCisJCQkJ
MEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAgKi8sCisJCQkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggKi8sCiAJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0FsbG9jYXRvci5oICovLAogCQkJCUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFs
eXNpcy5oICovLApAQCAtNTAxMiw2ICs1MDM0LDggQEAKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCiAJCQkJMEY4RjE0MzExQURGMDkwMTAwRUQ3
OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwICovLAogCQkJCTBGOEYxNDMyMUFERjA5
MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCisJCQkJMEZGMkNENTkx
QjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKKwkJCQkw
RkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywK
IAkJCQkwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCAq
LywKIAkJCQkwRkMzQ0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmgg
Ki8sCiAJCQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8sCkBAIC01MzE3LDYgKzUzNDEsMTAgQEAKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0ExNEY1
QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkx
NENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLywK
KwkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwICovLAorCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oICovLAorCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCisJCQkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8sCiAJCQkJOTY5QTA3OTQwRUQxRDNBRTAw
RjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8q
IE9wY29kZS5oICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5o
ICovLApAQCAtNTMyOCw2ICs1MzU2LDggQEAKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0
MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUzN0Yw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKKwkJCQkwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLAorCQkJCTBGRDNFNDA4MUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGOTMzMjk5MTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCkBAIC01ODI3LDYgKzU4NTcsNyBAQAogCQkJ
CUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRDQjlGRiAvKiBERkdEaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBF
MUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUz
NENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
LApAQCAtNjA3OSw2ICs2MTEwLDcgQEAKIAkJCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyog
Q29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4ODE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRj
aGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERG
R011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0
NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjA4OCw3ICs2MTIwLDYgQEAKIAkJCQlBN0E4
QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAotCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJu
YWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5
IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAx
MTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMDEsNiArNjEzMiw3IEBA
CiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjM5Niw5ICs2NDI4LDExIEBACiAJCQkJMkFBRDk2
NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0Nh
bGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyog
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThC
NDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0Iy
MjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIx
QjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1h
dGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcw
ODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NDc1LDYgKzY1MDksNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEg
LyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFD
MTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Bo
aUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYg
LyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MjY2LDYgKzczMDEsNyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlD
b25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJB
IC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1
MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3
ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTcyNzYsNiArNzMxMiw3IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZU
TExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3
RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZG
MkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3
MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMjYsNiArNzM2Myw3IEBA
CiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2Vu
dFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzMzNiw3ICs3Mzc0LDYgQEAKIAkJ
CQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAw
QkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNG
OTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJw
cmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8q
IEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNTMsNiArNzM5MCw3
IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82
NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nl
c3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjAwLDYgKzc2Mzgs
NyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWlu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwQjFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzAxM0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4RiAv
KiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MDksNiArNzY0OCw3
IEBACiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRl
bXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE4RDNDRjFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJh
dG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ6OmZpcgogICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAKICAgICBtX2NvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgcmVtb3ZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBs
ZXhHZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKICAgICAvLyBo
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0CkBAIC00
MCwzMiArNDAsMjYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdQog
ICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
OworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAogICAg
IENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJbmxpbmVhYmxl
OwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAgIHJlc3VsdC5t
X2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3VudCkpOworICAg
IGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJlc3VsdC5tX2No
YWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25kaXRpb25TZXQu
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4gc2tpcCgpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWluLT50YWtlc1Ns
b3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRha2Vz
U2xvd1BhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0g
cmVzdWx0Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSog
Y3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAgICAgIAotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOworICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0
eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmli
dXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7Ci0gICAgfQor
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAg
ICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKICNkZWZp
bmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3RhdHVzKCkKICAg
ICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zm
c2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAgICAgfQogICAg
IApAQCAtOTcsMjEgKzk2LDE3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIENv
bXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAg
ICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KLSAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmlj
VmFsdWU7IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFpbi5nZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAog
cHJpdmF0ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
LSAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7
Ci0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYs
OCArMjA2LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJ
ZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVj
dHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4o
KSwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVz
Lm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlv
blNldCgpLCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAg
ICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQp
Ci0gICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNv
bmRpdGlvblNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0
dXMoV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlm
IChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNo
YWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1f
Y29uc3RhbnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRC
eUlkVmFyaWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBA
IEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50
JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikK
IHsKICAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29u
c3RhbnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFz
ZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1f
Y29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1h
a2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03
MiwxNiArNjcsNiBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZhcmlhbnQ6OmJhc2VT
dHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KIGJvb2wg
R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhl
cikKIHsKICAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZSkK
QEAgLTkwLDEwICs3NSwxMyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFh
cmVDb21wYXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldCA9
CisgICAgICAgIG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQp
OworICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2Nv
bnN0YW50Q2hlY2tzKTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTIsOCArMTAwLDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
IlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsK
KyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBpZiAobV9hbHRlcm5hdGVC
YXNlKQogICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChK
U1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3
ICs0Myw3IEBAIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFy
aWFudCgKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1
cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKLSAgICAgICAg
Y29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBudWxscHRyLAorICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzID0gbnVsbHB0cik7CiAgICAgCiAgICAgfkdldEJ5SWRWYXJpYW50KCk7CkBAIC01NSw5
ICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
aXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9Ci0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdCB7IHJldHVybiBt
X2FsdGVybmF0ZUJhc2U7IH0KLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0
OworCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIGEgY29uZGl0aW9uIHNldCBtZWFucyB0aGF0IHRo
aXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAg
ICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICAKQEAgLTcwLDggKzcxLDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgR2V0QnlJZFN0YXR1czsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQg
bV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0
YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9v
ZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3Rh
dHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQu
cHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91
dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZShtX29iamVjdCksIGNvbnRleHQpLCAiOiAiLCBpbkNv
bnRleHQobV9jb25kaXRpb24sIGNvbnRleHQpKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisg
ICAgU3RydXR1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24u
aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydXRjdXJlRW5zdXJlc1ZhbGlk
aXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3Qt
PnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRp
dHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QK
K3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0
cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZh
bGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlv
bi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBtX29iamVjdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQobV9v
YmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKTsKK30KKworYm9v
bCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhaWRpdHkoKSBjb25z
dAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5
Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBQcm9wZXJ0
eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgp
LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJs
ZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJp
bGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0
Y2hhYmxlKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBl
ZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9y
dCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKCFIZWFwOjppc01hcmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZl
cmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52
YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3Bl
cnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAg
ICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAg
ICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9v
YmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdp
dGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
eworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVy
dHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0
ZXMpOyAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNl
V2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJh
cnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAg
cmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2UodWlkLCBwcm90
b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVj
dCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIp
OworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90
b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29i
amVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25k
aXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCog
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOwor
ICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQs
IHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3Qg
PSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9u
OjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
ZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxl
bmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisg
ICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJv
cGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0K
KyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0
IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5z
aWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJp
YnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25k
aXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9v
bCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWly
ZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkg
KyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29u
ZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmpl
Y3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAg
CisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRp
Y2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJl
bnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cg
dG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
IGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwg
d2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBj
YXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAg
Ly8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2Vu
Y2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50
aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4K
KyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1
aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9
CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9u
YWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1
Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwg
dGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0
IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9y
IHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9p
ZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0
cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZh
bGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0
LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3Jk
aW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKworICAgIC8v
IENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkgY29uc2VydmF0aXZlbHkg
cmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0cnVjdHVyZSBhbG9uZSBk
b24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiB0
cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJlcyBzb21lIHdhdGNocG9p
bnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhlCisgICAgLy8gc3Ry
dWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9uIGhvbGRzIGJ5IHVz
aW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVjdHVyZUVuc3VyZXNWYWxp
ZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJv
b2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hvcnRoYW5kIGZvciBjb25k
aXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29sIHN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxs
IHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0
aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBp
bXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFBy
b3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6
TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmls
aXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9y
Y2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJl
KiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxl
KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVy
dHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hp
bmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVyaWVzU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24o
KS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBz
dGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBt
X2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2lu
ZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhp
cykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAg
IG51bUZvdW5kKys7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91
bmQgPT0gMSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6YXJlQ29tcGF0aWJsZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGEgOiAqdGhpcykgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBiIDogb3RoZXIpIHsKKyAgICAgICAgICAgIGlmICghYS5pc0NvbXBhdGlibGVX
aXRoKGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFv
dGhlci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHko
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3Ro
ZXIpIHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3Rp
bmdDb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXND
b21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub25FbXB0eShyZXN1bHQpOworfQorCitib29s
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBj
b25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRo
aXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAo
IWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlv
bi52YWxpZGl0eVJlcXVyaWVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExpdmUoKSBjb25zdAoreworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAg
ICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnBy
aW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgb3V0LnByaW50KGxpc3REdW1wSW5D
b250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCJdIik7Cit9
CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK25hbWVz
cGFjZSB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0aW9uKAorICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7CisgICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgIGlmIChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnBy
ZXNlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAg
fQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6IHsKKyAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKAorICAgICAgICAgICAgdm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkpOwor
ICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAg
ICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIoCisg
ICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5z
dG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbigpOworICAgIH0KK30KKworZW51bSBDb25jdXJyZW5jeSB7CisgICAgTWFpblRocmVhZCwK
KyAgICBDb25jdXJyZW50Cit9OworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVD
b25kaXRpb25zKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgSlNPYmplY3QqIHByb3RvdHlw
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCwK
KyAgICBDb25jdXJyZW5jeSBjb25jdXJyZW5jeSA9IE1haW5UaHJlYWQpCit7CisgICAgQVNTRVJU
KCEhcHJvdG90eXBlID09IChjb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNl
KSk7CisgICAgCisgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBjb25kaXRpb25z
OworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgp
KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KCk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2LmlzTnVs
bCgpKSB7CisgICAgICAgICAgICBpZiAoIXByb3RvdHlwZSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxp
ZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4odik7CisgICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJl
KHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3Rv
dHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQgbm90IGJlCisg
ICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IE1haW5U
aHJlYWQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIHRoaXNDb25kaXRpb25L
aW5kOworICAgICAgICBpZiAoa2luZCA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UgJiYg
b2JqZWN0ICE9IHByb3RvdHlwZSkKKyAgICAgICAgICAgIHRoaXNDb25kaXRpb25LaW5kID0gUHJv
cGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXND
b25kaXRpb25LaW5kID0ga2luZDsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIG5ld0NvbmRpdGlvbiA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwg
b3duZXIsIG9iamVjdCwgdWlkLCB0aGlzQ29uZGl0aW9uS2luZCk7CisgICAgICAgIGlmICghbmV3
Q29uZGl0aW9uIHx8ICFuZXdDb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6aW52YWxpZCgpOworICAgICAgICAKKyAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQo
bmV3Q29uZGl0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvYmplY3QgPT0gcHJvdG90eXBl
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8vIFZhbGlkYXRlIHRoZSBy
ZXN1bHQuCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgcHJlc2VuY2VDb3VudCA9IDA7CisgICAgICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlv
bnMpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICAg
ICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICAgICAgcHJl
c2VuY2VDb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChw
cmVzZW5jZUNvdW50ID09IDEpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDog
eworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiBjb25kaXRpb25zKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLmtpbmQo
KSA9PSBraW5kKTsKKyAgICB9IH0KKyAgICAKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlvbnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwKKyAgICAg
ICAgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6
QWJzZW5jZU9mU2V0dGVyKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUG90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVj
dCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJu
IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlwZSwgdWlkLAorICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisg
ICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRl
Q29uZGl0aW9ucygKKyAgICAgICAgdm0sIG51bGxwdHIsIGdsb2JhbE9iamVjdCwgaGVhZFN0cnVj
dHVyZSwgbnVsbHB0ciwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZWNlT2ZTZXR0ZXIsCisg
ICAgICAgIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKyNkZWZpbmUgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCIKKyNpbmNsZHVlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
QW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhl
IHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVlZCB0byBiZSBtZXQgZm9y
IHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2FuIGhhdmUgdGhlIGZvbGxv
d2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5OiBUaGVyZSBhcmUgbm8g
c3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisvLyBJbnZhbGlkOiBUaGUg
aGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6IFRoZXJlIGFyZSBzb21l
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdmFsaWQuCisKK2NsYXNz
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9yPE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICAqcmVzdWx0Lm1f
ZGF0YS0+dmVjdG9yID0gdmVjdG9yOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Rh
dGEgfHwgIW1fZGF0YS0+dmVjdG9yLmlzRW1wdHkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhOworICAgIH0KKyAg
ICAKKyAgICB0eXBlZGVmIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKiBpdGVyYXRvcjsK
KyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
ZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRh
LT52ZWN0b3IuYmVnaW4oKTsKKyAgICB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5lbmQoKTsKKyAgICB9CisgICAgCisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gZm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0OworICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvckNvbmRpdGlvbktpbmQoUHJvcGVydHlDb25kaXRp
b246OktpbmQpIGNvbnN0OworICAgIAorICAgIC8vIElmIHRoaXMgaXMgYSBjb25kaXRpb24gc2V0
IGZvciBhIHByb3RvdHlwZSBoaXQsIHRoZW4gdGhpcyBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB0
aGUKKyAgICAvLyBjb25kaXRpb24gb24gdGhlIHByb3RvdHlwZSBpdHNlbGYuIFRoaXMgYWxsb3dz
IHlvdSB0byBnZXQgdGhlIG9iamVjdCwgb2Zmc2V0LCBhbmQKKyAgICAvLyBhdHRyaWJ1dGVzIGZv
ciB0aGUgcHJvdG90eXBlLiBUaGlzIHdpbGwgUkVMRUFTRV9BU1NFUlQgdGhhdCB0aGVyZSBpcyBl
eGFjdGx5IG9uZSBQcmVzZW5jZQorICAgIC8vIGluIHRoZSBzZXQsIGFuZCBpdCB3aWxsIHJldHVy
biB0aGF0IHByZXNlbmNlLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNsb3RCYXNlQ29u
ZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbiBzZXRzIGFyZSBjb21w
YXRpYmxlIGlmIHRoZXkgYXJlIGJvdGggdmFsaWQgYW5kIGVhY2ggY29uZGl0aW9uIGluICp0aGlz
IGlzCisgICAgLy8gY29tcGF0aWJsZSB3aXRoIGVhY2ggY29uZGl0aW9uIGluIG90aGVyLgorICAg
IGJvb2wgYXJlQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IG90aGVyKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhIG5ldyBjb25k
aXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0aGUgb3RoZXIgb25lLiBUaGlzIHdp
bGwKKyAgICAvLyBmYWlsIGlmICF0aGlzLmFyZUNvbXBhdGlibGVXaXRoKG90aGVyKS4gV2hlbiBp
dCBmYWlscywgaXQgcmV0dXJucyBpbnZhbGlkKCkuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbWVyZ2VkV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIp
IGNvbnN0OworICAgIAorICAgIGJvb2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkgY29uc3Q7
CisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgYXJlU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBIZWxwZXJz
IGZvciB1c2luZyB0aGlzIGluIGEgdW5pb24uCisgICAgdm9pZCogcmVsZWFzZVJhd1BvaW50ZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihtX2RhdGEubGVha1Jl
ZigpKTsKKyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGFkb3B0
UmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYo
c3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGZyb21SYXdQb2lu
dGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBzdGF0aWNfY2FzdDxEYXRh
Kj4ocmF3UG9pbnRlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICAvLyBJbnRlcm5hbGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1c2luZyBh
IHBvaW50ZXIgdG8gYSBEYXRhIHRoYXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKyAgICAKKyAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcGFjdCBieSBoYXZpbmcgaXQgaW50
ZXJuYWxseSB1c2UgYSB2ZWN0b3IgdGhhdCBqdXN0IGhhcworICAgIC8vIHRoZSBub24tdWlkIHBv
cnRpb24gb2YgT2JqZWN0UHJvcGVydHlDb25kaXRpb24sIGFuZCB0aGVuIHJlcXVpcmluZyB0aGF0
IHRoZSBjYWxsZXJzIG9mIGFsbAorICAgIC8vIG9mIHRoZSBBUElzIHN1cHBseSB0aGUgdWlkLgor
ICAgIAorICAgIGNsYXNzIERhdGEgOiBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9CisgICAg
ICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsKKyAg
ICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBl
LAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHko
CisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhl
YWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywx
NCArMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nl
c3MoCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQpCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fY2hhaW5Db3VudChjaGFpbkNvdW50
KQogICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRp
dGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQog
ewotICAgIGlmIChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7
CiB9CiAKIEdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcxLDcgKzcwLDcgQEAg
Ym9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogewogICAgIGlmIChtX3N0
cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4u
Z2V0KCkpKQorICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNTdGlsbExpdmUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hC
dWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlz
aW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEzICs1MywxMiBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgR2V0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAg
ICAgICwgbV9jaGFpbkNvdW50KDApCiAgICAgewogICAgIH0KICAgICAKICAgICBHZXRCeUlkQWNj
ZXNzKAogICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8
SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogPSAw
LCB1bnNpZ25lZCBjaGFpbkNvdW50ID0gMCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwogICAgIAogICAg
IH5HZXRCeUlkQWNjZXNzKCk7CiAgICAgCkBAIC03Miw4ICs3MSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4g
bV9jaGFpbi5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX2NoYWluQ291bnQ7IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAg
ICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAgLTkxLDkgKzg5
LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgIAogICAgIEFj
Y2Vzc1R5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsKICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9jb25kaXRpb25T
ZXQ7IC8vIEZJWE1FIHdoYXQgYWJvdXQgYmFycmllcnM/CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNp
b24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw4IEBA
IFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKICAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5
RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKTsKICAg
ICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uY29weUZyb20oc3R1
YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIoCisg
ICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTY0LDYgKzY1LDkgQEAgUHV0QnlJZEFjY2VzcyBQ
dXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogCiBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2Vh
ayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBjb25zdAogeworICAgIGlmICghbV9jb25k
aXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgUmVwbGFjZToKICAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCkBAIC03NCwxNSArNzgsMTEgQEAgYm9v
bCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fbmV3U3RydWN0dXJlLmdldCgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtl
ZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CiAgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFp
bi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgIAogICAgIFB1dEJ5SWRBY2Nlc3MoKQogICAg
ICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudChVSU5UX01BWCkK
ICAgICB7CiAgICAgfQogICAgIApAQCAtNjIsMTQgKzYxLDE0IEBAIHB1YmxpYzoKICAgICAgICAg
SlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
CiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsK
ICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBU
cmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwg
b2xkU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2bSwgb3duZXIs
IGNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owog
ICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwogICAgICAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTUsOCAr
OTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAg
ICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAogICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CkBAIC0xMDQsMTAg
KzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgICAg
ICByZXN1bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAg
ICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Ci0gICAgICAgICAg
ICByZXN1bHQubV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKLSAgICAgICAgfQorICAgICAgICBy
ZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1
c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUg
PSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0NiwxNyArMTQxLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQog
ICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAg
ICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGNoYWlu
Q291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0dGVyKCkgfHwgaXNDdXN0
b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluQ291bnQ7Ci0gICAgfQorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBt
X2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgp
IGNvbnN0CiAgICAgewpAQCAtMTc4LDggKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzVHlw
ZSBtX3R5cGU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1Y3R1cmU7CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQcm9wZXJ0
eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgi
PGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50
KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNl
IFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBtX29mZnNldCwgIiB3aXRoIGF0
dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJz
ZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0
aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTT2JqZWN0KHByb3RvdHlwZSgpKSwgY29udGV4dCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnBy
aW50KCIgd2l0aCAiLCBpbkNvbnRleHQoSlNWYWx1ZTo6ZW5jb2RlKHJlcXVpcmVkVmFsdWUoKSks
IGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQor
Citib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2Up
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2Ug
UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVudE9mZnNldCAh
PSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJp
YnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJl
KCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhl
CisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJhY3ks
IGFuZCBtYXliZSBtb3JlIHJpc2t5IHRoYW4gd2Ugd2FudC4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQorICAgICAgICAKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUgPSBiYXNlLT5nZXREaXJlY3Qo
Y3VycmVudE9mZnNldCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gcmVxdWlyZWRWYWx1
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6
CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJh
c2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1l
IHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNhbiBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwg
YW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRvdyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24g
dGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBhZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAg
Ly8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZlY3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1w
dXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIgc2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZh
bGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNv
bnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZh
cmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVz
IHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRo
ZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAgICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0
IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFibGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UK
KyAgICAgICAgLy8gc2hvbGRuJ3QgaGF2ZSBhIFRPQ1RPVSByYWNlIGVpdGhlci4KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICAKKyAgICAg
ICAgV2F0Y2hwb2ludFNldCogc2V0OworICAgICAgICBzd2l0Y2ggKGVmZm9ydCkgeworICAgICAg
ICBjYXNlIE1ha2VOb0NoYW5nZXM6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPnByb3Bl
cnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbnN1cmVXYXRjaGFiaWxpdHk6CisgICAgICAgICAgICBzZXQgPSBzdHJ1
Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KAorICAgICAgICAgICAgICAg
ICpIZWFwOjpoZWFwKHN0cnVjdHVyZSktPnZtKCksIG9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFzZXQtPmlzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAor
eworICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVj
dHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJl
LCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9y
dCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sK
KyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkK
KyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKS5p
c0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2Vs
bCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tl
ZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpKQor
ICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFzUmVx
dWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQgY29u
ZGl0aW9uKQoreworICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNl
OgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQu
cHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2Ui
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIFBy
b3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2Vz
OworCitjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsK
KyAgICAgICAgUHJlc2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VPZlNl
dHRlciwKKyAgICAgICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0
aGlzIHdpbGwgYmUgYSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJl
IHRyYW5zaXRpb25zLCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0
aGUgbmV3IHN0cnVjdHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKCkK
KyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkKKyAg
ICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAg
UHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgeworICAg
ICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29u
ZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1
bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9w
ZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1
cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAg
ICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90
b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJl
dHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJp
ZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRlcjsK
KyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlv
biBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNldHRl
cldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQuZXF1aXZhbGVu
Y2UudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVy
KHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIAorICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wgaGFzT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2UgfTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09m
ZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBi
b29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQ
cmVzZW5jZSB9OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0F0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLmF0
dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyBy
ZXR1cm4gISEqdGhpcyAmJiAobV9raW5kID09IEFic2VuY2UgfHwgbV9raW5kID09IEFic2VuY2VP
ZlNldHRlcik7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNQcm90b3R5cGUoKSk7CisgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJv
dG90eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsgfQorICAgIEpTVmFsdWUg
cmVxdWlyZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUmVxdWlyZWRW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWU7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0
ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9raW5kKTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQ
cmVzZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAg
ICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFi
c2VuY2UucHJvdG90eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2
YWxlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1
LmVxdWl2YWxlbmNlLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91
aWQgIT0gb3RoZXIubV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAg
ICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0Cisg
ICAgICAgICAgICAgICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2Vu
Y2UuYXR0cmlidXRlczsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2Vu
Y2VPZlNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90
aGVyLnUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAg
ICAgICAgICByZXR1cm4gYS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNl
LnZhbHVlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1f
a2luZCA9PSBBYnNlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUg
Y29tcGF0aWJsZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZm
ZXJlbnQgdWlkcy4gSWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVj
aWRlIGhvdyB0byByZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
CisgICAgLy8gYSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2Vz
IHlvdSdsbCB3YW50IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGlu
IG90aGVyIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRo
aXMgd2lsbCBhbHNvIHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlr
ZSBQcmVzZW5jZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGlu
dmFsaWQKKyAgICAvLyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcu
CisgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkg
IT0gb3RoZXIudWlkKCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0
J3Mgc3RydWN0dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRl
ZC4KKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQg
dG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdU
b1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENo
ZWNrcyBpZiB0aGUgY29uZGl0aW9uIGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdp
dmVuIG9iamVjdCBhbmQgc3RydWN0dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1
cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50
ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29u
ZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRp
ZXMuIElmIHRoZSBvYmplY3QgaXMgbm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBp
bmRpY2F0ZXMgdGhhdCBjaGVja2luZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVu
IHN0cnVjdHVyZSBndWFyYW50ZWVzIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9i
amVjdCBpcworICAgIC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBv
dGhlciB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBj
b25kaXRpb24gaW4gYWRkaXRpb24gdG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlz
U3RpbGxWYWxpZChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0Owor
ICAgIAorICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJs
ZSwgYnV0IGNvdWxkIGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFw
cHJvcHJpYXRlIHdhdGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50
cyBhcmUgZW5hYmxlZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24g
dGhlIHByb3BlcnR5IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNw
YWNlIGZvcgorICAgIC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQg
bmV2ZXIgZ2V0IHZlcnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFi
bGUgd2F0Y2hpbmcsIHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQuCisgICAgZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlz
IHRoZSBkZWZhdWx0LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2Yg
YW55IFN0cnVjdHVyZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYg
dGhlIHByb3BlcnR5IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1h
a2UKKyAgICAgICAgLy8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5n
IGZyb20gYSBKSVQgdGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJl
ZmVyYWJsZSB3aGVuIGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24g
Zm9yIHRoZSBmaXJzdCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2lu
dCBmaXJlIHRoYXQgY2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBh
CisgICAgICAgIC8vIHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGlu
ZyBpbXBsaWVzIHRoYXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0
IHRvIG1ha2UgaXQgcHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5n
IHdhdGNoZWQgbWF5IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVm
ZXIgdG8gb25seSBhc3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJl
ZW4KKyAgICAgICAgLy8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAg
ICBNYWtlTm9DaGFuZ2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0
byBlbnN1cmUgdGhhdCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhh
cyBubworICAgICAgICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVz
dCBtZWFucyB0aGF0IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyBy
ZXBsYWNlbWVudCB3YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxl
ZCBhbHJlYWR5LiBEbyBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywg
c2luY2UgdGhlIGFjdCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUu
CisgICAgICAgIEVuc3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkg
Ynkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1
cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wg
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3Ry
dWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBN
YWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBz
dGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJh
bnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlz
V2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIs
IFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJv
b2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9m
IG91ciBjb25kaXRpb25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9v
bCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMg
YXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAg
IHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBX
YXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlk
OworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFs
ZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0
IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25I
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwxOCBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCi0gICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
LSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IGludGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENo
YWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywg
c3RydWN0dXJlLCBjaGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9w
Y29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0
aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsX291dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzb25jdXJyZW50bHko
CisgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHByb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOworICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
c3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGludGVuZGVkQ2hhaW4uZ2V0KCksIG9mZnNldCk7Cisg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0
dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBt
YXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0x
NjUsMTYgKzE2NCwxNCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAogICAgICAgICAgICAgc3R1YkluZm8t
PnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAg
ICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgUmVmUHRyPElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT51
LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKSB7Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9w
dFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJv
ZmlsZWRCbG9jaywgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1
cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0
aW9uLmNoYWluLmdldCgpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRy
YW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBj
aGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNl
dCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgfQpAQCAtMjE5LDE1ICsyMTYsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJl
KCktPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhz
bG93UGF0aFN0YXRlKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gY2hhaW47Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hh
aW4oCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBhY2Nlc3Mub2xkU3Ry
dWN0dXJlKCksIGFjY2Vzcy5jaGFpbigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2hh
aW4tPmlzU3RpbGxWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwg
Y2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1
Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBA
IC0yNTMsNyArMjQ2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ss
ICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojpz
ZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0
dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0
YXR1cy5jb25kaXRpb25TZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShj
YWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzY4LDIyICszNjEsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgp
KQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAg
Ci0gICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAgICBpZiAoIWlz
RGlyZWN0KSB7Ci0gICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAg
ICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFkLW9ubHkgcHJv
cGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNl
cHRTdG9yZVRvKHVpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBj
aGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9yIGRp
Y3Rpb25hcmllcykKLSAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhlIGRpY3Rpb25hcnkg
Y2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbm90IGJlZW4KLSAg
ICAgICAgICAgIC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0cmFuc2l0aW9uLiBB
bmQgcmVhbGx5IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKLSAgICAgICAgICAgIC8vIGJh
aWwgaGVyZSBpcyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9wdGlt
aXppbmcgSklUIGdvIGFuZCBmbGF0dGVuCi0gICAgICAgICAgICAvLyBkaWN0aW9uYXJpZXMgaWYg
d2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3ZXJlIG5ldmVy
IHVzZWQgYXMKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUgcHJvdG90
eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBvZgotICAg
ICAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwuCi0gICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6ZWQoKSkKKyAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgICAgICB9CiAgICAgCkBAIC0zOTQsNyArMzc2LDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQu
YXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4uZ2V0KCksIG9mZnNldCkpOworICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRp
b25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNp
b24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0
QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9raW5kID0gb3RoZXIubV9raW5kOwogICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CiAgICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9j
b25zdGFudENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJh
c2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29m
ZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQog
ICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1
cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNjQsMjkgKzYzLDI2IEBAIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGMKIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gVHJhbnNpdGlvbjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7
CiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgIGlmIChzdHJ1
Y3R1cmVDaGFpbikKLSAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQu
bV9jb25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gU2V0dGVyOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBp
ZiAoY2hhaW4pIHsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9jb25zdGFu
dENoZWNrcyk7Ci0gICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBjaGFpbi0+dGVybWlu
YWxQcm90b3R5cGUoKTsKLSAgICB9CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxs
TGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTEzNCwxNiArMTMwLDEyIEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMo
KSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQg
UHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAorSlNPYmplY3QqIFB1dEJ5SWRW
YXJpYW50OjphbHRlcm5hdGVCYXNlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoa2luZCgpID09IFNl
dHRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBz
dHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZv
cihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2tpbmQgPT0gU2V0dGVyKTsKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VD
b25kaXRpb24oKS5vYmplY3QoKTsKIH0KIAogYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRv
TWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQpAQCAtMTk2LDYgKzE4OCw3IEBAIGJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAg
ICBBU1NFUlQoIXJlcGxhY2UuY29uZGl0aW9uU2V0KCkpOwogICAgIAogICAgIC8vIFRoaXMgc29y
dCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNo
IHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAogICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVy
ZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlz
IGRvZXNuJ3QKQEAgLTIzMiwxMyArMjI1LDEzIEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQoUHJpbnQKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0
aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAg
ICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIs
IFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29u
dGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29u
dGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
Ij4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoKICAgICAg
ICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29u
c3RhbnRDaGVja3MoKSwgY29udGV4dCksICJdIik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9j
b25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNl
KQogICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQo
SlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgi
LCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAgICAgICAgOiBt
X2tpbmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCi0gICAgICAg
ICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9m
ZnNldCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYgKzUzLDE1IEBAIHB1YmxpYzoKICAgICBQdXRC
eUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBv
cGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFy
aWFudCByZXBsYWNlKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShj
b25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xk
U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAg
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwogICAgIAogICAg
IEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIApAQCAtMTAwLDEwICs5
OCw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAg
IGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7
IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTEx
MSwxMyArMTA2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAgfQog
ICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fYWx0ZXJuYXRlQmFz
ZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsK
KyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0OwogICAgIAogICAgIENhbGxMaW5r
U3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewpAQCAtMTM2LDggKzEyNSw3IEBA
IHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0
dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0
ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAg
ICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDYsMjQgKzQ2LDI5IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFN0
cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJu
YWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1
c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KLSAg
ICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0
IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNh
bCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0gICAgbV9o
b2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAg
aWYgKCFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmls
aXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVt
aXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAgICAvLyBUaGF0
IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhl
IHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9y
IGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAgICAgICBtX2hv
bGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCkt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKQogewogfQogCi1T
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCog
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFkKTsKIH0KIAog
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJlZlB0cjxXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9jayogY29kZUJs
b2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7CiAg
ICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVmKG5ldyBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykpOwpAQCAtNzIs
NyArNzcsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvCiAgICAg
ICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAgcmV0dXJuIGhv
bGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSArNDcsMTEgQEAg
Y2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQotICAg
ICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9s
ZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAgIDogbV9rZXko
a2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25leHQoV1RGOjpt
b3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKICAgICBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpAQCAtODMsMTEg
KzgxLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0
Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgc3Rh
dGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFk
ZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKik7
CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgsMTIgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoK
ICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKICAgICBj
YXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhh
dmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgsMTAgQEAgYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJh
bnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjpp
c01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAg
IHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAg
ICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHUu
cHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8g
UHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQ
dXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNE
aXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50
ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc1
LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwog
ICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRk
V2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKICAgICB7CiAgICAg
ICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5j
ZUFuZEFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0
aGlzKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRpdGlv
bik7CiAgICAgfQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpAQCAtMjE3LDIzICsyMTgs
MTIgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAgICAgICB9IGdldEJ5SWRT
ZWxmOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1
Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFN0cnVjdHVyZT4gcHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVj
dDsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAg
ICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgOiAxOwot
ICAgICAgICB9IGdldEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFBv
bHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0QnlJZExpc3Q7CiAgICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJl
dmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
c3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4g
Y2hhaW47CisgICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7CiAgICAgICAgIH0gcHV0
QnlJZFRyYW5zaXRpb247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpF
cXVpdmFsZW5jZSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJs
ZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRp
b25XYXRjaHBvaW50KCZtX3N0cnVjdHVyZVdhdGNocG9pbnQpOworICAgIAorICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IG1fa2V5LT5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENvbmN1cnJl
bnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXkub2JqZWN0
KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQp
OworICAgIHNldC0+YWRkV2F0Y2hwb2ludCgmbV9wcm9wZXJ0eVdhdGNocG9pbnQpOworfQorCit2
b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6ZmlyZShjb25zdCBG
aXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgLy8gT25lIG9mIHRoZSB3YXRjaHBvaW50cyBmaXJl
ZCwgYnV0IHRoZSBvdGhlciBvbmUgZGlkbid0LiBNYWtlIHN1cmUgdGhhdCBuZWl0aGVyIG9mIHRo
ZW0gYXJlCisgICAgLy8gaW4gYW55IHNldCBhbnltb3JlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdz
IGJ5IGFsbG93aW5nIHVzIHRvIHJlaW5zdGFsbCB0aGUgd2F0Y2hwb2ludHMKKyAgICAvLyB3aGVy
ZXZlciBmcm9tIHNjcmF0Y2guCisgICAgaWYgKG1fc3RydWN0dXJlV2F0Y2hwb2ludC5pc09uTGlz
dCgpKQorICAgICAgICBtX3N0cnVjdHVyZVdhdGNocG9pbnQucmVtb3ZlKCk7CisgICAgaWYgKG1f
cHJvcGVydHlXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fcHJvcGVydHlXYXRjaHBv
aW50LnJlbW92ZSgpOworICAgIAorICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNv
bmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2Vt
Ymx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2lu
dCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91
dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7Cisg
ICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7
CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0
dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0
YWlsKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6
OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWls
JiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAor
ICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fc3RydWN0
dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOwor
fQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6UHJvcGVy
dHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWls
KQoreworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3Byb3BlcnR5V2F0Y2hw
b2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMp
IC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRj
aHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7
IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBTdHJ1
Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmly
dHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAg
fTsKKyAgICBjbGFzcyBQcm9wZXJ0eVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7Cisg
ICAgcHVibGljOgorICAgICAgICBQcm9wZXJ0eVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYp
IG92ZXJyaWRlOworICAgIH07CisgICAgCisgICAgdm9pZCBmaXJlKGNvbnN0IEZpcmVEZXRhaWwm
KTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnQgbV9zdHJ1Y3R1cmVXYXRj
aHBvaW50OworICAgIFByb3BlcnR5V2F0Y2hwb2ludCBtX3Byb3BlcnR5V2F0Y2hwb2ludDsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LndhdGNoaW5nUmVxdXJpZXNTdHJjdXR1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgha2V5LndhdGNo
aW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tl
eS5pc1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCkt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sK
KyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNo
YWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGRh
dGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlz
KSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgfQorICAg
IAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFkYXB0YXRpb24g
b2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0cmluZ0ZpcmVE
ZXRhaWwgZGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAgIG1fY29kZUJs
b2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVk
V2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
OyB9CisgICAgCisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsMTIg
QEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJv
b2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRl
cm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcyk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2Rl
KiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3Ry
dWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5v
ZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9w
ZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0
QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdl
dEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwg
Tm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUg
PSBHZXRCeU9mZnNldCk7CisgICAgCisgICAgTm9kZSogbG9hZChOb2RlKiBiYXNlLCBjb25zdCBH
ZXRCeUlkVmFyaWFudCYgdmFyaWFudCk7CisgICAgICAgIAogICAgIHZvaWQgaGFuZGxlR2V0QnlJ
ZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUq
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRT
dGF0dXMmKTsKQEAgLTIxMiw3ICsyMTcsMzMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVB1
dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5v
ZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCk7
Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
KTsKKyAgICAKKyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSog
YmFzZSwgUHJvcGVydHlPZmZzZXQpOworCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEgd2F0Y2hw
b2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBSZXR1cm5zIGZhbHNlIGlm
IHRoZQorICAgIC8vIGNvbmRpdGlvbiBubyBsb25nZXIgaG9sZHMsIGFuZCB0aGVyZWZvcmUgbm8g
cmVhc29uYWJsZSBjaGVjayBjYW4gYmUgZW1pdHRlZC4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCisgICAgR2V0QnlPZmZzZXRDYXNlIHByb21v
dGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0Q2FzZSk7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lz
dGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBJdCBt
dXN0IGJlIGEgUHJlc2VuY2UKKyAgICAvLyBjb25kaXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byBw
cm9tb3RlIGEgUHJlc2VuY2UgY29uZGl0aW9uIHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbi4K
KyAgICAvLyBFbWl0cyBjb2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNvbmRpdGlv
biBndWFyZHMsIGFuZCByZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRl
ZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlmIHRoZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLgor
ICAgIEdldEJ5T2Zmc2V0Q2FzZSBwbGFuTG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSwgTm9kZVR5cGUg
PSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAg
ICAvLyBDYWxscyBjaGVjaygpIGZvciBlYWNoIGNvbmRpdGlvbiBpbiB0aGUgc2V0OiB0aGF0IGlz
LCBpdCBlaXRoZXIgZW1pdHMgY2hlY2tzIG9yIHJlZ2lzdGVycworICAgIC8vIHdhdGNocG9pbnRz
IChvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28pIHRvIG1ha2UgdGhlIGNvbmRpdGlvbnMgaG9s
ZC4gSWYgYW55IG9mIHRob3NlCisgICAgLy8gY29uZGl0aW9ucyBhcmUgbm8gbG9uZ2VyIGNoZWNr
YWJsZSwgcmV0dXJucyBmYWxzZS4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0Jik7CisgICAgCisgICAgLy8gQ2FsbHMgY2hlY2soKSBmb3IgdGhvc2UgY29u
ZGl0aW9ucyB0aGF0IGFyZW4ndCB0aGUgc2xvdCBiYXNlLCBhbmQgY2FsbHMgbG9hZCgpIGZvciB0
aGUgc2xvdAorICAgIC8vIGJhc2UuIERvZXMgYSBjb21iaW5hdGlvbiBvZiB3YXRjaHBvaW50IHJl
Z2lzdHJhdGlvbiBhbmQgY2hlY2sgZW1pc3Npb24gdG8gZ3VhcmQgdGhlCisgICAgLy8gY29uZGl0
aW9ucywgYW5kIGVtaXRzIGNvZGUgdG8gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2xvdCBiYXNl
LiBSZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0
dXJucyBudWxsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyB3ZXJlIG5vIGxvbmdlciBjaGVja2Fi
bGUuCisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKIAogICAgIHZvaWQgcHJlcGFy
ZVRvUGFyc2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJDYWNoZXMoKTsKQEAgLTcwNiw2ICs3Mzcs
OSBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGUqIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVD
aGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgeworICAgICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcm91dGUgdG8gZW1pdFByb3BlcnR5Q2hlY2ssIG5vdCB0
aGUgb3RoZXIgd2F5IGFyb3VuZC4gQnV0IGN1cnJlbnRseSwKKyAgICAgICAgLy8gdGhpcyBnZXRz
IG5vIHByb2ZpdCBmcm9tIHVzaW5nIGVtaXRQcm9wZXJ0eUNoZWNrKCkgc2luY2Ugd2UnbGwgbm9u
LWFkYXB0aXZlbHkgd2F0Y2ggdGhlCisgICAgICAgIC8vIG9iamVjdCdzIHN0cnVjdHVyZSBhcyBz
b29uIGFzIHdlIG1ha2UgaXQgYSB3ZWFrSlNDb3NudGFudC4KICAgICAgICAgTm9kZSogb2JqZWN0
Tm9kZSA9IHdlYWtKU0NvbnN0YW50KG9iamVjdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tT
dHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgb2Jq
ZWN0Tm9kZSk7CiAgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwpAQCAtMjI0MCwxNSArMjI3NCw4
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBOb2RlVHlwZSBvcCkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQogewotICAgIGlm
IChiYXNlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0g
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1
cmVTZXQsIG9mZnNldCkpIHsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7
Ci0gICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29uc3RhbnQpOwotICAgICAgICB9
Ci0gICAgfQotICAgIAogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKQEAgLTIy
NjQsNiArMjI5MSwyNCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQo
CiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgY29u
c3Qgc3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCit7CisgICAgaWYgKGJhc2UtPmhh
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRy
eUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNldCwgb2Zm
c2V0KSkgeworICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAgICAg
ICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIG9mZnNldCwgb3ApOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkK
K3sKKyAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgIHByZWRpY3Rpb24sIGJh
c2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKSwgb2Zmc2V0LCBvcCk7Cit9CisK
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQogewog
ICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKQEAgLTIyODEsMTAgKzIzMjYsMjE2IEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRHZXRCeU9m
ZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCit7CisgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOworICAgIGlmIChpc0lubGlu
ZU9mZnNldChvZmZzZXQpKQorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOworICAgIGVs
c2UKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJh
c2UpOworICAgIAorICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLmFkZCgpOworICAgIGRhdGEtPm9mZnNldCA9IG9mZnNldDsKKyAgICBkYXRh
LT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAKKyAgICBOb2RlKiBn
ZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOworCisgICAgcmV0dXJuIGdldEJ5T2Zmc2V0Owor
fQorCitib29sIEJ5dGVDb2RlUGFyc2VyOjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRp
dGlvbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAoIWNvbmRpdGlv
bi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLAorICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksCisgICAgICAg
IHdlYWtKU0NvbnN0YW50KGNvbmRpdGlvbi5vYmplY3QoKSkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitHZXRCeU9mZnNldENhc2UgQnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KEdl
dEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2
ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVj
ayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAgICBpZiAo
Z2V0Q2FzZS5raW5kKCkgPT0gR2V0QnlPZmZzZXRDYXNlOjpMb2FkRnJvbVByb3RvdHlwZQorICAg
ICAgICAmJiBnZXRDYXNlLnByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2go
KSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eShnZXRDYXNlLnByb3RvdHlwZSgpLT52YWx1ZSgpLCBnZXRhc2UucHJvdG90eXBl
KCktPnN0cnVjdHVyZSgpLCBnZXRDYXNlLm9mZnNldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBH
ZXRCeU9mZnNldENhc2U6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKGNvbnN0YW50KSk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBnZXRDYXNlOworfQorCitHZXRCeU9mZnNldENhc2UgQnl0ZUNv
ZGVQYXJzZXI6OnBsYW5Mb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIC8vIFdlIG1pZ2h0IHByb21vdGUgdGhpcyB0byBF
cXVpdmFsZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBzdWNoIHByb21v
dGlvbgorICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5IHRoaXMgY2Fu
bm90IGJlIGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8vIE5v
bmUgb2YgdGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEgbG9hZCBvZiBh
biBFcXVpdmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBwb3J0aW5nIGl0
IHdvdWxkIGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVMRUFTRV9BU1NF
UlQoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworICAg
IAorICAgIC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRoaXMsIGZyb20g
bW9zdCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAgLy8gMSkgV2F0
Y2hwb2ludCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBhIGNvbnN0YW50
IG5vZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIgY29kZSBpcyBl
bWl0dGVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMgbmV2ZXIgcmVn
aXN0ZXJlZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBjb2RlIGFuZCB3
ZSB3b24ndCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QKKyAgICAvLyAg
ICB0cmFuc2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJsZSByaWdodCBu
b3cuCisgICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJl
bnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQgYnkgdGhlCisg
ICAgLy8gICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNoIHRoZSBzdHJ1
Y3R1cmUgYW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8vICAgIGNvbmRp
dGlvbiwgc2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBjb25zdGFudCBp
biBJUiB3aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUgc3RydWN0dXJl
IGFueXdheSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUgY29uZGl0aW9u
LgorICAgIC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJyZW50
IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0aGUKKyAgICAv
LyAgICBERkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSBhbmQg
IWRmZ1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0aGUgY29uZGl0
aW9uLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRvIGVtaXQgYSBs
b2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5vdCB3YXRjaGFi
bGUuIEVtaXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQgYSBsb2FkLgor
ICAgIC8vCisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBHaXZlIHVwIGFu
ZCByZXR1cm4gbnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWdyZWUgb24gd2hhdCB0
aGUgc3RydWN0dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGluZyB0aGVzZSB2YXJpb3Vz
CisgICAgLy8gY2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9i
amVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRvIHByb21vdGUg
UHJlc2VuY2UgdG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5nIGFueXRoaW5n
IGVsc2UKKyAgICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4gQWxzbywgdGhl
cmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0CisgICAgLy8g
d2UgZG9uJ3Qgd2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVxdWl2YWxlbmNl
IChzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAoMiksIGFuZCAoMykg
YWJvdmUpLgorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQoY29uZGl0aW9uLm9mZnNl
dCgpKSkgeworICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNhdXNlIG9ubHkgdGhlIEdD
IGNhbiBjYXVzZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdhcmJhZ2UKKyAgICAgICAg
Ly8gdmFsdWUuCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRpb24ub2JqZWN0KCktPmdl
dERpcmVjdChjb25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBlcXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgICAgICBjb25k
aXRpb24ub2JqZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOworICAgICAgICBpZiAobV9n
cmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlPZmZzZXRDYXNlOjpjb25zdGFudChtX2dyYXBoLmZyZWV6ZSh2YWx1ZSkpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSdsbCBoYXZlIHRvIG1hdGVyaWFs
aXplIHRoZSBjb25kaXRpb24ncyBiYXNlIGFzIGEgY29uc3RhbnQgaW4gREZHIElSLiBPbmNlCisg
ICAgLy8gd2UgZG8gdGhpcywgdGhlIGZyb3plbiB2YWx1ZSB3aWxsIGhhdmUgaXRzIG93biBpZGVh
IG9mIHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4gVXNlIHRoYXQgZnJvbQorICAgIC8vIG5vdyBvbiBq
dXN0IGJlY2F1c2UgaXQncyBsZXNzIGNvbmZ1c2luZy4KKyAgICBGcm96ZW5WYWx1ZSogYmFzZSA9
IG1fZ3JhcGguZnJlZXplKGNvbmRpdGlvbi5vYmplY3QoKSk7CisgICAgc3RydWN0dXJlID0gYmFz
ZS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgLy8gQ2hlY2sgaWYgdGhlIHN0cnVjdHVyZSB0aGF0
IHdlJ3ZlIHJlZ2lzdGVyZWQgbWFrZXMgdGhlIGNvbmRpdGlvbiBob2xkLiBJZiBub3QsIGp1c3Qg
Z2l2ZQorICAgIC8vIHVwLiBUaGlzIGlzIGNhc2UgKDUpIGFib3ZlLgorICAgIGlmICghY29uZGl0
aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4g
R2V0QnlPZmZzZXRDYXNlKCk7CisgICAgCisgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRj
aGVkIGJ5IHRoZSBERkcgYWxyZWFkeSwgdGhlbiBqdXN0IHVzZSB0aGlzIGZhY3QgdG8gZW1pdCB0
aGUgbG9hZC4KKyAgICAvLyBUaGlzIGlzIGNhc2UgKDIpIGFib3ZlLgorICAgIGlmIChzdHJ1Y3R1
cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChH
ZXRCeU9mZnNldENhc2U6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZzZXQo
KSkpOworICAgIAorICAgIC8vIElmIHdlIGNhbiB3YXRjaCB0aGUgY29uZGl0aW9uIHJpZ2h0IG5v
dywgdGhlbiB3ZSBjYW4gZW1pdCB0aGUgbG9hZCBhZnRlciB3YXRjaGluZyBpdC4gVGhpcworICAg
IC8vIGlzIGNhc2UgKDMpIGFib3ZlLgorICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNv
bmRpdGlvbikpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldENh
c2U6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZzZXQoKSkpOworICAgIAor
ICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oYmFzZSkp
OworICAgIAorICAgIC8vIFdlIGNhbid0IHdhdGNoIGFueXRoaW5nIGJ1dCB3ZSBrbm93IHRoYXQg
dGhlIGN1cnJlbnQgc3RydWN0dXJlIHNhdGlzZmllcyB0aGUgY29uZGl0aW9uLiBTbywKKyAgICAv
LyBjaGVjayBmb3IgdGhhdCBzdHJ1Y3R1cmUgYW5kIHRoZW4gZW1pdCB0aGUgbG9hZC4KKyAgICBh
ZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwgCisgICAgICAgIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAgICAgICAgd2Vha0pTQ29uc3RhbnQo
YmFzZU5vZGUpKTsKKyAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRDYXNl
Ojpsb2FkRnJvbVByb3RvdHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKK30KKworTm9k
ZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIEdldEJ5T2Zmc2V0IGdldENhc2UsIE5vZGVUeXBlIG9wKQoreworICAg
IHN3aXRjaCAoZ2V0Q2FzZS5raW5kKCkpIHsKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhnZXRDYXNlLmNvbnN0YW50KCkpKTsKKyAgICBjYXNlIExv
YWRGcm9tUHJvdG90eXBlOiB7CisgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChK
U0NvbnN0YW50LCBPcEluZm8oYmFzZSkpOworICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZz
ZXQocHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIGdldENhc2Uub2Zmc2V0
KCksIG9wKTsKKyAgICB9CisgICAgY2FzZSBMb2FkOgorICAgICAgICAvLyBXaWxsIG5ldmVyIHNl
ZSB0aGlzIGZyb20gcGxhbkxvYWQoKS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIE5vZGVUeXBlIG9wKQoreworICAg
IEdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gcGxhbkxvYWQocHJlZGljdGlvbiwgY29uZGl0aW9u
KTsKKyAgICByZXR1cm4gbG9hZChwcmVkaWN0aW9uLCBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5z
dXJlKGNvbmRpdGlvbi51aWQoKSksIGdldENhc2UsIG9wKTsKK30KKworYm9vbCBCeXRlQ29kZVBh
cnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCkKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6
IGNvbmRpdGlvblNldCkgeworICAgICAgICBpZiAoIWNoZWNrKGNvbmRpdGlvbikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBOb2RlVHlwZSBvcCkK
K3sKKyAgICBOb2RlKiByZXN1bHQgPSBudWxscHRyOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29uZGl0aW9uU2V0KSB7CisgICAgICAgIHN3aXRj
aCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQ
cmVzZW5jZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOyAvLyBTaG91bGQg
b25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhlc2UuCisgICAgICAgICAgICByZXN1bHQgPSBsb2Fk
KHByZWRpY3Rpb24sIGNvbmRpdGlvbiwgb3ApOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICghY2hlY2soY29uZGl0aW9uKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpsb2FkKE5vZGUqIGJhc2UsIGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50KQorewor
ICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOworICAgIAorICAgIFNwZWN1bGF0
ZWRUeXBlIGxvYWRQcmVkaWN0aW9uOworICAgIE5vZGVUeXBlIGxvYWRPcDsKKyAgICBpZiAodmFy
aWFudC5jYWxsTGlua1N0YXR1cygpKSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gU3BlY0Nl
bGxPdGhlcjsKKyAgICAgICAgbG9hZE9wID0gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbG9hZFByZWRpY3Rpb24gPSBwcmVkaWN0aW9uOworICAgICAgICBs
b2FkT3AgPSBHZXRCeU9mZnNldDsKKyAgICB9CisgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWU7
CisgICAgaWYgKCF2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgbG9h
ZGVkVmFsdWUgPSBsb2FkKGxvYWRQcmVkaWN0aW9uLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLCBs
b2FkT3ApOworICAgIGVsc2UgeworICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zm
c2V0KAorICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIHZhcmlhbnQuc3RydWN0dXJl
U2V0KCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICBs
b2FkT3ApOworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSBiYWNrd2FyZHMgcHJvcGFnYXRpb24g
a25vd3MgdGhhdCB3ZSd2ZSB1c2VkIGJhc2UuCisgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNl
KTsKKyAgICAKKyAgICByZXR1cm4gbG9hZGVkVmFsdWU7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5SWQoCkBAIC0yMzA3LDE1ICsyNTU4LDMwIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBt
X2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7Ci0gICAgCisgICAg
ICAgIFZlY3RvcjxNdWx0aUdldEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7CisgICAgICAgIAogICAg
ICAgICAvLyAxKSBFbWl0IHByb3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwgY2hhaW5z
LiBUaGlzIGNvdWxkIHNvcnQgb2YgbWF5YmUgbm90IGJlCiAgICAgICAgIC8vICAgIG9wdGltYWws
IGlmIHRoZXJlIGlzIHNvbWUgcmFyZWx5IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNoYWluIHRoYXQg
cmVxdWlyZXMgYSBsb3QKICAgICAgICAgLy8gICAgb2YgY2hlY2tzIGFuZCB0aG9zZSBjaGVja3Mg
YXJlIG5vdCB3YXRjaHBvaW50YWJsZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5k
ZXggPSBnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykKLSAgICAg
ICAgICAgIGVtaXRDaGVja3MoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hl
Y2tzKCkpOwotICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFy
aWFudCA6IGdldEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYgKHZhcmlh
bnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZXMuYXBw
ZW5kKE11bHRpR2V0QnlPZmZzZXRDYXNlOjpsb2FkKHZhcmlhbnQub2Zmc2V0KCkpKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFjaGVjayhnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0
KCkpKSB7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9w
ZXJhbmQpLAorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhp
ZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBUaGluZ3MuCisgICAgICAgICAgICBGSVhNRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCkt
Pm5vdGljZUlubGluZWRHZXRCeUlkKCk7CisgICAgCiAgICAgICAgIC8vIDIpIEVtaXQgYSBNdWx0
aUdldEJ5T2Zmc2V0CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFw
aC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50cyA9
IGdldEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKQEAgLTIzMjgsMzAgKzI1OTQsMTYgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICBBU1NFUlQoZ2V0QnlJZFN0YXR1cy5u
dW1WYXJpYW50cygpID09IDEpOwogICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBnZXRCeUlk
U3RhdHVzWzBdOwogICAgICAgICAgICAgICAgIAorICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9h
ZChiYXNlLCB2YXJpYW50KTsKKyAgICBpZiAoIWxvYWRlZFZhbHVlKSB7CisgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoZ2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiks
IGJhc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX2dyYXBoLmNvbXBp
bGF0aW9uKCkpCiAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdl
dEJ5SWQoKTsKICAgICAKLSAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNlOwotICAgICAgICAg
ICAgICAgIAotICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOwotICAgIAotICAg
IGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKLQotICAgIGlmICh2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAKLSAgICAvLyBVbmxlc3Mgd2Ugd2FudCBidWdzIGxpa2Ug
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NzgzLCB3ZSBuZWVkIHRv
Ci0gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJhc2Ugb2YgdGhlIG9yaWdpbmFsIGdldF9ieV9pZCBp
cyBrZXB0IGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aAotICAgIC8vIGFsbCBvZiB0aGUgc3Bl
Y3VsYXRpb25zLiBXZSBvbmx5IGluc2VydCB0aGUgUGhhbnRvbSBpZiB0aGVyZSBoYWQgYmVlbiBh
IENoZWNrU3RydWN0dXJlCi0gICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGJhc2Ug
Zm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNlLgotICAgIGlmIChvcmlnaW5hbEJh
c2UgIT0gYmFzZSkKLSAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcmlnaW5hbEJhc2UpOwot
ICAgIAotICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAg
IHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAot
ICAgICAgICBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51bWJlciwg
dmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQgOiBHZXRCeU9mZnNldCk7Ci0gICAgCiAgICAgaWYgKCF2YXJp
YW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbk9wZXJhbmQpLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MjIs
MTcgKzI2NzQsMjAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGgu
Y29tcGlsYXRpb24oKSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNl
SW5saW5lZFB1dEJ5SWQoKTsKLSAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBpZiAocHV0QnlJ
ZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZW1pdENo
ZWNrcyhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0
aW9uU2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAg
ICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Cisg
ICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9t
dWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRC
eUlkU3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBp
ZGVudGlmaWVyTnVtYmVyOwpAQCAtMjQ1NCw3ICsyNzA5LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbjogewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAg
ICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICBpZiAoIWNo
ZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQu
b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0Jl
ZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1MDUsMTkgKzI3NjMsMTEgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNl
OwotICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgIENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkp
LCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENo
ZWNrcygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkK
LSAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zm
c2V0KAotICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0
dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAgICBH
ZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9h
ZChiYXNlLCB2YXJpYW50KTsKKyAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgeworICAgICAgICAg
ICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0
dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgTm9kZSogc2V0dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZhbHVl
KTsKICAgICAgICAgCkBAIC0yNTQ1LDcgKzI3OTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9m
ZnNldCkpLnRvTG9jYWwoKSk7CiAgICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdp
c3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5h
a2VkU2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJh
c2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0
UmVnaXN0ZXIrKyksIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAgICAgICAgIGhh
bmRsZUNhbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDkgQEAgdm9pZCBDb21t
b25EYXRhOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgIHRyYWNrZWRS
ZWZlcmVuY2VzLmNoZWNrKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQo
KSk7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgZm9yIChBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQqIHdhdGNocG9pbnQgOiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzKQorICAg
ICAgICB3YXRjaHBvaW50LT5rZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5j
ZXMpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIklu
bGluZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTgsNiArMTAwLDgg
QEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5j
ZXM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0dXJlUmVm
ZXJlbmNlczsKICAgICBCYWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3YXRjaHBv
aW50czsKKyAgICBCYWc8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQ+IGFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CiAgICAg
VmVjdG9yPEp1bXBSZXBsYWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsKICAgICAKICAgICBSZWZQ
dHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlz
aW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFw
dG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U0FycmF5QnVmZmVyVmlldyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQogeworICAgIFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7CiAg
ICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50KiBuZXV0ZXJpbmdXYXRjaHBvaW50ID0K
ICAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50OjpjcmVhdGUoKmNvZGVCbG9j
ay0+dm0oKSk7CiAgICAgbmV1dGVyaW5nV2F0Y2hwb2ludC0+c2V0KCktPmFkZCh3YXRjaHBvaW50
KTsKQEAgLTQ1LDEwICs0NiwyMyBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFw
dG9yOjphCiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgV2F0Y2hwb2ludCog
d2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5m
ZXJyZWRWYWx1ZSwgQ29tbW9uRGF0YSYgY29tbW9uKQogewogICAgIGNvZGVCbG9jay0+YWRkQ29u
c3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVh
bGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3
YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBpbmZlcnJlZFZhbHVlLT5hZGQod2F0Y2hwb2ludCk7
CisgICAgaW5mZXJyZWRWYWx1ZS0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2Nr
KSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAgc3dpdGNoIChrZXkua2luZCgpKSB7Cisg
ICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIGNvbW1vbi5h
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9j
ayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgY29t
bW9uLmFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29kZUJsb2NrKS0+aW5z
dGFsbCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIERlc2lyZWRXYXRjaHBvaW50czo6
RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CkBAIC03NCw2ICs4OCwxMSBAQCB2b2lkIERlc2lyZWRX
YXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJyCiAgICAgbV9idWZmZXJWaWV3cy5hZGRMYXppbHko
dmlldyk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0
cy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVy
KFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRX
YXRjaCgpKQpAQCAtODgsNiArMTA3LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxs
eUFkZChDb2RlQgogICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25E
YXRhKTsKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRh
dGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7
CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9u
RGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29u
c3QKQEAgLTk1LDcgKzExNSw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZh
bGlkKCkKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lu
bGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJl
U3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOwor
ICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJJbmZlcnJl
ZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogCkBAIC00MSwxNSArNDIsMTUgQEAgY2xhc3MgR3JhcGg7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewotICAgIHN0YXRp
YyB2b2lkIGFkZChDb2RlQmxvY2sqLCBUIHNldCwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAg
ICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21tb25EYXRh
JiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2ludCk7Cisg
ICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykp
OwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpIHsgcmV0
dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KIH07CiAKIHN0cnVjdCBJbmZlcnJlZFZh
bHVlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFs
dWUqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVy
cmVkVmFsdWUqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRh
dGVkKEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4g
aW5mZXJyZWRWYWx1ZS0+aGFzQmVlbkludmFsaWRhdGVkKCk7CkBAIC01NywxMiArNTgsMTggQEAg
c3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBcnJheUJ1ZmZlclZp
ZXdXYXRjaHBvaW50QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpT
QXJyYXlCdWZmZXJWaWV3KiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2Rl
QmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIENvbW1vbkRhdGEmKTsKICAgICBzdGF0aWMgYm9v
bCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewotICAg
ICAgICBib29sIHJlc3VsdCA9ICF2aWV3LT5sZW5ndGgoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9h
ZEZlbmNlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiAhdmlldy0+
bGVuZ3RoKCk7CisgICAgfQorfTsKKworc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dEFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYsIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVu
SW52YWxpZGF0ZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAha2V5LmlzV2F0Y2hhYmxlKCk7CiAgICAgfQogfTsKIApAQCAtODcsNyAr
OTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQotICAgICAgICAgICAg
QWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVC
bG9jaykpOworICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24p
OwogICAgICAgICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQpAQCAtMTIy
LDYgKzEyOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSop
OwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAgCisgICAgLy8g
SXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZQor
ICAgIC8vIEdyYXBoOjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQsIHdoaWNoIGRvZXMg
dGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwuCisgICAgdm9pZCBhZGRMYXppbHkoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVj
dHVyZSopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEm
KTsKQEAgLTE0NCwxMiArMTU1LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBt
X2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAgICAgCiBw
cml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNldCo+IG1f
c2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElubGluZVdhdGNocG9pbnRTZXQq
PiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZh
bHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dh
dGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUwLDcgKzUwLDE0IEBAIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6fkRlc2ly
ZWRXZWFrUmVmZXIKIAogdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU0Nl
bGwqIGNlbGwpCiB7Ci0gICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKKyAgICBpZiAoY2VsbCkK
KyAgICAgICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKK30KKwordm9pZCBEZXNpcmVkV2Vha1Jl
ZmVyZW5jZXM6OmFkZExhemlseShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgYWRkTGF6aWx5KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAogYm9vbCBEZXNp
cmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw2ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICB+RGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7CiAKICAgICB2b2lkIGFkZExhemlseShK
U0NlbGwqKTsKKyAgICB2b2lkIGFkZExhemlseShKU1ZhbHVlKTsKICAgICBib29sIGNvbnRhaW5z
KEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4NzI0
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NDgsNiArODQ4LDIxIEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVz
KE5vZGVGbGEKICAgICB9CiB9CiAKK2Jvb2wgR3JhcGg6OndhdGNoQ29uZGl0aW9uKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNXYXRjaGFibGUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNl
cy5hZGRMYXppbHkoa2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5Lmhhc1Byb3RvdHlwZSgpKQor
ICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5wcm90b3R5cGUoKSk7
CisgICAgaWYgKGtleS5oYXNSZXF1aXJlZFZhbHVlKCkpCisgICAgICAgIG1fcGxhbi53ZWFrUmVm
ZXJlbmNlcy5hZGRMYXppbHkoa2V5LnJlcXVpcmVkVmFsdWUoKSk7CisgICAgCisgICAgbV9wbGFu
LndhdGNocG9pbnRzLmFkZExhemlseShrZXkpOworICAgIHJldHVybiB0cnVlOworfQorCiBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29k
ZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2Rl
QmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NjUsNiArNjY1LDkgQEAgcHVibGljOgogICAgIERlc2lyZWRJZGVudGlmaWVy
cyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KICAgICBEZXNp
cmVkV2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRz
OyB9CiAgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW52
YWxpZC4KKyAgICBib29sIHdhdGNoQ29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJik7CisgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVC
bG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxs
RnJhbWUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgR2V0QnlPZmZz
ZXRDYXNlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICI6Iik7CisgICAgc3dpdGNoICht
X2tpbmQpIHsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1
bXBJbkNvbnRleHQoY29uc3RhbnQoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KG9mZnNldCgp
LCAiQCIsIHBvaW50ZXJEdW1wSW5Db250ZXh0KHByb3RvdHlwZSgpLCBjb250ZXh0KSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEdldEJ5T2Zmc2V0Q2FzZTo6S2luZCBraW5kKQorewor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2V0QnlPZmZzZXRDYXNlOjpDb25zdGFudDoK
KyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBHZXRCeU9mZnNldENhc2U6OkxvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBHZXRCeU9mZnNldENhc2U6OkxvYWRGcm9tUHJvdG90eXBl
OgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGcm9tUHJvdG90eXBlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR011bHRp
R2V0QnlPZmZzZXREYXRhX2gKKyNkZWZpbmUgREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgorI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBJbnZh
bGlkLAorICAgICAgICBDb25zdGFudCwKKyAgICAgICAgTG9hZCwKKyAgICAgICAgTG9hZEZyb21Q
cm90b3R5cGUKKyAgICB9OworICAgIAorICAgIEdldEJ5T2Zmc2V0Q2FzZSgpCisgICAgICAgIDog
bV9raW5kKEludmFsaWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0QnlPZmZz
ZXRDYXNlIGNvbnN0YW50KEZyb3plblZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEdldEJ5
T2Zmc2V0Q2FzZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAg
ICAgICAgcmVzdWx0LnUuY29uc3RhbnQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIEdldEJ5T2Zmc2V0Q2FzZSBsb2FkKFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEdldEJ5T2Zmc2V0Q2FzZSByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBMb2FkOworICAgICAgICByZXN1bHQudS5sb2FkLm9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IEdldEJ5T2Zmc2V0Q2FzZSBsb2FkRnJvbVByb3RvdHlwZShGcm96ZW5WYWx1ZSogcHJvdG90eXBl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldENhc2Ug
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZEZyb21Qcm90b3R5cGU7CisgICAg
ICAgIHJlc3VsdC51LmxvYWQucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXN1bHQu
dS5sb2FkLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxp
ZDsgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAg
IAorICAgIEZyb3plblZhbHVlKiBjb25zdGFudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIHUuY29uc3RhbnQ7CisgICAg
fQorICAgIAorICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiB1
LmxvYWQucHJvdG90eXBlOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkIHx8IGtpbmQoKSA9
PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiB1LmxvYWQub2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4
dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIEZyb3plblZhbHVlKiBjb25zdGFudDsKKyAgICAg
ICAgc3RydWN0IHsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGU7CisgICAgICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gbG9hZDsKKyAgICB9IHU7Cisg
ICAgS2luZCBtX2tpbmQ7Cit9OworCitzdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgeworICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CisgICAgVmVjdG9yPEdldEJ5T2Zmc2V0Q2FzZSwg
Mj4gY2FzZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBX
VEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6R2V0QnlP
ZmZzZXRDYXNlOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXBvY2guaCIK
ICNpbmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9y
aWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwxMSArNjYsNiBAQCBzdHJ1
Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiB9
OwogCi1zdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgewotICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXI7Ci0gICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKLX07Ci0K
IHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcjsKICAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4
NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjIsNiArMzIyLDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0
cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0R2V0
dGVyU2V0dGVyQnlPZmZzZXQ6CiAgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICAvLyBG
SVhNRTogVGhpcyBuZWVkcyB0byBhbHNvIGNoZWNrIHRoZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4KKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBvbmUg
dGhhdCBndWFyYW50ZWVzIHRoZSBwcmVzZW5jZSBvZiB0aGlzIHByb3BlcnR5LCB0aGVuIHRoaXMg
aXMgYWx3YXlzIHNhZmUKKyAgICAgICAgLy8gdG8gZXhlY3V0ZS4KKyAgICAgICAgRklYTUU7Cisg
ICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IHN0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlOwogICAgICAgICBpZiAodmFsdWUuaXNU
b3AoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0
YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNs
b3dQYXRoRnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYg
KHN0cnVjdHVyZS0+bmVlZHNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0u
cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5m
by5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjb2RlQmxvY2spOwpAQCAtMTMyLDQ3ICsxMzIsMzAgQEAgc3RhdGljIHZvaWQg
cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
Ci0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAor
ICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgp
ID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGls
bFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChz
dHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBv
YmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKLSAgICAgICAg
ICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAg
ICAgIGppdCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgICAgICAg
ICAgaml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5lZmZlY3RpdmVXYXRjaHBvaW50KTsKLSAg
ICAgICAgICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KKyAgICBpZiAoY29uZGl0aW9uLmlz
V2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICBj
b25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChz
dHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVj
dCksIHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGJyYW5j
aFN0cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgICAgIGJy
YW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNyb0Fz
c2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BS
UmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAgIAotICAg
IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgp
LCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBq
aXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CitzdGF0aWMgdm9pZCBjaGVj
a09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBjaGVja09i
amVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQogfQogCiBz
dGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
dGFyZ2V0KQpAQCAtMjk2LDExICsyNzksMTIgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZv
cihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIEV4ZWNT
dGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgRnVuY3Rpb25QdHIg
Y3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwg
Q29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYg
c3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1
cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworICAgIAogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJl
Z3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzMyArMzMwLDI1IEBAIHN0YXRpYyBib29sIGdlbmVy
YXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3Bl
cnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHko
cHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCiAgICAg
aWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJl
ID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGlmIChj
aGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVh
ZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkg
ewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90
b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVj
dHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0
cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkK
LSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHko
cHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAg
ICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3Rv
T2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAg
ICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY3Vy
clN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoIXByb3Rv
T2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKLSAg
ICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgIGNvbmRpdGlv
blNldCwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIp
OwogICAgIAorICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICBpZiAoY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSkKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBl
bHNlCisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRp
b24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CiAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKKyAgICAKICAgICBHUFJS
ZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKGtpbmQgIT0gR2V0
VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVk
IHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRv
IGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCiAg
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7CkBAIC02Mjcs
OSArNjAzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNlbGwoVgogICAg
ICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwogICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KLSAgICBBU1NFUlQoIXN0cnVjdHVyZS0+
aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgaWYgKHR5cGVJbmZvLmhhc0lt
cHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZp
cmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIHJldHVy
biBBdHRlbXB0VG9DYWNoZTsKQEAgLTgyNywyMSArODAyLDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICB9CiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgp
OwotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgc2l6ZV90IGNv
dW50ID0gMDsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQ7CiAgICAgCiAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBi
YXNlVmFsdWUpIHsKICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKIAogICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICBj
b3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoZXhl
Yywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
b3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoCi0gICAgICAgICAg
ICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LCBvZmZzZXQpOwot
ICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAg
Y29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQo
ZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAg
IAorICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnBy
b3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0
dWJJbmZvKTsKQEAgLTg1Miw3ICs4MjgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtp
bmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVD
aGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50
LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9mZnNldCwgCiAgICAg
ICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCks
IAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAt
ODcxLDcgKzg0Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQK
ICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3Ry
dWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAgY29uZGl0
aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYgKzk2OSwyOCBAQCBz
dGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShF
eGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29sIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJl
KiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsK
LSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xk
U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5T2Zm
c2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUs
IGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUg
fHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8
ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAgb3B0aW1p
emluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQog
ICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYgKEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAg
ICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNraXAgb3B0
aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJl
IGhhcwpAQCAtMTAyMCwxNCArOTk4LDEzIEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFu
c2l0aW9uU3R1YkEKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVt
ZW50IGl0IQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzA5MTQKICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFp
bihleGVjLCBzdHJ1Y3R1cmUpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1
Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAvLyBlbWl0UHV0VHJhbnNpdGlvblN0dWIKKyAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3Qp
IHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlT
ZXR0ZXJNaXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
IAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lID0gc3R1YkluZm8u
c3R1YlJvdXRpbmU7CkBAIC0xMDgzLDE3ICsxMDYwLDggQEAgc3RhdGljIFN0cnVjdHVyZSogZW1p
dFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKICAgICAgICAgb2xkU3RydWN0dXJl
KSk7CiAgICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICBvbGRT
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8s
IHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICAg
ICAgCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGZvciAoV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0
KSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1Yklu
Zm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisg
ICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0
LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93UGF0aDsKICAgICAKQEAgLTEyMjgsNyArMTE5Niw3IEBAIHN0YXRpYyBTdHJ1Y3R1
cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcGF0Y2hCdWZm
ZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBpZiAoYWxsb2NhdG9yLmRp
ZFJldXNlUmVnaXN0ZXJzKCkpCkBAIC0xMjU2LDggKzEyMjQsOCBAQCBzdGF0aWMgU3RydWN0dXJl
KiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+
b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAgICAgICAg
c3RydWN0dXJlKTsKLQotICAgIHJldHVybiBvbGRTdHJ1Y3R1cmU7CisgICAgCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTI4MSwxMiArMTI0
OSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYg
KHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKICAg
ICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsK
IAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlv
blN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3Qs
IHN0dWJJbmZvLCBwdXRLaW5kKTsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKQorICAg
ICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0
VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVy
ZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7
Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTEyOTQs
NyArMTI2MSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBE
aXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEyLDIwICsxMjc5LDIy
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgJiYg
c3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBw
cm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChi
YXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgp
LCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90
eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNl
KCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCiAgICAgICAgIFBvbHltb3JwaGljUHV0
QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpm
cm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRl
QnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9t
Rm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LAorICAgICAgICAgICAg
ZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNv
bmRpdGlvblNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0
ciwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1Nsb3dDYXNlKSwKQEAgLTEzMzYsNyArMTMwNSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6
OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwK
ICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNl
dHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVy
ZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGlu
ZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0
dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9K
dW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAg
LTEzODAsMTcgKzEzNDksMTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0
QnlJZAogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCiAK
LSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25T
dHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotCi0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVy
ZSkgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICgh
ZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICAgICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CiAgICAg
ICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6
dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwg
cHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0
dXJlLCBjb25kaXRpb25TZXQsCiAgICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7CiAK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTE0MjMsMjEgKzEzOTEsMjQgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKICAgICAgICAgJiYgc3R1YkluZm8ucGF0
Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lOwotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4g
PSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgp
OwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNs
b3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWlu
Rm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgcHJvcGVydHlOYW1l
LCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFp
bikKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5i
YXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAg
ICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAg
ICAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5h
bWUuaW1wbCgpKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIHByb3RvdHlw
ZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAgfQorICAg
ICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0
KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKICAgICAgICAgCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAg
ICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJ
bmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAg
ICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwg
c3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRG
b3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0
aW9uU2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAog
ICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKQEAgLTE0NDgsNyArMTQxOSw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAgbGlzdC0+
YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0
ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRl
ciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1
c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTE0ODcsMTEgKzE0NTgsMTUgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgqdm0pOwogICAgIAotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgSlNWYWx1ZSBmb3VuZFNsb3RCYXNl
ID0gd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCk7Ci0gICAgc2l6ZV90IGNv
dW50ID0gIWZvdW5kU2xvdEJhc2UgfHwgZm91bmRTbG90QmFzZSAhPSBiYXNlID8gCi0gICAgICAg
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBm
b3VuZFNsb3RCYXNlLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgOiAwOwotICAgIGlmIChjb3VudCA9
PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OworICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICBpZiAoc2xvdC5zbG90
QmFzZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgIGV4ZWMsIHN0
cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICB9CisgICAg
fSBlbHNlCisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5TWlzcyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKICAg
ICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dDsKQEAgLTE1MTYsNyArMTQ5MSw2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBh
dGNoSW4oCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICB9CiAgICAgCi0g
ICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIAogICAgIHsK
QEAgLTE1NDcsMTggKzE1MjEsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRj
aEluKAogICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50U2V0KCkpCiAgICAgICAgICAgICBzbG90
LndhdGNocG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7
CiAKLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAg
SlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0g
cHJvdG90eXBlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvU3RydWN0dXJlLCBleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFpbHVy
ZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlw
ZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAg
ICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0dWJJ
bmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJl
ID0gaXQtPmdldCgpOwotICAgICAgICB9CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zKAorICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvaygpLCBzdHVi
SW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BS
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJl
Q2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCi0jaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkK
LSAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKLXsKLSAgICBBU1NFUlQobV9wcm90b3R5cGUu
aXNOdWxsKCkgfHwgbV9wcm90b3R5cGUuaXNPYmplY3QoKSk7Ci0gICAgaWYgKHByb3RvdHlwZS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0g
YXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5k
KGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZCkKLSAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQt
PnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgaWYgKG1fcHJvdG90
eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJl
bnQgPSBhc09iamVjdChtX3Byb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50OyBjdXJyZW50
ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCi0gICAgICAgIG1fdmVjdG9y
LmFwcGVuZChjdXJyZW50KTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1
Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JM
b29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIG1fdmVjdG9yLmFwcGVuZChwcm90b3R5cGVT
dHJ1Y3R1cmUpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbikKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxP
YmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGNoYWluLT5oZWFkKClbaV07ICsr
aSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQot
Ci1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5z
aWduZWQgY291bnQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFs
T2JqZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAg
ICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpCi17Ci19Ci0KLWJv
b2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKLXsKLSAgICBK
U1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3RvdHlwZTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGFzT2JqZWN0
KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAhPSBtX3ZlY3RvcltpXSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IG1fdmVjdG9yW2ld
LT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pIGNv
bnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBjaGFpbi0+aGVhZCgpW2ldLmdldCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoY2hhaW4tPmhlYWQoKVtt
X3ZlY3Rvci5zaXplKCldKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyhV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVudGx5
KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5
IHwgQWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0
dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
bV92ZWN0b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVy
ZVByb3BlcnR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHko
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLUpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW5hbFByb3RvdHlwZSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rvci5pc0VtcHR5KCkpOwotICAgIGlmIChtX3Zl
Y3Rvci5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGFzT2JqZWN0KG1fcHJvdG90eXBlKTsK
LSAgICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0b3Jl
ZFByb3RvdHlwZSgpKTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpvcGVyYXRv
cj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotewotICAgIHJl
dHVybiBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2dsb2JhbE9iamVjdAotICAgICAgICAmJiBt
X3Byb3RvdHlwZSA9PSBvdGhlci5tX3Byb3RvdHlwZQotICAgICAgICAmJiBtX3ZlY3RvciA9PSBv
dGhlci5tX3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpnYXRoZXJD
aGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKSBjb25zdAotewotICAg
IEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBKU09iamVjdCogY3VycmVudE9i
amVjdCA9IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUqIGN1
cnJlbnRTdHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAgICAgdmVjdG9yLmFwcGVuZChDb25zdGFudFN0
cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRTdHJ1Y3R1cmUpKTsKLSAgICAgICAg
Y3VycmVudFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cCht
X2dsb2JhbE9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46
OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFsT2JqZWN0KTsKLSAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkVmFsdWUoJm1fcHJvdG90eXBlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X3ZlY3Rvci5zaXplKCk7IGktLTspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQ
b2ludGVyKCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCAw
KTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmlu
dCgKLSAgICAgICAgIihnbG9iYWwgPSAiLCBSYXdQb2ludGVyKG1fZ2xvYmFsT2JqZWN0KSwgIiwg
aGVhZCA9ICIsCi0gICAgICAgIGluQ29udGV4dChtX3Byb3RvdHlwZSwgY29udGV4dCksICIsIHZl
Y3RvciA9IFsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEs
IHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9yW2ldLCBjb250ZXh0KSk7Ci0gICAgb3V0LnBy
aW50KCJdKSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZpbmUgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9o
Ci0KLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJl
Q2hhaW47Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1wQ29udGV4dDsKLQotY2xhc3MgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+
IHsKLXB1YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSopOwotICAgIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwg
U3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQp
OwotICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7Ci0gICAgCi0gICAgYm9vbCBpc1N0aWxs
VmFsaWQoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoU3RydWN0dXJlQ2hhaW4qKSBjb25zdDsK
LSAgICBib29sIG1heUludGVyY2VwdFN0b3JlVG8oVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0g
ICAgYm9vbCBpc05vcm1hbGl6ZWQoKTsKLSAgICAKLSAgICBib29sIHRha2VzU2xvd1BhdGhJbkRG
R0ZvckltcHVyZVByb3BlcnR5KCk7Ci0gICAgCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25z
dCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAgIAotICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0gICAgU3RydWN0dXJlKiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsgfQotICAgIFN0cnVjdHVyZSogb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgIAot
ICAgIEpTT2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0OwotICAgIAotICAgIFN0cnVj
dHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmxhc3QoKTsgfQotICAgIAotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluJikgY29uc3Q7Ci0g
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJikg
Y29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgSlNH
bG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotICAgIEpTVmFsdWUgbV9wcm90b3R5cGU7Ci0g
ICAgVmVjdG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KLSNlbmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTk0LDcgKzE5NCwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7
IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQogICAgIGJv
b2wgaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2lu
ZCgpID09IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQ7IH0KICAgCi0gICAgYm9vbCBwcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hl
ZERpY3Rpb25hcnlLaW5kICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
OyB9CisgICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQKKyAg
ICAgICAgICAgICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCisgICAg
ICAgICAgICAmJiAhKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0
eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgeworICAgICAg
ICByZXR1cm4gcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgICAgICAgICAmJiB0
eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKQorICAgICAgICAgICAgJiYgdHlw
ZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCk7CisgICAgfQogCiAgICAg
Ly8gV2UgdXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9yIHN0cnVjdHVyZXMgdGhhdCBt
YXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBwcmV2ZW50CiAgICAgLy8gREZH
IGZyb20gaW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ugc3RydWN0dXJlcyBkb24ndCB0
cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFwcGVhcnMuCkBAIC0yMDIsNyAr
MjE0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuaGFzSW1w
dXJlR2V0T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gVHlwZSBhY2Nl
c3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9m
TGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlw
ZUluZm8oKS5pc09iamVjdCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzOCw2ICs1MzgsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNo
cG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOwor
ICAgIAogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3
aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257432</attachid>
            <date>2015-07-23 21:27:47 -0700</date>
            <delta_ts>2015-07-24 13:13:38 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>215481</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODcyNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01ODgsNiArNTkwLDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2
MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIy
MTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNG
RjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmNwcCAqLzsgfTsKKwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuY3BwICovOyB9OworCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9w
ZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJG
MDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5NCw2ICs3MDQsOCBA
QAogCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5
NkIgLyogREZHRWRnZS5jcHAgKi87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmNwcCAqLzsgfTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjRCNTIyMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBG
RjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZG
IC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4
RUJENTgwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8q
IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlG
RiAvKiB1ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICov
OyB9OwpAQCAtMTM4Nyw4ICsxMzk5LDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8q
IFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NC
QzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMx
OEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8q
IFNwaWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cCAqLzsgfTsKLQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFs
aXplci5oICovOyB9OwogCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5
NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg1MSw2
ICsxODYxLDggQEAKIAkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0Qg
LyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFC
NDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdN
aW5pZmllZEdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Qx
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBk
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVG
MCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
SmV0dGlzb25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkx
OEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM0
Miw2ICsyMzU0LDE0IEBACiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFM0ZGMUI2MThB
QUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZn
L0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQzRTQwNDFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9w
ZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2
QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdC
YXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFD
RjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21p
bmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NDMsNiArMjQ2Myw4IEBACiAJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9
IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0Rjgx
QUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDVBMUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBwYXRoID0gZGZn
L0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzMwMTU4
RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fz
c2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfZGVjb2RlLmM7IHBhdGggPSBkaXNhc3Nl
bWJsZXIvdWRpczg2L3VkaXM4Nl9kZWNvZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMxNTEsOCArMzE3Myw2IEBACiAJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQ
YXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4
NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZDMTc5NzM4QjgwMDlERjc0NCAvKiBERkdG
YWlsZWRGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRmFpbGVkRmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RDE3OTczOEI4MDA5REY3NDQg
LyogREZHRmFpbGVkRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ZhaWxlZEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RTE3OTczOEI4MDA5REY3NDQgLyog
REZHRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0ZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NjksOCArNDQ4OSw2IEBACiAJCQkJQTdBOEFGMkIxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLywKLQkJCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCi0JCQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUg
LyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAwODA2NkRE
IC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMTJCQkZGMzFCMDQ0QTk4MDA2NjRCNjkg
LyogSW50bE9iamVjdC5jcHAgKi8sCkBAIC00ODUzLDYgKzQ4NzEsMTAgQEAKIAkJCQlBNzA0RDhG
RjE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCAqLywK
IAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8s
CiAJCQkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLywK
KwkJCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8sCisJCQkJ
MEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAgKi8sCisJCQkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggKi8sCiAJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0FsbG9jYXRvci5oICovLAogCQkJCUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFs
eXNpcy5oICovLApAQCAtNTAxMiw2ICs1MDM0LDggQEAKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCiAJCQkJMEY4RjE0MzExQURGMDkwMTAwRUQ3
OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwICovLAogCQkJCTBGOEYxNDMyMUFERjA5
MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCisJCQkJMEZGMkNENTkx
QjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKKwkJCQkw
RkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywK
IAkJCQkwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCAq
LywKIAkJCQkwRkMzQ0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmgg
Ki8sCiAJCQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8sCkBAIC01MzE3LDYgKzUzNDEsMTAgQEAKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0ExNEY1
QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkx
NENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLywK
KwkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwICovLAorCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oICovLAorCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCisJCQkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8sCiAJCQkJOTY5QTA3OTQwRUQxRDNBRTAw
RjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8q
IE9wY29kZS5oICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5o
ICovLApAQCAtNTMyOCw2ICs1MzU2LDggQEAKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0
MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUzN0Yw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKKwkJCQkwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLAorCQkJCTBGRDNFNDA4MUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGOTMzMjk5MTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCkBAIC01ODI3LDYgKzU4NTcsNyBAQAogCQkJ
CUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRDQjlGRiAvKiBERkdEaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBF
MUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUz
NENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
LApAQCAtNjA3OSw2ICs2MTEwLDcgQEAKIAkJCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyog
Q29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4ODE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRj
aGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERG
R011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0
NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjA4OCw3ICs2MTIwLDYgQEAKIAkJCQlBN0E4
QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAotCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJu
YWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5
IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAx
MTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMDEsNiArNjEzMiw3IEBA
CiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjM5Niw5ICs2NDI4LDExIEBACiAJCQkJMkFBRDk2
NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0Nh
bGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyog
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThC
NDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0Iy
MjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIx
QjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1h
dGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcw
ODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NDc1LDYgKzY1MDksNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEg
LyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFD
MTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Bo
aUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYg
LyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MjY2LDYgKzczMDEsNyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlD
b25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJB
IC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1
MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3
ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTcyNzYsNiArNzMxMiw3IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZU
TExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3
RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZG
MkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3
MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMjYsNiArNzM2Myw3IEBA
CiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2Vu
dFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzMzNiw3ICs3Mzc0LDYgQEAKIAkJ
CQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAw
QkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNG
OTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJw
cmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8q
IEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNTMsNiArNzM5MCw3
IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82
NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nl
c3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjAwLDYgKzc2Mzgs
NyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWlu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwQjFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzAxM0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4RiAv
KiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MDksNiArNzY0OCw3
IEBACiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRl
bXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE4RDNDRjFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJh
dG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ6OmZpcgogICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAKICAgICBtX2NvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgcmVtb3ZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBs
ZXhHZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKICAgICAvLyBo
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0CkBAIC00
MCwzMiArNDAsMjYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdQog
ICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
OworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAogICAg
IENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJbmxpbmVhYmxl
OwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAgIHJlc3VsdC5t
X2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3VudCkpOworICAg
IGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJlc3VsdC5tX2No
YWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25kaXRpb25TZXQu
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4gc2tpcCgpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWluLT50YWtlc1Ns
b3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRha2Vz
U2xvd1BhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0g
cmVzdWx0Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSog
Y3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAgICAgIAotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOworICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0
eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmli
dXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7Ci0gICAgfQor
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAg
ICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKICNkZWZp
bmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3RhdHVzKCkKICAg
ICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zm
c2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAgICAgfQogICAg
IApAQCAtOTcsMjEgKzk2LDE3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIENv
bXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAg
ICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KLSAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmlj
VmFsdWU7IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFpbi5nZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAog
cHJpdmF0ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
LSAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7
Ci0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYs
OCArMjA2LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJ
ZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVj
dHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4o
KSwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVz
Lm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlv
blNldCgpLCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAg
ICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQp
Ci0gICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNv
bmRpdGlvblNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0
dXMoV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlm
IChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNo
YWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1f
Y29uc3RhbnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRC
eUlkVmFyaWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBA
IEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50
JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikK
IHsKICAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29u
c3RhbnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFz
ZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1f
Y29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1h
a2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03
MiwxNiArNjcsNiBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZhcmlhbnQ6OmJhc2VT
dHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KIGJvb2wg
R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhl
cikKIHsKICAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZSkK
QEAgLTkwLDEwICs3NSwxMyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFh
cmVDb21wYXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldCA9
CisgICAgICAgIG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQp
OworICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2Nv
bnN0YW50Q2hlY2tzKTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTIsOCArMTAwLDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
IlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsK
KyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBpZiAobV9hbHRlcm5hdGVC
YXNlKQogICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChK
U1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3
ICs0Myw3IEBAIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFy
aWFudCgKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1
cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKLSAgICAgICAg
Y29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBudWxscHRyLAorICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzID0gbnVsbHB0cik7CiAgICAgCiAgICAgfkdldEJ5SWRWYXJpYW50KCk7CkBAIC01NSw5
ICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
aXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9Ci0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdCB7IHJldHVybiBt
X2FsdGVybmF0ZUJhc2U7IH0KLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0
OworCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIGEgY29uZGl0aW9uIHNldCBtZWFucyB0aGF0IHRo
aXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAg
ICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICAKQEAgLTcwLDggKzcxLDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgR2V0QnlJZFN0YXR1czsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQg
bV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0
YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9v
ZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3Rh
dHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQu
cHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91
dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZShtX29iamVjdCksIGNvbnRleHQpLCAiOiAiLCBpbkNv
bnRleHQobV9jb25kaXRpb24sIGNvbnRleHQpKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisg
ICAgU3RydXR1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24u
aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydXRjdXJlRW5zdXJlc1ZhbGlk
aXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3Qt
PnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRp
dHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QK
K3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0
cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZh
bGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlv
bi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBtX29iamVjdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQobV9v
YmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKTsKK30KKworYm9v
bCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhaWRpdHkoKSBjb25z
dAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5
Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBQcm9wZXJ0
eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgp
LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJs
ZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJp
bGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0
Y2hhYmxlKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBl
ZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9y
dCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKCFIZWFwOjppc01hcmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZl
cmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52
YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3Bl
cnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAg
ICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAg
ICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9v
YmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdp
dGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
eworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVy
dHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0
ZXMpOyAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNl
V2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJh
cnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAg
cmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2UodWlkLCBwcm90
b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVj
dCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIp
OworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90
b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29i
amVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25k
aXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCog
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOwor
ICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQs
IHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3Qg
PSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9u
OjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
ZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxl
bmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisg
ICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJv
cGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0K
KyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0
IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5z
aWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJp
YnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25k
aXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9v
bCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWly
ZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkg
KyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29u
ZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmpl
Y3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAg
CisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRp
Y2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJl
bnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cg
dG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
IGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwg
d2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBj
YXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAg
Ly8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2Vu
Y2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50
aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4K
KyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1
aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9
CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9u
YWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1
Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwg
dGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0
IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9y
IHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9p
ZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0
cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZh
bGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0
LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3Jk
aW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKworICAgIC8v
IENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkgY29uc2VydmF0aXZlbHkg
cmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0cnVjdHVyZSBhbG9uZSBk
b24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiB0
cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJlcyBzb21lIHdhdGNocG9p
bnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhlCisgICAgLy8gc3Ry
dWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9uIGhvbGRzIGJ5IHVz
aW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVjdHVyZUVuc3VyZXNWYWxp
ZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJv
b2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hvcnRoYW5kIGZvciBjb25k
aXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29sIHN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxs
IHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0
aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBp
bXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFBy
b3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6
TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmls
aXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9y
Y2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJl
KiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxl
KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVy
dHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hp
bmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVyaWVzU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24o
KS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBz
dGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBt
X2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2lu
ZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhp
cykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAg
IG51bUZvdW5kKys7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91
bmQgPT0gMSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6YXJlQ29tcGF0aWJsZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGEgOiAqdGhpcykgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBiIDogb3RoZXIpIHsKKyAgICAgICAgICAgIGlmICghYS5pc0NvbXBhdGlibGVX
aXRoKGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFv
dGhlci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHko
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3Ro
ZXIpIHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3Rp
bmdDb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXND
b21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub25FbXB0eShyZXN1bHQpOworfQorCitib29s
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBj
b25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRo
aXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAo
IWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlv
bi52YWxpZGl0eVJlcXVyaWVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExpdmUoKSBjb25zdAoreworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAg
ICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnBy
aW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgb3V0LnByaW50KGxpc3REdW1wSW5D
b250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCJdIik7Cit9
CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK25hbWVz
cGFjZSB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0aW9uKAorICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7CisgICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgIGlmIChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnBy
ZXNlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAg
fQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6IHsKKyAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKAorICAgICAgICAgICAgdm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkpOwor
ICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAg
ICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIoCisg
ICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5z
dG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbigpOworICAgIH0KK30KKworZW51bSBDb25jdXJyZW5jeSB7CisgICAgTWFpblRocmVhZCwK
KyAgICBDb25jdXJyZW50Cit9OworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVD
b25kaXRpb25zKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgSlNPYmplY3QqIHByb3RvdHlw
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCwK
KyAgICBDb25jdXJyZW5jeSBjb25jdXJyZW5jeSA9IE1haW5UaHJlYWQpCit7CisgICAgQVNTRVJU
KCEhcHJvdG90eXBlID09IChjb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNl
KSk7CisgICAgCisgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBjb25kaXRpb25z
OworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgp
KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KCk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2LmlzTnVs
bCgpKSB7CisgICAgICAgICAgICBpZiAoIXByb3RvdHlwZSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxp
ZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4odik7CisgICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJl
KHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3Rv
dHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQgbm90IGJlCisg
ICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IE1haW5U
aHJlYWQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIHRoaXNDb25kaXRpb25L
aW5kOworICAgICAgICBpZiAoa2luZCA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UgJiYg
b2JqZWN0ICE9IHByb3RvdHlwZSkKKyAgICAgICAgICAgIHRoaXNDb25kaXRpb25LaW5kID0gUHJv
cGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXND
b25kaXRpb25LaW5kID0ga2luZDsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIG5ld0NvbmRpdGlvbiA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwg
b3duZXIsIG9iamVjdCwgdWlkLCB0aGlzQ29uZGl0aW9uS2luZCk7CisgICAgICAgIGlmICghbmV3
Q29uZGl0aW9uIHx8ICFuZXdDb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6aW52YWxpZCgpOworICAgICAgICAKKyAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQo
bmV3Q29uZGl0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvYmplY3QgPT0gcHJvdG90eXBl
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8vIFZhbGlkYXRlIHRoZSBy
ZXN1bHQuCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgcHJlc2VuY2VDb3VudCA9IDA7CisgICAgICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlv
bnMpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICAg
ICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICAgICAgcHJl
c2VuY2VDb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChw
cmVzZW5jZUNvdW50ID09IDEpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDog
eworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiBjb25kaXRpb25zKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLmtpbmQo
KSA9PSBraW5kKTsKKyAgICB9IH0KKyAgICAKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlvbnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwKKyAgICAg
ICAgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6
QWJzZW5jZU9mU2V0dGVyKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUG90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVj
dCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJu
IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlwZSwgdWlkLAorICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisg
ICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRl
Q29uZGl0aW9ucygKKyAgICAgICAgdm0sIG51bGxwdHIsIGdsb2JhbE9iamVjdCwgaGVhZFN0cnVj
dHVyZSwgbnVsbHB0ciwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZWNlT2ZTZXR0ZXIsCisg
ICAgICAgIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKyNkZWZpbmUgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCIKKyNpbmNsZHVlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
QW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhl
IHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVlZCB0byBiZSBtZXQgZm9y
IHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2FuIGhhdmUgdGhlIGZvbGxv
d2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5OiBUaGVyZSBhcmUgbm8g
c3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisvLyBJbnZhbGlkOiBUaGUg
aGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6IFRoZXJlIGFyZSBzb21l
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdmFsaWQuCisKK2NsYXNz
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9yPE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICAqcmVzdWx0Lm1f
ZGF0YS0+dmVjdG9yID0gdmVjdG9yOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Rh
dGEgfHwgIW1fZGF0YS0+dmVjdG9yLmlzRW1wdHkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhOworICAgIH0KKyAg
ICAKKyAgICB0eXBlZGVmIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKiBpdGVyYXRvcjsK
KyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
ZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRh
LT52ZWN0b3IuYmVnaW4oKTsKKyAgICB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5lbmQoKTsKKyAgICB9CisgICAgCisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gZm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0OworICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvckNvbmRpdGlvbktpbmQoUHJvcGVydHlDb25kaXRp
b246OktpbmQpIGNvbnN0OworICAgIAorICAgIC8vIElmIHRoaXMgaXMgYSBjb25kaXRpb24gc2V0
IGZvciBhIHByb3RvdHlwZSBoaXQsIHRoZW4gdGhpcyBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB0
aGUKKyAgICAvLyBjb25kaXRpb24gb24gdGhlIHByb3RvdHlwZSBpdHNlbGYuIFRoaXMgYWxsb3dz
IHlvdSB0byBnZXQgdGhlIG9iamVjdCwgb2Zmc2V0LCBhbmQKKyAgICAvLyBhdHRyaWJ1dGVzIGZv
ciB0aGUgcHJvdG90eXBlLiBUaGlzIHdpbGwgUkVMRUFTRV9BU1NFUlQgdGhhdCB0aGVyZSBpcyBl
eGFjdGx5IG9uZSBQcmVzZW5jZQorICAgIC8vIGluIHRoZSBzZXQsIGFuZCBpdCB3aWxsIHJldHVy
biB0aGF0IHByZXNlbmNlLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNsb3RCYXNlQ29u
ZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbiBzZXRzIGFyZSBjb21w
YXRpYmxlIGlmIHRoZXkgYXJlIGJvdGggdmFsaWQgYW5kIGVhY2ggY29uZGl0aW9uIGluICp0aGlz
IGlzCisgICAgLy8gY29tcGF0aWJsZSB3aXRoIGVhY2ggY29uZGl0aW9uIGluIG90aGVyLgorICAg
IGJvb2wgYXJlQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IG90aGVyKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhIG5ldyBjb25k
aXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0aGUgb3RoZXIgb25lLiBUaGlzIHdp
bGwKKyAgICAvLyBmYWlsIGlmICF0aGlzLmFyZUNvbXBhdGlibGVXaXRoKG90aGVyKS4gV2hlbiBp
dCBmYWlscywgaXQgcmV0dXJucyBpbnZhbGlkKCkuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbWVyZ2VkV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIp
IGNvbnN0OworICAgIAorICAgIGJvb2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkgY29uc3Q7
CisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgYXJlU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBIZWxwZXJz
IGZvciB1c2luZyB0aGlzIGluIGEgdW5pb24uCisgICAgdm9pZCogcmVsZWFzZVJhd1BvaW50ZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihtX2RhdGEubGVha1Jl
ZigpKTsKKyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGFkb3B0
UmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYo
c3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGZyb21SYXdQb2lu
dGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBzdGF0aWNfY2FzdDxEYXRh
Kj4ocmF3UG9pbnRlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICAvLyBJbnRlcm5hbGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1c2luZyBh
IHBvaW50ZXIgdG8gYSBEYXRhIHRoYXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKyAgICAKKyAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcGFjdCBieSBoYXZpbmcgaXQgaW50
ZXJuYWxseSB1c2UgYSB2ZWN0b3IgdGhhdCBqdXN0IGhhcworICAgIC8vIHRoZSBub24tdWlkIHBv
cnRpb24gb2YgT2JqZWN0UHJvcGVydHlDb25kaXRpb24sIGFuZCB0aGVuIHJlcXVpcmluZyB0aGF0
IHRoZSBjYWxsZXJzIG9mIGFsbAorICAgIC8vIG9mIHRoZSBBUElzIHN1cHBseSB0aGUgdWlkLgor
ICAgIAorICAgIGNsYXNzIERhdGEgOiBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9CisgICAg
ICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsKKyAg
ICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBl
LAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHko
CisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhl
YWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywx
NCArMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nl
c3MoCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQpCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fY2hhaW5Db3VudChjaGFpbkNvdW50
KQogICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRp
dGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQog
ewotICAgIGlmIChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7
CiB9CiAKIEdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcxLDcgKzcwLDcgQEAg
Ym9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogewogICAgIGlmIChtX3N0
cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4u
Z2V0KCkpKQorICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNTdGlsbExpdmUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hC
dWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlz
aW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEzICs1MywxMiBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgR2V0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAg
ICAgICwgbV9jaGFpbkNvdW50KDApCiAgICAgewogICAgIH0KICAgICAKICAgICBHZXRCeUlkQWNj
ZXNzKAogICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8
SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogPSAw
LCB1bnNpZ25lZCBjaGFpbkNvdW50ID0gMCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwogICAgIAogICAg
IH5HZXRCeUlkQWNjZXNzKCk7CiAgICAgCkBAIC03Miw4ICs3MSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4g
bV9jaGFpbi5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX2NoYWluQ291bnQ7IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAg
ICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAgLTkxLDkgKzg5
LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgIAogICAgIEFj
Y2Vzc1R5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsKICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9jb25kaXRpb25T
ZXQ7IC8vIEZJWE1FIHdoYXQgYWJvdXQgYmFycmllcnM/CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNp
b24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw4IEBA
IFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKICAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5
RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKTsKICAg
ICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uY29weUZyb20oc3R1
YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIoCisg
ICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTY0LDYgKzY1LDkgQEAgUHV0QnlJZEFjY2VzcyBQ
dXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogCiBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2Vh
ayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBjb25zdAogeworICAgIGlmICghbV9jb25k
aXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgUmVwbGFjZToKICAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCkBAIC03NCwxNSArNzgsMTEgQEAgYm9v
bCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fbmV3U3RydWN0dXJlLmdldCgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtl
ZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CiAgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFp
bi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgIAogICAgIFB1dEJ5SWRBY2Nlc3MoKQogICAg
ICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudChVSU5UX01BWCkK
ICAgICB7CiAgICAgfQogICAgIApAQCAtNjIsMTQgKzYxLDE0IEBAIHB1YmxpYzoKICAgICAgICAg
SlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
CiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsK
ICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBU
cmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwg
b2xkU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2bSwgb3duZXIs
IGNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owog
ICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwogICAgICAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTUsOCAr
OTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAg
ICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAogICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CkBAIC0xMDQsMTAg
KzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgICAg
ICByZXN1bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAg
ICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Ci0gICAgICAgICAg
ICByZXN1bHQubV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKLSAgICAgICAgfQorICAgICAgICBy
ZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1
c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUg
PSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0NiwxNyArMTQxLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQog
ICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAg
ICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGNoYWlu
Q291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0dGVyKCkgfHwgaXNDdXN0
b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluQ291bnQ7Ci0gICAgfQorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBt
X2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgp
IGNvbnN0CiAgICAgewpAQCAtMTc4LDggKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzVHlw
ZSBtX3R5cGU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1Y3R1cmU7CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQcm9wZXJ0
eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgi
PGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50
KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNl
IFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBtX29mZnNldCwgIiB3aXRoIGF0
dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJz
ZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0
aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTT2JqZWN0KHByb3RvdHlwZSgpKSwgY29udGV4dCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnBy
aW50KCIgd2l0aCAiLCBpbkNvbnRleHQoSlNWYWx1ZTo6ZW5jb2RlKHJlcXVpcmVkVmFsdWUoKSks
IGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQor
Citib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2Up
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2Ug
UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVudE9mZnNldCAh
PSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJp
YnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJl
KCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhl
CisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJhY3ks
IGFuZCBtYXliZSBtb3JlIHJpc2t5IHRoYW4gd2Ugd2FudC4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQorICAgICAgICAKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUgPSBiYXNlLT5nZXREaXJlY3Qo
Y3VycmVudE9mZnNldCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gcmVxdWlyZWRWYWx1
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6
CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJh
c2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1l
IHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNhbiBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwg
YW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRvdyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24g
dGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBhZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAg
Ly8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZlY3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1w
dXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIgc2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZh
bGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNv
bnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZh
cmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVz
IHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRo
ZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAgICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0
IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFibGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UK
KyAgICAgICAgLy8gc2hvbGRuJ3QgaGF2ZSBhIFRPQ1RPVSByYWNlIGVpdGhlci4KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICAKKyAgICAg
ICAgV2F0Y2hwb2ludFNldCogc2V0OworICAgICAgICBzd2l0Y2ggKGVmZm9ydCkgeworICAgICAg
ICBjYXNlIE1ha2VOb0NoYW5nZXM6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPnByb3Bl
cnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbnN1cmVXYXRjaGFiaWxpdHk6CisgICAgICAgICAgICBzZXQgPSBzdHJ1
Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KAorICAgICAgICAgICAgICAg
ICpIZWFwOjpoZWFwKHN0cnVjdHVyZSktPnZtKCksIG9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFzZXQtPmlzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAor
eworICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVj
dHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJl
LCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9y
dCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sK
KyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkK
KyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKS5p
c0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2Vs
bCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tl
ZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpKQor
ICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFzUmVx
dWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQgY29u
ZGl0aW9uKQoreworICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNl
OgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQu
cHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2Ui
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIFBy
b3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2Vz
OworCitjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsK
KyAgICAgICAgUHJlc2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VPZlNl
dHRlciwKKyAgICAgICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0
aGlzIHdpbGwgYmUgYSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJl
IHRyYW5zaXRpb25zLCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0
aGUgbmV3IHN0cnVjdHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKCkK
KyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkKKyAg
ICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAg
UHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgeworICAg
ICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29u
ZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1
bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9w
ZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1
cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAg
ICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90
b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJl
dHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJp
ZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRlcjsK
KyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlv
biBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNldHRl
cldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQuZXF1aXZhbGVu
Y2UudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVy
KHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIAorICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wgaGFzT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2UgfTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09m
ZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBi
b29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQ
cmVzZW5jZSB9OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0F0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLmF0
dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyBy
ZXR1cm4gISEqdGhpcyAmJiAobV9raW5kID09IEFic2VuY2UgfHwgbV9raW5kID09IEFic2VuY2VP
ZlNldHRlcik7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNQcm90b3R5cGUoKSk7CisgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJv
dG90eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsgfQorICAgIEpTVmFsdWUg
cmVxdWlyZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUmVxdWlyZWRW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWU7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0
ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9raW5kKTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQ
cmVzZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAg
ICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFi
c2VuY2UucHJvdG90eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2
YWxlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1
LmVxdWl2YWxlbmNlLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91
aWQgIT0gb3RoZXIubV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAg
ICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0Cisg
ICAgICAgICAgICAgICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2Vu
Y2UuYXR0cmlidXRlczsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2Vu
Y2VPZlNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90
aGVyLnUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAg
ICAgICAgICByZXR1cm4gYS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNl
LnZhbHVlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1f
a2luZCA9PSBBYnNlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUg
Y29tcGF0aWJsZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZm
ZXJlbnQgdWlkcy4gSWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVj
aWRlIGhvdyB0byByZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
CisgICAgLy8gYSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2Vz
IHlvdSdsbCB3YW50IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGlu
IG90aGVyIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRo
aXMgd2lsbCBhbHNvIHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlr
ZSBQcmVzZW5jZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGlu
dmFsaWQKKyAgICAvLyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcu
CisgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkg
IT0gb3RoZXIudWlkKCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0
J3Mgc3RydWN0dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRl
ZC4KKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQg
dG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdU
b1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENo
ZWNrcyBpZiB0aGUgY29uZGl0aW9uIGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdp
dmVuIG9iamVjdCBhbmQgc3RydWN0dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1
cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50
ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29u
ZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRp
ZXMuIElmIHRoZSBvYmplY3QgaXMgbm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBp
bmRpY2F0ZXMgdGhhdCBjaGVja2luZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVu
IHN0cnVjdHVyZSBndWFyYW50ZWVzIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9i
amVjdCBpcworICAgIC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBv
dGhlciB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBj
b25kaXRpb24gaW4gYWRkaXRpb24gdG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlz
U3RpbGxWYWxpZChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0Owor
ICAgIAorICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJs
ZSwgYnV0IGNvdWxkIGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFw
cHJvcHJpYXRlIHdhdGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50
cyBhcmUgZW5hYmxlZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24g
dGhlIHByb3BlcnR5IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNw
YWNlIGZvcgorICAgIC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQg
bmV2ZXIgZ2V0IHZlcnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFi
bGUgd2F0Y2hpbmcsIHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQuCisgICAgZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlz
IHRoZSBkZWZhdWx0LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2Yg
YW55IFN0cnVjdHVyZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYg
dGhlIHByb3BlcnR5IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1h
a2UKKyAgICAgICAgLy8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5n
IGZyb20gYSBKSVQgdGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJl
ZmVyYWJsZSB3aGVuIGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24g
Zm9yIHRoZSBmaXJzdCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2lu
dCBmaXJlIHRoYXQgY2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBh
CisgICAgICAgIC8vIHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGlu
ZyBpbXBsaWVzIHRoYXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0
IHRvIG1ha2UgaXQgcHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5n
IHdhdGNoZWQgbWF5IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVm
ZXIgdG8gb25seSBhc3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJl
ZW4KKyAgICAgICAgLy8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAg
ICBNYWtlTm9DaGFuZ2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0
byBlbnN1cmUgdGhhdCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhh
cyBubworICAgICAgICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVz
dCBtZWFucyB0aGF0IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyBy
ZXBsYWNlbWVudCB3YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxl
ZCBhbHJlYWR5LiBEbyBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywg
c2luY2UgdGhlIGFjdCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUu
CisgICAgICAgIEVuc3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkg
Ynkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1
cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wg
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3Ry
dWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBN
YWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBz
dGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJh
bnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlz
V2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIs
IFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJv
b2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9m
IG91ciBjb25kaXRpb25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9v
bCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMg
YXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAg
IHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBX
YXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlk
OworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFs
ZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0
IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25I
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwxOCBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCi0gICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
LSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IGludGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENo
YWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywg
c3RydWN0dXJlLCBjaGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9w
Y29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0
aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsX291dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzb25jdXJyZW50bHko
CisgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHByb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOworICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
c3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGludGVuZGVkQ2hhaW4uZ2V0KCksIG9mZnNldCk7Cisg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0
dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBt
YXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0x
NjUsMTYgKzE2NCwxNCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAogICAgICAgICAgICAgc3R1YkluZm8t
PnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAg
ICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgUmVmUHRyPElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT51
LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKSB7Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9w
dFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJv
ZmlsZWRCbG9jaywgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1
cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0
aW9uLmNoYWluLmdldCgpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRy
YW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBj
aGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNl
dCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgfQpAQCAtMjE5LDE1ICsyMTYsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJl
KCktPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhz
bG93UGF0aFN0YXRlKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gY2hhaW47Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hh
aW4oCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBhY2Nlc3Mub2xkU3Ry
dWN0dXJlKCksIGFjY2Vzcy5jaGFpbigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2hh
aW4tPmlzU3RpbGxWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwg
Y2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1
Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBA
IC0yNTMsNyArMjQ2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ss
ICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojpz
ZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0
dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0
YXR1cy5jb25kaXRpb25TZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShj
YWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzY4LDIyICszNjEsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgp
KQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAg
Ci0gICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAgICBpZiAoIWlz
RGlyZWN0KSB7Ci0gICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAg
ICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFkLW9ubHkgcHJv
cGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNl
cHRTdG9yZVRvKHVpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBj
aGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9yIGRp
Y3Rpb25hcmllcykKLSAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhlIGRpY3Rpb25hcnkg
Y2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbm90IGJlZW4KLSAg
ICAgICAgICAgIC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0cmFuc2l0aW9uLiBB
bmQgcmVhbGx5IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKLSAgICAgICAgICAgIC8vIGJh
aWwgaGVyZSBpcyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9wdGlt
aXppbmcgSklUIGdvIGFuZCBmbGF0dGVuCi0gICAgICAgICAgICAvLyBkaWN0aW9uYXJpZXMgaWYg
d2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3ZXJlIG5ldmVy
IHVzZWQgYXMKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUgcHJvdG90
eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBvZgotICAg
ICAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwuCi0gICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6ZWQoKSkKKyAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgICAgICB9CiAgICAgCkBAIC0zOTQsNyArMzc2LDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQu
YXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4uZ2V0KCksIG9mZnNldCkpOworICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRp
b25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNp
b24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0
QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9raW5kID0gb3RoZXIubV9raW5kOwogICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CiAgICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9j
b25zdGFudENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJh
c2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29m
ZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQog
ICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1
cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNjQsMjkgKzYzLDI2IEBAIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGMKIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gVHJhbnNpdGlvbjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7
CiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgIGlmIChzdHJ1
Y3R1cmVDaGFpbikKLSAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQu
bV9jb25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gU2V0dGVyOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBp
ZiAoY2hhaW4pIHsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9jb25zdGFu
dENoZWNrcyk7Ci0gICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBjaGFpbi0+dGVybWlu
YWxQcm90b3R5cGUoKTsKLSAgICB9CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxs
TGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTEzNCwxNiArMTMwLDEyIEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMo
KSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQg
UHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAorSlNPYmplY3QqIFB1dEJ5SWRW
YXJpYW50OjphbHRlcm5hdGVCYXNlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoa2luZCgpID09IFNl
dHRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBz
dHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZv
cihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2tpbmQgPT0gU2V0dGVyKTsKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VD
b25kaXRpb24oKS5vYmplY3QoKTsKIH0KIAogYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRv
TWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQpAQCAtMTk2LDYgKzE4OCw3IEBAIGJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAg
ICBBU1NFUlQoIXJlcGxhY2UuY29uZGl0aW9uU2V0KCkpOwogICAgIAogICAgIC8vIFRoaXMgc29y
dCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNo
IHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAogICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVy
ZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlz
IGRvZXNuJ3QKQEAgLTIzMiwxMyArMjI1LDEzIEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQoUHJpbnQKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0
aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAg
ICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIs
IFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29u
dGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29u
dGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
Ij4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoKICAgICAg
ICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29u
c3RhbnRDaGVja3MoKSwgY29udGV4dCksICJdIik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9j
b25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNl
KQogICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQo
SlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgi
LCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAgICAgICAgOiBt
X2tpbmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCi0gICAgICAg
ICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9m
ZnNldCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYgKzUzLDE1IEBAIHB1YmxpYzoKICAgICBQdXRC
eUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBv
cGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFy
aWFudCByZXBsYWNlKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShj
b25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xk
U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAg
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwogICAgIAogICAg
IEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIApAQCAtMTAwLDEwICs5
OCw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAg
IGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7
IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTEx
MSwxMyArMTA2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAgfQog
ICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fYWx0ZXJuYXRlQmFz
ZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsK
KyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0OwogICAgIAogICAgIENhbGxMaW5r
U3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewpAQCAtMTM2LDggKzEyNSw3IEBA
IHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0
dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0
ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAg
ICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDYsMjQgKzQ2LDI5IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFN0
cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJu
YWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1
c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KLSAg
ICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0
IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNh
bCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0gICAgbV9o
b2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAg
aWYgKCFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmls
aXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVt
aXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAgICAvLyBUaGF0
IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhl
IHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9y
IGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAgICAgICBtX2hv
bGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCkt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKQogewogfQogCi1T
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCog
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFkKTsKIH0KIAog
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJlZlB0cjxXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9jayogY29kZUJs
b2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7CiAg
ICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVmKG5ldyBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykpOwpAQCAtNzIs
NyArNzcsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvCiAgICAg
ICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAgcmV0dXJuIGhv
bGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSArNDcsMTEgQEAg
Y2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQotICAg
ICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9s
ZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAgIDogbV9rZXko
a2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25leHQoV1RGOjpt
b3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKICAgICBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpAQCAtODMsMTEg
KzgxLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0
Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgc3Rh
dGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFk
ZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKik7
CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgsMTIgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoK
ICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKICAgICBj
YXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhh
dmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgsMTAgQEAgYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJh
bnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjpp
c01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAg
IHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAg
ICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHUu
cHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8g
UHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQ
dXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNE
aXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50
ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc1
LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwog
ICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRk
V2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKICAgICB7CiAgICAg
ICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5j
ZUFuZEFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0
aGlzKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRpdGlv
bik7CiAgICAgfQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpAQCAtMjE3LDIzICsyMTgs
MTIgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAgICAgICB9IGdldEJ5SWRT
ZWxmOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1
Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFN0cnVjdHVyZT4gcHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVj
dDsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAg
ICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgOiAxOwot
ICAgICAgICB9IGdldEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFBv
bHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0QnlJZExpc3Q7CiAgICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJl
dmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
c3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4g
Y2hhaW47CisgICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7CiAgICAgICAgIH0gcHV0
QnlJZFRyYW5zaXRpb247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA2MCwzMCAr
MjA2MCwyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAg
ICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgZm9y
IChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlP
ZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBnZXRD
YXNlLnNldCgpOwogICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlm
IChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
YmFzZVNldC5tZXJnZShzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJh
c2VGb3JMb2FkOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAg
ICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlLm1fdmFsdWU7
Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAgICAgICBt
X2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAgIGJhc2VG
b3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAg
ICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoZ2V0Q2FzZS5t
ZXRob2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUg
dGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAgICAgICAg
IG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0
KSwKKyAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5jb25zdGFudCgpLAogICAgICAgICAgICAgICAg
IG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICAgICAgcmVzdWx0Lm1l
cmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisg
ICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2Up
OworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aW5z
dGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRjaGFibGUoKSk7CisgICAg
CisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2lu
dCgmbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBtX2tleS0+b2JqZWN0KCktPnN0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkobV9rZXku
dWlkKCkpOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1
cmUoKS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICBzZXQt
PmFkZFdhdGNocG9pbnQoJm1fcHJvcGVydHlXYXRjaHBvaW50KTsKK30KKwordm9pZCBBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmZpcmUoY29uc3QgRmlyZURldGFpbCYg
ZGV0YWlsKQoreworICAgIC8vIE9uZSBvZiB0aGUgd2F0Y2hwb2ludHMgZmlyZWQsIGJ1dCB0aGUg
b3RoZXIgb25lIGRpZG4ndC4gTWFrZSBzdXJlIHRoYXQgbmVpdGhlciBvZiB0aGVtIGFyZQorICAg
IC8vIGluIGFueSBzZXQgYW55bW9yZS4gVGhpcyBzaW1wbGlmaWVzIHRoaW5ncyBieSBhbGxvd2lu
ZyB1cyB0byByZWluc3RhbGwgdGhlIHdhdGNocG9pbnRzCisgICAgLy8gd2hlcmV2ZXIgZnJvbSBz
Y3JhdGNoLgorICAgIGlmIChtX3N0cnVjdHVyZVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAgICAg
ICAgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50LnJlbW92ZSgpOworICAgIGlmIChtX3Byb3BlcnR5V2F0
Y2hwb2ludC5pc09uTGlzdCgpKQorICAgICAgICBtX3Byb3BlcnR5V2F0Y2hwb2ludC5yZW1vdmUo
KTsKKyAgICAKKyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVu
c3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7Cisg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9p
bnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7Cisg
ICAgfQorICAgIAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFk
YXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0
cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAg
IG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9V
bnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Cit9CisK
K3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVX
YXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQor
eworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3N0cnVjdHVyZVdhdGNocG9p
bnQpOworICAgIAorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCog
cGFyZW50ID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludCo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAt
IG15T2Zmc2V0KTsKKyAgICAKKyAgICBwYXJlbnQtPmZpcmUoZGV0YWlsKTsKK30KKwordm9pZCBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hwb2lu
dDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBw
dHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoCisgICAgICAgIEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9wcm9wZXJ0eVdhdGNocG9pbnQpOworICAg
IAorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCogcGFyZW50ID0K
KyAgICAgICAgYml0d2lzZV9jYXN0PEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludCo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIG15T2Zmc2V0
KTsKKyAgICAKKyAgICBwYXJlbnQtPmZpcmUoZGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisgICAgCisg
ICAgdm9pZCBpbnN0YWxsKCk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgU3RydWN0dXJlV2F0Y2hw
b2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0cnVjdHVy
ZVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisgICAgY2xh
c3MgUHJvcGVydHlXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgUHJvcGVydHlXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsK
KyAgICB9OworICAgIAorICAgIHZvaWQgZmlyZShjb25zdCBGaXJlRGV0YWlsJik7CisgICAgCisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVC
bG9jazsKKyAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50IG1fc3RydWN0dXJlV2F0Y2hwb2ludDsKKyAg
ICBQcm9wZXJ0eVdhdGNocG9pbnQgbV9wcm9wZXJ0eVdhdGNocG9pbnQ7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJs
b2NrKQorICAgIDogbV9rZXkoa2V5KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGtleS53YXRjaGluZ1JlcXVyaWVzU3RyY3V0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWtleS53YXRjaGluZ1JlcXVpcmVz
UmVwbGFjZW1lbnRXYXRjaHBvaW50KCkpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRjaGFi
bGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0
aW9uV2F0Y2hwb2ludCh0aGlzKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQ6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgaWYgKG1f
a2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7
CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1f
a2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgIH0KKyAgICAKKyAgICBTdHJp
bmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5
LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAgICBTdHJpbmdGaXJlRGV0YWlsIGRldGFp
bChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0dGlz
b24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQs
IENvdW50UmVvcHRpbWl6YXRpb24sICZkZXRhaWwpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworcHVibGljOgorICAgIEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtl
eSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAgIAor
ICAgIHZvaWQgaW5zdGFsbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGZpcmVJ
bnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyArMjAzLDEyIEBAIHByaXZhdGU6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZUNv
bnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlv
biosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3Mp
OwogICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSogaGFuZGxlR2V0
QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSBvcCA9
IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQs
IE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7
CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZz
ZXQpOworICAgIAorICAgIE5vZGUqIGxvYWQoTm9kZSogYmFzZSwgY29uc3QgR2V0QnlJZFZhcmlh
bnQmIHZhcmlhbnQpOworICAgICAgICAKICAgICB2b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAg
IGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CkBA
IC0yMTIsNyArMjE3LDM0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAogICAg
ICAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwg
Y29uc3QgUHV0QnlJZFN0YXR1cyYsCiAgICAgICAgIGJvb2wgaXNEaXJlY3QpOwotICAgIHZvaWQg
ZW1pdENoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7CisgICAgCisg
ICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIFByb3Bl
cnR5T2Zmc2V0KTsKKworICAgIC8vIEVpdGhlciByZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1p
dCBhIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi4gUmV0dXJucyBmYWxzZSBpZiB0aGUKKyAgICAv
LyBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLCBhbmQgdGhlcmVmb3JlIG5vIHJlYXNvbmFibGUg
Y2hlY2sgY2FuIGJlIGVtaXR0ZWQuCisgICAgYm9vbCBjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYpOworICAgIAorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHByb21vdGVUb0NvbnN0
YW50KEdldEJ5T2Zmc2V0TWV0aG9kKTsKKyAgICAKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3
YXRjaHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uIEl0IG11c3QgYmUg
YSBQcmVzZW5jZQorICAgIC8vIGNvbmRpdGlvbi4gSXQgd2lsbCBhdHRlbXB0IHRvIHByb21vdGUg
YSBQcmVzZW5jZSBjb25kaXRpb24gdG8gYW4gRXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8v
IEVtaXRzIGNvZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUgdGhhdCB0aGUgY29uZGl0aW9uIGd1YXJk
cywgYW5kIHJldHVybnMgYSBub2RlIGNvbnRhaW5pbmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVl
LiBSZXR1cm5zIG51bGwgaWYgdGhlIGNvbmRpdGlvbiBubyBsb25nZXIgaG9sZHMuCisgICAgR2V0
QnlPZmZzZXRNZXRob2QgcGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsK
KyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBHZXRCeU9mZnNldE1ldGhvZCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSog
bG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBOb2Rl
VHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAgICAvLyBDYWxscyBjaGVjaygpIGZvciBlYWNo
IGNvbmRpdGlvbiBpbiB0aGUgc2V0OiB0aGF0IGlzLCBpdCBlaXRoZXIgZW1pdHMgY2hlY2tzIG9y
IHJlZ2lzdGVycworICAgIC8vIHdhdGNocG9pbnRzIChvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0
d28pIHRvIG1ha2UgdGhlIGNvbmRpdGlvbnMgaG9sZC4gSWYgYW55IG9mIHRob3NlCisgICAgLy8g
Y29uZGl0aW9ucyBhcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZSwgcmV0dXJucyBmYWxzZS4KKyAgICBi
b29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jik7CisgICAgCisgICAg
Ly8gQ2FsbHMgY2hlY2soKSBmb3IgdGhvc2UgY29uZGl0aW9ucyB0aGF0IGFyZW4ndCB0aGUgc2xv
dCBiYXNlLCBhbmQgY2FsbHMgbG9hZCgpIGZvciB0aGUgc2xvdAorICAgIC8vIGJhc2UuIERvZXMg
YSBjb21iaW5hdGlvbiBvZiB3YXRjaHBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgY2hlY2sgZW1pc3Np
b24gdG8gZ3VhcmQgdGhlCisgICAgLy8gY29uZGl0aW9ucywgYW5kIGVtaXRzIGNvZGUgdG8gbG9h
ZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2xvdCBiYXNlLiBSZXR1cm5zIGEgbm9kZSBjb250YWluaW5n
CisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlmIGFueSBvZiB0aGUgY29u
ZGl0aW9ucyB3ZXJlIG5vIGxvbmdlciBjaGVja2FibGUuCisgICAgR2V0QnlPZmZzZXRNZXRob2Qg
cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICBOb2RlKiBs
b2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIE5v
ZGVUeXBlID0gR2V0QnlPZmZzZXQpOwogCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7
CiAgICAgdm9pZCBjbGVhckNhY2hlcygpOwpAQCAtNzA2LDYgKzczOCw5IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCByb3V0ZSB0byBlbWl0UHJvcGVydHlDaGVjaywgbm90IHRoZSBvdGhlciB3YXkgYXJv
dW5kLiBCdXQgY3VycmVudGx5LAorICAgICAgICAvLyB0aGlzIGdldHMgbm8gcHJvZml0IGZyb20g
dXNpbmcgZW1pdFByb3BlcnR5Q2hlY2soKSBzaW5jZSB3ZSdsbCBub24tYWRhcHRpdmVseSB3YXRj
aCB0aGUKKyAgICAgICAgLy8gb2JqZWN0J3Mgc3RydWN0dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBp
dCBhIHdlYWtKU0Nvc250YW50LgogICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gd2Vha0pTQ29u
c3RhbnQob2JqZWN0KTsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3ROb2RlKTsKICAgICAg
ICAgcmV0dXJuIG9iamVjdE5vZGU7CkBAIC0yMjQwLDE1ICsyMjc1LDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9k
ZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9w
KQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7Ci0gICAgaWYgKGJhc2UtPmhhc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENv
bnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkg
ewotICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKLSAgICAgICAgICAgIHJl
dHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAg
ICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQp
KQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwpAQCAtMjI2NCw2ICsyMjkyLDE4IEBA
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICByZXR1cm4gZ2V0
QnlPZmZzZXQ7CiB9CiAKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBzdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZVNldCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBOb2RlVHlwZSBvcCkKK3sKKyAgICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgewor
ICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQpKSB7CisgICAgICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIHdlYWtK
U0NvbnN0YW50KGNvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4g
aGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zm
c2V0LCBvcCk7Cit9CisKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChO
b2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5v
ZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKQEAgLTIyODEsMTAgKzIz
MjEsMjI1IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0
IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK3ZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmVtaXRHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwor
ICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBiYXNlOworICAgIGVsc2UKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChH
ZXRCdXR0ZXJmbHksIGJhc2UpOworICAgIAorICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0g
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOworICAgIGRhdGEtPm9mZnNldCA9IG9m
ZnNldDsKKyAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAg
ICAKKyAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOworCisgICAgcmV0dXJu
IGdldEJ5T2Zmc2V0OworfQorCitib29sIEJ5dGVDb2RlUGFyc2VyOjpjaGVjayhjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmIChtX2dyYXBoLndhdGNo
Q29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAg
ICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoc3RydWN0dXJlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIENoZWNr
U3RydWN0dXJlLAorICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0
dXJlKSksCisgICAgICAgIHdlYWtKU0NvbnN0YW50KGNvbmRpdGlvbi5vYmplY3QoKSkpOworICAg
IHJldHVybiB0cnVlOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cHJv
bW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kKQogewotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNlbGxDb25zdGFu
dFdpdGhTdHJ1Y3R1cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVj
dHVyZSgpKTsKKyAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9h
ZEZyb21Qcm90b3R5cGUKKyAgICAgICAgJiYgbWV0aG9kLnByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUo
KS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1f
Z3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCks
IG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCksIG1ldGhvZC5vZmZzZXQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXpl
KGNvbnN0YW50KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBtZXRob2Q7Cit9CisKK0dldEJ5
T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIC8vIFdlIG1pZ2h0IHByb21vdGUgdGhpcyB0
byBFcXVpdmFsZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBzdWNoIHBy
b21vdGlvbgorICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5IHRoaXMg
Y2Fubm90IGJlIGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8v
IE5vbmUgb2YgdGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEgbG9hZCBv
ZiBhbiBFcXVpdmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBwb3J0aW5n
IGl0IHdvdWxkIGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVMRUFTRV9B
U1NFUlQoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwor
ICAgIAorICAgIC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRoaXMsIGZy
b20gbW9zdCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAgLy8gMSkg
V2F0Y2hwb2ludCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBhIGNvbnN0
YW50IG5vZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIgY29kZSBp
cyBlbWl0dGVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMgbmV2ZXIg
cmVnaXN0ZXJlZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBjb2RlIGFu
ZCB3ZSB3b24ndCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QKKyAgICAv
LyAgICB0cmFuc2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJsZSByaWdo
dCBub3cuCisgICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1
cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQgYnkgdGhl
CisgICAgLy8gICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNoIHRoZSBz
dHJ1Y3R1cmUgYW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8vICAgIGNv
bmRpdGlvbiwgc2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBjb25zdGFu
dCBpbiBJUiB3aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUgc3RydWN0
dXJlIGFueXdheSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUgY29uZGl0
aW9uLgorICAgIC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJy
ZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0aGUKKyAg
ICAvLyAgICBERkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSBh
bmQgIWRmZ1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0aGUgY29u
ZGl0aW9uLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRvIGVtaXQg
YSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5vdCB3YXRj
aGFibGUuIEVtaXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQgYSBsb2Fk
LgorICAgIC8vCisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBHaXZlIHVw
IGFuZCByZXR1cm4gbnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWdyZWUgb24gd2hh
dCB0aGUgc3RydWN0dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGluZyB0aGVzZSB2YXJp
b3VzCisgICAgLy8gY2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9u
Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRvIHByb21v
dGUgUHJlc2VuY2UgdG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5nIGFueXRo
aW5nIGVsc2UKKyAgICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4gQWxzbywg
dGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0CisgICAg
Ly8gd2UgZG9uJ3Qgd2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVxdWl2YWxl
bmNlIChzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAoMiksIGFuZCAo
MykgYWJvdmUpLgorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQoY29uZGl0aW9uLm9m
ZnNldCgpKSkgeworICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNhdXNlIG9ubHkgdGhl
IEdDIGNhbiBjYXVzZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdhcmJhZ2UKKyAgICAg
ICAgLy8gdmFsdWUuCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRpb24ub2JqZWN0KCkt
PmdldERpcmVjdChjb25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiBlcXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgICAgICBj
b25kaXRpb24ub2JqZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOworICAgICAgICBpZiAo
bV9ncmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgICAg
ICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKHZhbHVl
KSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ2xsIGhhdmUgdG8gbWF0
ZXJpYWxpemUgdGhlIGNvbmRpdGlvbidzIGJhc2UgYXMgYSBjb25zdGFudCBpbiBERkcgSVIuIE9u
Y2UKKyAgICAvLyB3ZSBkbyB0aGlzLCB0aGUgZnJvemVuIHZhbHVlIHdpbGwgaGF2ZSBpdHMgb3du
IGlkZWEgb2Ygd2hhdCB0aGUgc3RydWN0dXJlIGlzLiBVc2UgdGhhdCBmcm9tCisgICAgLy8gbm93
IG9uIGp1c3QgYmVjYXVzZSBpdCdzIGxlc3MgY29uZnVzaW5nLgorICAgIEZyb3plblZhbHVlKiBi
YXNlID0gbV9ncmFwaC5mcmVlemUoY29uZGl0aW9uLm9iamVjdCgpKTsKKyAgICBzdHJ1Y3R1cmUg
PSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiB0aGUgc3RydWN0dXJl
IHRoYXQgd2UndmUgcmVnaXN0ZXJlZCBtYWtlcyB0aGUgY29uZGl0aW9uIGhvbGQuIElmIG5vdCwg
anVzdCBnaXZlCisgICAgLy8gdXAuIFRoaXMgaXMgY2FzZSAoNSkgYWJvdmUuCisgICAgaWYgKCFj
b25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJl
dHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgIAorICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUg
aXMgd2F0Y2hlZCBieSB0aGUgREZHIGFscmVhZHksIHRoZW4ganVzdCB1c2UgdGhpcyBmYWN0IHRv
IGVtaXQgdGhlIGxvYWQuCisgICAgLy8gVGhpcyBpcyBjYXNlICgyKSBhYm92ZS4KKyAgICBpZiAo
c3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICByZXR1cm4gcHJvbW90ZVRvQ29u
c3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlv
bi5vZmZzZXQoKSkpOworICAgIAorICAgIC8vIElmIHdlIGNhbiB3YXRjaCB0aGUgY29uZGl0aW9u
IHJpZ2h0IG5vdywgdGhlbiB3ZSBjYW4gZW1pdCB0aGUgbG9hZCBhZnRlciB3YXRjaGluZyBpdC4g
VGhpcworICAgIC8vIGlzIGNhc2UgKDMpIGFib3ZlLgorICAgIGlmIChtX2dyYXBoLndhdGNoQ29u
ZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRC
eU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgp
KSk7CisgICAgCisgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9w
SW5mbyhiYXNlKSk7CisgICAgCisgICAgLy8gV2UgY2FuJ3Qgd2F0Y2ggYW55dGhpbmcgYnV0IHdl
IGtub3cgdGhhdCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgc2F0aXNmaWVzIHRoZSBjb25kaXRpb24u
IFNvLAorICAgIC8vIGNoZWNrIGZvciB0aGF0IHN0cnVjdHVyZSBhbmQgdGhlbiBlbWl0IHRoZSBs
b2FkLgorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLCAKKyAgICAgICAg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3ZWFr
SlNDb25zdGFudChiYXNlTm9kZSkpOworICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRC
eU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgp
KSk7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBl
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeU9mZnNldCBtZXRob2QsIE5vZGVUeXBl
IG9wKQoreworICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgIGNhc2UgSW52YWxpZDoK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgcmV0
dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7Cisg
ICAgY2FzZSBMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGFk
ZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5wcm90b3R5cGUoKSkpOworICAgICAg
ICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZp
ZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOworICAgIH0KKyAgICBjYXNlIExvYWQ6Cisg
ICAgICAgIC8vIFdpbGwgbmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biwgTm9kZVR5cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxv
YWQoY29uZGl0aW9uKTsKKyAgICByZXR1cm4gbG9hZChwcmVkaWN0aW9uLCBtX2dyYXBoLmlkZW50
aWZpZXJzKCkuZW5zdXJlKGNvbmRpdGlvbi51aWQoKSksIG1ldGhvZCwgb3ApOworfQorCitib29s
IEJ5dGVDb2RlUGFyc2VyOjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
Y29uZGl0aW9uIDogY29uZGl0aW9uU2V0KSB7CisgICAgICAgIGlmICghY2hlY2soY29uZGl0aW9u
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0dldEJ5T2Zmc2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0Owor
ICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29uZGl0
aW9uU2V0KSB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICBj
YXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFyZXN1bHQpOyAvLyBTaG91bGQgb25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhlc2UuCisg
ICAgICAgICAgICByZXN1bHQgPSBsb2FkKHByZWRpY3Rpb24sIGNvbmRpdGlvbiwgb3ApOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0
TWV0aG9kKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGlmICghY2hlY2soY29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlP
ZmZzZXRNZXRob2Q7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoISFyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2Fk
KAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIE5vZGVUeXBlIG9wKQoreworICAgIEdldEJ5T2Zmc2V0
TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvblNldCk7CisgICAgcmV0dXJuIGxvYWQo
CisgICAgICAgIHByZWRpY3Rpb24sCisgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1
cmUoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkudWlkKCkpLAorICAgICAgICBtZXRo
b2QsIG9wKTsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoTm9kZSogYmFzZSwgY29u
c3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCit7CisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVj
dHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0
KCkpKSwgYmFzZSk7CisgICAgCisgICAgU3BlY3VsYXRlZFR5cGUgbG9hZFByZWRpY3Rpb247Cisg
ICAgTm9kZVR5cGUgbG9hZE9wOworICAgIGlmICh2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpIHsK
KyAgICAgICAgbG9hZFByZWRpY3Rpb24gPSBTcGVjQ2VsbE90aGVyOworICAgICAgICBsb2FkT3Ag
PSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkUHJl
ZGljdGlvbiA9IHByZWRpY3Rpb247CisgICAgICAgIGxvYWRPcCA9IEdldEJ5T2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKKyAgICBpZiAoIXZhcmlhbnQuY29uZGl0
aW9uU2V0KCkuaXNFbXB0eSgpKQorICAgICAgICBsb2FkZWRWYWx1ZSA9IGxvYWQobG9hZFByZWRp
Y3Rpb24sIHZhcmlhbnQuY29uZGl0aW9uU2V0KCksIGxvYWRPcCk7CisgICAgZWxzZSB7CisgICAg
ICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBsb2FkUHJl
ZGljdGlvbiwgYmFzZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgaWRlbnRpZmllck51bWJlciwg
dmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgIGxvYWRPcCk7CisgICAgfQorCisgICAgLy8g
TWFrZSBzdXJlIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiBrbm93cyB0aGF0IHdlJ3ZlIHVzZWQgYmFz
ZS4KKyAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOworICAgIAorICAgIHJldHVybiBsb2Fk
ZWRWYWx1ZTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKQEAgLTIz
MDcsMTggKzI1NjIsMzMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90
aWNlSW5saW5lZEdldEJ5SWQoKTsKLSAgICAKKyAgICAgICAgVmVjdG9yPE11bHRpR2V0QnlPZmZz
ZXRNZXRob2QsIDI+IGNhc2VzOworICAgICAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5
cGUgc3RydWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1h
eWJlIG5vdCBiZQogICAgICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVs
eSBleGVjdXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAg
IC8vICAgIG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUu
Ci0gICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5
SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCisgICAg
ICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBnZXRCeUlkU3RhdHVzLnZh
cmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChNdWx0aUdldEJ5T2Zmc2V0TWV0
aG9kOjpsb2FkKHZhcmlhbnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRo
b2QgbWV0aG9kID0gcGxhbkxvYWQoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlv
blNldCgpKTsKKyAgICAgICAgICAgIGlmICghbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoTXVsdGlHZXRCeU9mZnNl
dE1ldGhvZCh2YXJpYW50LnN0cnVjdHVyZVNldCgpLCBtZXRob2QpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNv
bXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7CisgICAgCiAgICAgICAgIC8vIDIp
IEVtaXQgYSBNdWx0aUdldEJ5T2Zmc2V0CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBk
YXRhID0gbV9ncmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRh
LT52YXJpYW50cyA9IGdldEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+Y2Fz
ZXMgPSBjYXNlczsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJO
dW1iZXI7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoTXVsdGlHZXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBP
cEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKQEAgLTIzMjgsMzAgKzI1OTgsMTYgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICBBU1NFUlQoZ2V0QnlJZFN0YXR1cy5u
dW1WYXJpYW50cygpID09IDEpOwogICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBnZXRCeUlk
U3RhdHVzWzBdOwogICAgICAgICAgICAgICAgIAorICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9h
ZChiYXNlLCB2YXJpYW50KTsKKyAgICBpZiAoIWxvYWRlZFZhbHVlKSB7CisgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoZ2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiks
IGJhc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX2dyYXBoLmNvbXBp
bGF0aW9uKCkpCiAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdl
dEJ5SWQoKTsKICAgICAKLSAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNlOwotICAgICAgICAg
ICAgICAgIAotICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOwotICAgIAotICAg
IGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKLQotICAgIGlmICh2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAKLSAgICAvLyBVbmxlc3Mgd2Ugd2FudCBidWdzIGxpa2Ug
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NzgzLCB3ZSBuZWVkIHRv
Ci0gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJhc2Ugb2YgdGhlIG9yaWdpbmFsIGdldF9ieV9pZCBp
cyBrZXB0IGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aAotICAgIC8vIGFsbCBvZiB0aGUgc3Bl
Y3VsYXRpb25zLiBXZSBvbmx5IGluc2VydCB0aGUgUGhhbnRvbSBpZiB0aGVyZSBoYWQgYmVlbiBh
IENoZWNrU3RydWN0dXJlCi0gICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGJhc2Ug
Zm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNlLgotICAgIGlmIChvcmlnaW5hbEJh
c2UgIT0gYmFzZSkKLSAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcmlnaW5hbEJhc2UpOwot
ICAgIAotICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAg
IHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAot
ICAgICAgICBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51bWJlciwg
dmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQgOiBHZXRCeU9mZnNldCk7Ci0gICAgCiAgICAgaWYgKCF2YXJp
YW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbk9wZXJhbmQpLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MjIs
MTcgKzI2NzgsMjAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGgu
Y29tcGlsYXRpb24oKSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNl
SW5saW5lZFB1dEJ5SWQoKTsKLSAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBpZiAocHV0QnlJ
ZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZW1pdENo
ZWNrcyhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0
aW9uU2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAg
ICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Cisg
ICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9t
dWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRC
eUlkU3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBp
ZGVudGlmaWVyTnVtYmVyOwpAQCAtMjQ1NCw3ICsyNzEzLDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbjogewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAg
ICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICBpZiAoIWNo
ZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQu
b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0Jl
ZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1MDUsMTkgKzI3NjcsMTEgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNl
OwotICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgIENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkp
LCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENo
ZWNrcygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkK
LSAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zm
c2V0KAotICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0
dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAgICBH
ZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9h
ZChiYXNlLCB2YXJpYW50KTsKKyAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgeworICAgICAgICAg
ICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0
dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgTm9kZSogc2V0dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZhbHVl
KTsKICAgICAgICAgCkBAIC0yNTQ1LDcgKzI3OTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9m
ZnNldCkpLnRvTG9jYWwoKSk7CiAgICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdp
c3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5h
a2VkU2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJh
c2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0
UmVnaXN0ZXIrKyksIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAgICAgICAgIGhh
bmRsZUNhbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDkgQEAgdm9pZCBDb21t
b25EYXRhOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgIHRyYWNrZWRS
ZWZlcmVuY2VzLmNoZWNrKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQo
KSk7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgZm9yIChBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQqIHdhdGNocG9pbnQgOiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzKQorICAg
ICAgICB3YXRjaHBvaW50LT5rZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5j
ZXMpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIklu
bGluZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTgsNiArMTAwLDgg
QEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5j
ZXM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0dXJlUmVm
ZXJlbmNlczsKICAgICBCYWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3YXRjaHBv
aW50czsKKyAgICBCYWc8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQ+IGFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CiAgICAg
VmVjdG9yPEp1bXBSZXBsYWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsKICAgICAKICAgICBSZWZQ
dHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDggKzI5NCw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7
IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3Jl
LgogICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cg
dGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRh
LnZhcmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0TWV0aG9kJiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tp
XTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5maWx0ZXIoYmFz
ZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RydWN0dXJlU2V0KCku
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzW2ktLV0g
PSBkYXRhLnZhcmlhbnRzLmxhc3QoKTsKQEAgLTUyOSw3ICs1MjksNyBAQCBwcml2YXRlOgogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQotICAgICAgICAKKyAgICAKICAg
ICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUs
IGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZh
cmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCiAgICAgewogICAgICAgICBOb2RlT3Jp
Z2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4NzI0NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQoCi0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBXYXRjaHBv
aW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVy
VmlldyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQogeworICAgIFdhdGNocG9pbnQqIHdhdGNo
cG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7CiAgICAgQXJyYXlCdWZm
ZXJOZXV0ZXJpbmdXYXRjaHBvaW50KiBuZXV0ZXJpbmdXYXRjaHBvaW50ID0KICAgICAgICAgQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50OjpjcmVhdGUoKmNvZGVCbG9jay0+dm0oKSk7CiAg
ICAgbmV1dGVyaW5nV2F0Y2hwb2ludC0+c2V0KCktPmFkZCh3YXRjaHBvaW50KTsKQEAgLTQ1LDEw
ICs0NiwyMyBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphCiB9CiAK
IHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwg
Q29tbW9uRGF0YSYgY29tbW9uKQogewogICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQoaW5mZXJy
ZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBp
ZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3
YXksIHRvby4KLSAgICBpbmZlcnJlZFZhbHVlLT5hZGQod2F0Y2hwb2ludCk7CisgICAgaW5mZXJy
ZWRWYWx1ZS0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Cit9CisKK3Zv
aWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAorICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBDb21tb25E
YXRhJiBjb21tb24pCit7CisgICAgc3dpdGNoIChrZXkua2luZCgpKSB7CisgICAgY2FzZSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgY29tbW9uLmFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29kZUJsb2NrKS0+aW5zdGFsbCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CiB9CiAKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNo
cG9pbnRzKCkgeyB9CkBAIC03NCw2ICs4OCwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6
YWRkTGF6aWx5KEpTQXJyCiAgICAgbV9idWZmZXJWaWV3cy5hZGRMYXppbHkodmlldyk7CiB9CiAK
K3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSkKK3sKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHko
a2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAt
ODgsNiArMTA3LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgog
ICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBt
X2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1f
YnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9hZGFw
dGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAK
IGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTk1LDcg
KzExNSw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICBy
ZXR1cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJl
U3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgp
Ci0gICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBt
X2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0
dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogCkBAIC00MSwxNSArNDIsMTUgQEAgY2xhc3MgR3JhcGg7CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBUIHNldCwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBzdGF0aWMgdm9p
ZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21tb25EYXRhJiBjb21tb24pCiAg
ICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2ludCk7CisgICAgICAgIHJldHVy
biBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOwogICAgIH0KICAg
ICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpIHsgcmV0dXJuIHNldC0+aGFz
QmVlbkludmFsaWRhdGVkKCk7IH0KIH07CiAKIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7
Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBXYXRjaHBv
aW50Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBD
b21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gaW5mZXJyZWRWYWx1
ZS0+aGFzQmVlbkludmFsaWRhdGVkKCk7CkBAIC01NywxMiArNTgsMTggQEAgc3RydWN0IEluZmVy
cmVkVmFsdWVBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJW
aWV3KiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0Fy
cmF5QnVmZmVyVmlldyosIENvbW1vbkRhdGEmKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52
YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewotICAgICAgICBib29sIHJl
c3VsdCA9ICF2aWV3LT5sZW5ndGgoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiAhdmlldy0+bGVuZ3RoKCk7Cisg
ICAgfQorfTsKKworc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3Igewor
ICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYsIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVy
biAha2V5LmlzV2F0Y2hhYmxlKCk7CiAgICAgfQogfTsKIApAQCAtODcsNyArOTQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQotICAgICAgICAgICAgQWRhcHRvcjo6YWRk
KGNvZGVCbG9jaywgc2V0LCBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworICAg
ICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24pOwogICAgICAgICAK
ICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQpAQCAtMTIyLDYgKzEyOSwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSopOwogICAgIHZvaWQg
YWRkTGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAgCisgICAgLy8gSXQncyByZWNvbW1l
bmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZQorICAgIC8vIEdyYXBo
OjphZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQsIHdoaWNoIGRvZXMgdGhlIHJlcXVpcmVk
IEdDIG1hZ2ljIGFzIHdlbGwuCisgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mKTsKKyAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAg
IAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEmKTsKQEAgLTE0NCwx
MiArMTU1LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdz
LmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FkYXB0aXZl
U3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAg
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNldCo+IG1fc2V0czsKICAgICBH
ZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElubGluZVdhdGNocG9pbnRTZXQqPiBtX2lubGluZVNl
dHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJy
ZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFw
dG9yPiBtX2J1ZmZlclZpZXdzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0
UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdl
YWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUwLDcgKzUwLDE0IEBAIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6fkRlc2lyZWRXZWFrUmVmZXIK
IAogdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU0NlbGwqIGNlbGwpCiB7
Ci0gICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKKyAgICBpZiAoY2VsbCkKKyAgICAgICAgbV9y
ZWZlcmVuY2VzLmFkZChjZWxsKTsKK30KKwordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFk
ZExhemlseShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAg
ICAgYWRkTGF6aWx5KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAogYm9vbCBEZXNpcmVkV2Vha1JlZmVy
ZW5jZXM6OmNvbnRhaW5zKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkocmV2aXNpb24gMTg3
MjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5j
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB+RGVz
aXJlZFdlYWtSZWZlcmVuY2VzKCk7CiAKICAgICB2b2lkIGFkZExhemlseShKU0NlbGwqKTsKKyAg
ICB2b2lkIGFkZExhemlseShKU1ZhbHVlKTsKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwog
ICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgs
NiArODQ4LDIxIEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVGbGEKICAg
ICB9CiB9CiAKK2Jvb2wgR3JhcGg6OndhdGNoQ29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNXYXRjaGFibGUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHko
a2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5Lmhhc1Byb3RvdHlwZSgpKQorICAgICAgICBtX3Bs
YW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5wcm90b3R5cGUoKSk7CisgICAgaWYgKGtl
eS5oYXNSZXF1aXJlZFZhbHVlKCkpCisgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRM
YXppbHkoa2V5LnJlcXVpcmVkVmFsdWUoKSk7CisgICAgCisgICAgbV9wbGFuLndhdGNocG9pbnRz
LmFkZExhemlseShrZXkpOworICAgIHJldHVybiB0cnVlOworfQorCiBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg3MjQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NjUsNiArNjY1LDkgQEAgcHVibGljOgogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmll
cnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KICAgICBEZXNpcmVkV2F0Y2hwb2lu
dHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAgCisg
ICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW52YWxpZC4KKyAgICBi
b29sIHdhdGNoQ29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAg
CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayopOwogICAg
IEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoiKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4
dChjb25zdGFudCgpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6
CisgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IExvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCksICJAIiwgcG9p
bnRlckR1bXBJbkNvbnRleHQocHJvdG90eXBlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KK30KKwordm9pZCBHZXRCeU9mZnNldE1ldGhvZDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKwordm9p
ZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1f
c2V0LCBjb250ZXh0KSwgIjoiLCBpbkNvbnRleHQobV9tZXRob2QsIGNvbnRleHQpKTsKK30KKwor
dm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZH
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgR2V0QnlPZmZzZXRNZXRo
b2Q6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5T2Zm
c2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAg
b3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KCJMb2FkRnJvbVBy
b3RvdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YV9oCisjZGVmaW5lIERGR011
bHRpR2V0QnlPZmZzZXREYXRhX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
RHVtcENvbnRleHQuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIEtpbmQgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBDb25zdGFudCwKKyAgICAg
ICAgTG9hZCwKKyAgICAgICAgTG9hZEZyb21Qcm90b3R5cGUKKyAgICB9OworICAgIAorICAgIEdl
dEJ5T2Zmc2V0TWV0aG9kKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFudChGcm96ZW5WYWx1
ZSogdmFsdWUpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3RhbnQg
PSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
TG9hZDsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBs
b2FkRnJvbVByb3RvdHlwZShGcm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBMb2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUubG9h
ZC5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0g
b2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkOyB9CisgICAgCisgICAg
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgRnJvemVuVmFs
dWUqIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29u
c3RhbnQpOworICAgICAgICByZXR1cm4gdS5jb25zdGFudDsKKyAgICB9CisgICAgCisgICAgRnJv
emVuVmFsdWUqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5wcm90b3R5cGU7
CisgICAgfQorICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWQgfHwga2luZCgpID09IExvYWRGcm9tUHJvdG90
eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHVuaW9u
IHsKKyAgICAgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50OworICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldDsKKyAgICAgICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1fa2luZDsK
K307CisKK2NsYXNzIE11bHRpR2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0aUdldEJ5T2Zmc2V0
Q2FzZShjb25zdCBTdHJ1dHVyZVNldCYgc2V0LCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0
aG9kKQorICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIHNldCgpIHsgcmV0dXJuIG1fc2V0
OyB9CisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQoKSBjb25zdCB7IHJldHVybiBtX3NldDsg
fQorICAgIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2QoKSBjb25zdCB7IHJldHVybiBt
X21ldGhvZDsgfQorICAgIAorICAgIHZvaWQgZHVtcElub250ZXh0KFByaW50U3RyZWFtJiwgRHVt
cENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBTdHJ1Y3R1cmVTZXQgbV9zZXQ7CisgICAgR2V0QnlPZmZzZXRNZXRob2Qg
bV9tZXRob2Q7Cit9OworCitzdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgeworICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXI7CisgICAgVmVjdG9yPEdldEJ5T2Zmc2V0TWV0aG9kLCAyPiBj
YXNlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpHZXRCeU9mZnNl
dE1ldGhvZDo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODcyNDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0Vwb2NoLmgiCiAj
aW5jbHVkZSAiREZHTGF6eUpTVmFsdWUuaCIKKyNpbmNsdWRlICJERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oIgogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVPcmln
aW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgpAQCAtNjUsMTEgKzY2LDYgQEAgc3RydWN0
IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwogfTsK
IAotc3RydWN0IE11bHRpR2V0QnlPZmZzZXREYXRhIHsKLSAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyOwotICAgIFZlY3RvcjxHZXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7Ci19OwotCiBz
dHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXI7CiAgICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODcy
NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiwxMSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJh
Y3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRl
clNldHRlckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgbmVlZHMgdG8gYWxzbyBjaGVjayB0aGUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25z
IHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuCisgICAgICAgIC8vIElmIHdlIGhhdmUgb25lIHRo
YXQgZ3VhcmFudGVlcyB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBwcm9wZXJ0eSwgdGhlbiB0aGlzIGlz
IGFsd2F5cyBzYWZlCisgICAgICAgIC8vIHRvIGV4ZWN1dGUuCisgICAgICAgIEZJWE1FOworICAg
ICAgICAKICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAgaWYgKHZhbHVlLmlzVG9w
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0
aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93
UGF0aEZ1bmN0aW9uLAogICAgIGJvb2wgY29tcGFjdCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT50
eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChz
dHJ1Y3R1cmUtPm5lZWRzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAgICAgICAgIHZtLnJl
Z2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8u
YWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0NyArMTMyLDMwIEBAIHN0YXRpYyB2b2lkIHJl
cGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1
cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAot
ICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24oCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAg
ICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNh
c2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9
PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2Jq
ZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgICAg
ICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAg
ICBqaXQsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAgICAgICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2ludCk7Ci0gICAg
ICAgICAgICBvay5saW5rKCZqaXQpOwotICAgICAgICB9CisgICAgaWYgKGNvbmRpdGlvbi5pc1dh
dGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgY29u
ZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3Qp
LCBzY3JhdGNoR1BSKTsKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBicmFuY2hT
dHJ1Y3R1cmUoaml0LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSkpOworICAgICAgICBicmFu
Y2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICBqaXQsIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3Nl
bWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJl
ZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAgICBh
ZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwg
cHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0
LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworc3RhdGljIHZvaWQgY2hlY2tP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIHNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBzZXQpIHsKKyAgICAgICAgY2hlY2tPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICAgICAgICAgIGNvbmRpdGlvbiwgY29kZUJsb2NrLCBz
dHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIH0KIH0KIAogc3Rh
dGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRh
cmdldCkKQEAgLTI5NiwxMSArMjc5LDEyIEBAIHN0YXRpYyBGdW5jdGlvblB0ciBjdXN0b21Gb3Io
Y29uc3QgUHV0UHIKIAogc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LAorICAgIEZ1bmN0aW9uUHRyIGN1
c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwgV2F0Y2hwb2ludFNl
dCogd2F0Y2hwb2ludFNldCwKICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0
dWJSb3V0aW5lKQogewotCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJl
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKKyAgICAKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
ID0gSlNWYWx1ZVJlZ3MoCkBAIC0zNDYsMzMgKzMzMCwyNSBAQCBzdGF0aWMgYm9vbCBnZW5lcmF0
ZUJ5SWRTdHViKAogICAgIH0KIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0
eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSkKICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHBy
b3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAogICAgIGlm
ICh3YXRjaHBvaW50U2V0KQogICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRk
V2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsgCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBpZiAoY2hh
aW4pIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQo
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsK
LSAgICAgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90
eXBlRm9yTG9va3VwKGV4ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1
cmUgPSBwcm90b09iamVjdC0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0g
ICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHBy
b3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAg
ICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBwcm90b09i
amVjdCwgcHJvdG9TdHJ1Y3R1cmUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAg
ICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGN1cnJT
dHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKCFwcm90b09i
amVjdCB8fCBwcm90b09iamVjdC0+c3RydWN0dXJlKCkgPT0gY3VyclN0cnVjdHVyZSk7Ci0gICAg
fQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICBjb25kaXRpb25T
ZXQsIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsK
ICAgICAKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgaWYgKGNvbmRpdGlvblNl
dC5pc0VtcHR5KCkpCisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgZWxz
ZQorICAgICAgICBjdXJyU3RydWN0dXJlID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9u
KCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOwogICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIG9mZnNldCk7CisgICAgCiAgICAgR1BSUmVn
IGJhc2VGb3JBY2Nlc3NHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIGlmIChraW5kICE9IEdldFVu
ZGVmaW5lZCkgewotICAgICAgICBpZiAoY2hhaW4pIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGNsb2JiZXJlZCBz
Y3JhdGNoR1BSIGVhcmxpZXIsIHNvIHdlIGhhdmUgdG8gcmVsb2FkIGZyb20gYmFzZUdQUiB0byBn
ZXQgdGhlIHRhcmdldC4KICAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQogICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIGJhc2VGb3JHZXRHUFIpOwpAQCAtNjI3LDkg
KzYwMyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFYKICAgICAg
ICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKICAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9Ci0gICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAgIGlmICh0eXBlSW5mby5oYXNJbXB1
cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJl
c1dhdGNocG9pbnRzKCkpCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICByZXR1cm4g
QXR0ZW1wdFRvQ2FjaGU7CkBAIC04MjcsMjEgKzgwMiwyMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsK
LSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgIHNpemVfdCBjb3Vu
dCA9IDA7CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
OwogICAgIAogICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFz
ZVZhbHVlKSB7CiAgICAgICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmco
KSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAKICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgY291
bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKGV4ZWMs
IHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY291
bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKAotICAgICAgICAgICAg
ICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAg
ICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KGV4
ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgCisgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNl
dC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwogICAgIH0KICAgICAKICAgICBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShzdHVi
SW5mbyk7CkBAIC04NTIsNyArODI4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1
aWxkR2V0QnlJRAogICAgIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7
CiAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICBleGVjLCBraW5k
Rm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hh
aW4sIGNvdW50LCBvZmZzZXQsIAorICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwg
Y3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBvZmZzZXQsIAogICAgICAg
ICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAK
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlz
dC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKQEAgLTg3
MSw3ICs4NDcsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAg
ICAgCiAgICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgICp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVj
dHVyZSwKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4sIGNvdW50KSk7CisgICAgICAgIGNvbmRpdGlv
blNldCkpOwogICAgIAogICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHVi
SW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwogICAgIApAQCAtOTkzLDI2ICs5NjksMjggQEAgc3Rh
dGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoRXhl
Y1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgYm9vbCBlbWl0UHV0
VHJhbnNpdGlvblN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSom
IHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAorICAgIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtp
bmQsCisgICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KQogewogICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7Ci0g
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgb2xkU3RydWN0dXJl
ID0gc3RydWN0dXJlOwogICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQcm9wZXJ0eU9mZnNl
dCBwcm9wZXJ0eU9mZnNldDsKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBp
ZGVudC5pbXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsKIAogICAgIGlmICghc3RydWN0dXJlIHx8
ICFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCAh
c3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTa2lwIG9wdGltaXpp
bmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKICAg
ICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgogICAgIGlmIChHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQogICAgICAgICAm
JiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBTa2lwIG9wdGlt
aXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBo
YXMKQEAgLTEwMjAsMTQgKzk5OCwxMyBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNp
dGlvblN0dWJBCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVu
dCBpdCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMw
OTE0CiAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4o
ZXhlYywgc3RydWN0dXJlKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Ly8gZW1pdFB1dFRyYW5zaXRpb25TdHViCisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7
CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzcyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAK
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNl
KTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0
dWJSb3V0aW5lOwpAQCAtMTA4MywxNyArMTA2MCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG9sZFN0cnVjdHVyZSkp
OwogICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgb2xkU3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBz
dHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAg
IAotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3IgKFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkg
ewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEpOwot
ICAgICAgICB9Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAg
ICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwg
ZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAgICAgCkBAIC0xMjI4LDcgKzExOTYsNyBAQCBzdGF0aWMgU3RydWN0dXJl
KiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRS
ZXVzZVJlZ2lzdGVycygpKQpAQCAtMTI1Niw4ICsxMjI0LDggQEAgc3RhdGljIFN0cnVjdHVyZSog
ZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93
bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAgICAgICAgIHN0
cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gb2xkU3RydWN0dXJlOworICAgIAorICAgIHJldHVybiB0
cnVlOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTEyODEsMTIgKzEyNDks
MTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgIGlmIChz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAgICAg
ICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAK
LSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25T
dHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCk7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkKKyAgICAg
ICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICghZW1pdFB1dFRy
YW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywg
cHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVD
aGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwot
ICAgICAgICAgICAgCiAgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29k
ZUJsb2NrKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAogICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCkBAIC0xMjk0LDcg
KzEyNjEsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAg
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSW5m
by5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGly
ZWN0KTsKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQpAQCAtMTMxMiwyMCArMTI3OSwyMiBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICYmIHN0
dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAgICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKIAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJv
dG90eXBlQ2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNh
Y2hlZE9mZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFz
ZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVBy
b3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwg
aWRlbnQsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlw
ZUNoYWluKQorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3QuYmFzZSgp
ICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgZXhlYywgc3Ry
dWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFp
bihleGVjKTsKLSAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
b2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJv
bShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5
SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZv
cihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4
ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25k
aXRpb25TZXQsCiAgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIs
CiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9T
bG93Q2FzZSksCkBAIC0xMzM2LDcgKzEzMDUsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpz
ZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAg
ICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0
ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUs
IHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUp
KTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRl
cigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVt
cCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBAIC0x
MzgwLDE3ICsxMzQ5LDE2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5
SWQKICAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUgdG8gcmVjdXJzaW9uLgogCi0g
ICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9uU3R1
YkFuZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLQotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUp
IAorICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIWVt
aXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgICAgIFN0cnVjdHVy
ZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7
CiAgICAgICAgICAgICBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAg
ICAgICAgbGlzdC0+YWRkQWNjZXNzKAogICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRy
YW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZUNoYWluLAorICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LAogICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkpOwogCiAg
ICAgICAgIH0gZWxzZSB7CkBAIC0xNDIzLDIxICsxMzkxLDI0IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCiAgICAgICAgICYmIHN0dWJJbmZvLnBhdGNo
LnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZTsKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0g
MDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsK
LSAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZSAhPSBzbG90
LmJhc2UoKSkgewotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZv
ckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFtZSwg
b2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4p
CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3QuYmFz
ZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAg
ICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAg
ICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgcHJvcGVydHlOYW1l
LmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVD
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7CiAgICAgICAgIAogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAg
ICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5m
byk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAg
ICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0
dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9y
KHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlv
blNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAg
ICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCkBAIC0xNDQ4LDcgKzE0MTksNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxpc3QtPmFk
ZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVy
KCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIs
Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0
b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7CkBAIC0xNDg3LDExICsxNDU4LDE1IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKLSAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90QmFzZSA9
IHdhc0ZvdW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVfdCBjb3Vu
dCA9ICFmb3VuZFNsb3RCYXNlIHx8IGZvdW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAgICAgICBu
b3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgZm91
bmRTbG90QmFzZSwgaWRlbnQsIG9mZnNldElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291bnQgPT0g
SW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKKyAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Quc2xvdEJh
c2UoKSAhPSBiYXNlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICBleGVjLCBzdHJ1
Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZQorICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eU1pc3MoZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7
CkBAIC0xNTE2LDcgKzE0OTEsNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRj
aEluKAogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgfQogICAgIAotICAg
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7
CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAKICAgICB7CkBA
IC0xNTQ3LDE4ICsxNTIxLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJ
bigKICAgICAgICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgpKQogICAgICAgICAgICAgc2xvdC53
YXRjaHBvaW50U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwog
Ci0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIEpT
T2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JM
b29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHBy
b3RvdHlwZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b1N0cnVjdHVyZSwgZXhlYy0+
Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAg
ICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHViSW5m
by5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9
IGl0LT5nZXQoKTsKLSAgICAgICAgfQorICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0
aW9ucygKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2soKSwgc3R1Yklu
Zm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAgICAgIAogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaCIKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgotI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hh
aW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCi0g
ICAgLCBtX3Byb3RvdHlwZShwcm90b3R5cGUpCi17Ci0gICAgQVNTRVJUKG1fcHJvdG90eXBlLmlz
TnVsbCgpIHx8IG1fcHJvdG90eXBlLmlzT2JqZWN0KCkpOwotICAgIGlmIChwcm90b3R5cGUuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGFz
T2JqZWN0KHByb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVu
dC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCi0gICAgICAgIG1fdmVjdG9yLmFwcGVuZChj
dXJyZW50KTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWQpCi0gICAg
OiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5w
cm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGlmIChtX3Byb3RvdHlw
ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50
ID0gYXNPYmplY3QobV9wcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKTsgY3VycmVudDsgY3VycmVudCA9
IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpKQotICAgICAgICBtX3ZlY3Rvci5h
cHBlbmQoY3VycmVudCk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0
dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9v
a3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBtX3ZlY3Rvci5hcHBlbmQocHJvdG90eXBlU3Ry
dWN0dXJlKTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4pCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2Jq
ZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBjaGFpbi0+aGVhZCgpW2ldOyArK2kp
Ci0gICAgICAgIG1fdmVjdG9yLmFwcGVuZChjaGFpbi0+aGVhZCgpW2ldLmdldCgpKTsKLX0KLQot
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2ln
bmVkIGNvdW50KQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9i
amVjdCkpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgIG1fdmVjdG9yLmFwcGVuZChjaGFpbi0+aGVhZCgpW2ldLmdldCgpKTsKLX0KLQotSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6fkludGVuZGVkU3RydWN0dXJlQ2hhaW4oKQotewotfQotCi1ib29s
IEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmlzU3RpbGxWYWxpZCgpIGNvbnN0Ci17Ci0gICAgSlNW
YWx1ZSBjdXJyZW50UHJvdG90eXBlID0gbV9wcm90b3R5cGU7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhc09iamVjdChj
dXJyZW50UHJvdG90eXBlKS0+c3RydWN0dXJlKCkgIT0gbV92ZWN0b3JbaV0pCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1cnJlbnRQcm90b3R5cGUgPSBtX3ZlY3RvcltpXS0+
c3RvcmVkUHJvdG90eXBlKCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW46Om1hdGNoZXMoU3RydWN0dXJlQ2hhaW4qIGNoYWluKSBjb25z
dAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAobV92ZWN0b3JbaV0gIT0gY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGNoYWluLT5oZWFkKClbbV92
ZWN0b3Iuc2l6ZSgpXSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om1heUludGVyY2VwdFN0b3JlVG8oVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbV92ZWN0b3JbaV0tPmdldENvbmN1cnJlbnRseSh1
aWQsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFkT25seSB8
IEFjY2Vzc29yKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjppc05vcm1hbGl6ZWQoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
dmVjdG9yW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQ
cm9wZXJ0eSgpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoYXQoaSktPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1KU09iamVjdCogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGVybWluYWxQcm90b3R5cGUoKSBj
b25zdAotewotICAgIEFTU0VSVCghbV92ZWN0b3IuaXNFbXB0eSgpKTsKLSAgICBpZiAobV92ZWN0
b3Iuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBhc09iamVjdChtX3Byb3RvdHlwZSk7Ci0g
ICAgcmV0dXJuIGFzT2JqZWN0KG1fdmVjdG9yW21fdmVjdG9yLnNpemUoKSAtIDJdLT5zdG9yZWRQ
cm90b3R5cGUoKSk7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6b3BlcmF0b3I9
PShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9nbG9iYWxPYmplY3QgPT0gb3RoZXIubV9nbG9iYWxPYmplY3QKLSAgICAgICAgJiYgbV9w
cm90b3R5cGUgPT0gb3RoZXIubV9wcm90b3R5cGUKLSAgICAgICAgJiYgbV92ZWN0b3IgPT0gb3Ro
ZXIubV92ZWN0b3I7Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6Z2F0aGVyQ2hl
Y2tzKENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikgY29uc3QKLXsKLSAgICBK
U1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3RvdHlwZTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRPYmpl
Y3QgPSBhc09iamVjdChjdXJyZW50UHJvdG90eXBlKTsKLSAgICAgICAgU3RydWN0dXJlKiBjdXJy
ZW50U3RydWN0dXJlID0gYXQoaSk7Ci0gICAgICAgIHZlY3Rvci5hcHBlbmQoQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVjayhjdXJyZW50T2JqZWN0LCBjdXJyZW50U3RydWN0dXJlKSk7Ci0gICAgICAgIGN1
cnJlbnRQcm90b3R5cGUgPSBjdXJyZW50U3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAobV9n
bG9iYWxPYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWRQb2ludGVyKCZtX2dsb2JhbE9iamVjdCk7Ci0gICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZFZhbHVlKCZtX3Byb3RvdHlwZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV92
ZWN0b3Iuc2l6ZSgpOyBpLS07KQotICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9p
bnRlcigmbV92ZWN0b3JbaV0pOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7
Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQo
Ci0gICAgICAgICIoZ2xvYmFsID0gIiwgUmF3UG9pbnRlcihtX2dsb2JhbE9iamVjdCksICIsIGhl
YWQgPSAiLAotICAgICAgICBpbkNvbnRleHQobV9wcm90b3R5cGUsIGNvbnRleHQpLCAiLCB2ZWN0
b3IgPSBbIik7Ci0gICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBw
b2ludGVyRHVtcEluQ29udGV4dChtX3ZlY3RvcltpXSwgY29udGV4dCkpOwotICAgIG91dC5wcmlu
dCgiXSkiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHJl
dmlzaW9uIDE4NzI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCi0jZGVmaW5lIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faAot
Ci0jaW5jbHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIFN0cnVjdHVyZUNo
YWluOwotY2xhc3MgVk07Ci1zdHJ1Y3QgRHVtcENvbnRleHQ7Ci0KLWNsYXNzIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiB7
Ci1wdWJsaWM6Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqKTsKLSAgICBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0
cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbik7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNvdW50KTsK
LSAgICB+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpOwotICAgIAotICAgIGJvb2wgaXNTdGlsbFZh
bGlkKCkgY29uc3Q7Ci0gICAgYm9vbCBtYXRjaGVzKFN0cnVjdHVyZUNoYWluKikgY29uc3Q7Ci0g
ICAgYm9vbCBtYXlJbnRlcmNlcHRTdG9yZVRvKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotICAg
IGJvb2wgaXNOb3JtYWxpemVkKCk7Ci0gICAgCi0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoSW5ERkdG
b3JJbXB1cmVQcm9wZXJ0eSgpOwotICAgIAotICAgIEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm90b3R5cGU7IH0KLSAgICAKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQotICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3ZlY3RvcltpbmRleF07IH0KLSAgICBTdHJ1Y3R1cmUqIG9wZXJh
dG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAKLSAg
ICBKU09iamVjdCogdGVybWluYWxQcm90b3R5cGUoKSBjb25zdDsKLSAgICAKLSAgICBTdHJ1Y3R1
cmUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5sYXN0KCk7IH0KLSAgICAKLSAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYpIGNvbnN0OwotICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluJiBvdGhlcikgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBnYXRoZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYpIGNv
bnN0OwotICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIEpTR2xv
YmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKLSAgICBKU1ZhbHVlIG1fcHJvdG90eXBlOwotICAg
IFZlY3RvcjxTdHJ1Y3R1cmUqPiBtX3ZlY3RvcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0jZW5kaWYgLy8gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg3MjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
NCw3ICsxOTQsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyBy
ZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KICAgICBib29s
IGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQo
KSA9PSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wgcHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWRE
aWN0aW9uYXJ5S2luZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKTsg
fQorICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kCisgICAg
ICAgICAgICAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAg
ICAgICAgJiYgISh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlw
ZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpOworICAgIH0KKyAgICAK
KyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQorICAgICAgICAgICAgJiYgdHlw
ZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAgICAgICAgICYmIHR5cGVJ
bmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpOworICAgIH0KIAogICAgIC8v
IFdlIHVzZSBTbG93UGF0aCBpbiBHZXRCeUlkU3RhdHVzIGZvciBzdHJ1Y3R1cmVzIHRoYXQgbWF5
IGdldCBuZXcgaW1wdXJlIHByb3BlcnRpZXMgbGF0ZXIgdG8gcHJldmVudAogICAgIC8vIERGRyBm
cm9tIGlubGluaW5nIHByb3BlcnR5IGFjY2Vzc2VzIHNpbmNlIHN0cnVjdHVyZXMgZG9uJ3QgdHJh
bnNpdGlvbiB3aGVuIGEgbmV3IGltcHVyZSBwcm9wZXJ0eSBhcHBlYXJzLgpAQCAtMjAyLDcgKzIx
NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlSW5mbygpLmhhc0ltcHVy
ZUdldE93blByb3BlcnR5U2xvdCgpOwogICAgIH0KLQorICAgIAogICAgIC8vIFR5cGUgYWNjZXNz
b3JzLgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCkt
PmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxp
bmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJ
bmZvKCkuaXNPYmplY3QoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAxODcyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MzgsNiArNTM4LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJXYXRjaHBv
aW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYsIFdhdGNocG9pbnQqKTsKKyAg
ICAKICAgICAvLyBGSVhNRTogVXNlIEF0b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0
aCBJZGVudGlmaWVyLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVy
dHkoY29uc3QgU3RyaW5nJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257472</attachid>
            <date>2015-07-24 13:13:38 -0700</date>
            <delta_ts>2015-07-24 15:16:11 -0700</delta_ts>
            <desc>starting to look like a complete picture</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>228674</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODczNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01ODgsNiArNTkwLDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2
MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIy
MTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNG
RjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmNwcCAqLzsgfTsKKwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuY3BwICovOyB9OworCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9w
ZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJG
MDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5NCw2ICs3MDQsOCBA
QAogCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5
NkIgLyogREZHRWRnZS5jcHAgKi87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmNwcCAqLzsgfTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjRCNTIyMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBG
RjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZG
IC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4
RUJENTgwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8q
IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlG
RiAvKiB1ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICov
OyB9OwpAQCAtMTM4OSw4ICsxNDAxLDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8q
IFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NC
QzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMx
OEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8q
IFNwaWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cCAqLzsgfTsKLQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFs
aXplci5oICovOyB9OwogCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5
NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg1Myw2
ICsxODYzLDggQEAKIAkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0Qg
LyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFC
NDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdN
aW5pZmllZEdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Qx
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBk
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVG
MCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
SmV0dGlzb25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkx
OEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM0
NCw2ICsyMzU2LDE0IEBACiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFM0ZGMUI2MThB
QUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZn
L0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQzRTQwNDFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9w
ZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2
QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdC
YXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFD
RjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21p
bmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NDUsNiArMjQ2NSw4IEBACiAJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9
IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0Rjgx
QUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDVBMUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBwYXRoID0gZGZn
L0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzMwMTU4
RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fz
c2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfZGVjb2RlLmM7IHBhdGggPSBkaXNhc3Nl
bWJsZXIvdWRpczg2L3VkaXM4Nl9kZWNvZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMxNTUsOCArMzE3Nyw2IEBACiAJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQ
YXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4
NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZDMTc5NzM4QjgwMDlERjc0NCAvKiBERkdG
YWlsZWRGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRmFpbGVkRmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RDE3OTczOEI4MDA5REY3NDQg
LyogREZHRmFpbGVkRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ZhaWxlZEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RTE3OTczOEI4MDA5REY3NDQgLyog
REZHRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0ZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0ODMsOCArNDUwMyw2IEBACiAJCQkJQTdBOEFGMkIxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLywKLQkJCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCi0JCQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUg
LyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAwODA2NkRE
IC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMTJCQkZGMzFCMDQ0QTk4MDA2NjRCNjkg
LyogSW50bE9iamVjdC5jcHAgKi8sCkBAIC00ODY3LDYgKzQ4ODUsMTAgQEAKIAkJCQlBNzA0RDhG
RjE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCAqLywK
IAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8s
CiAJCQkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLywK
KwkJCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8sCisJCQkJ
MEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAgKi8sCisJCQkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggKi8sCiAJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0FsbG9jYXRvci5oICovLAogCQkJCUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFs
eXNpcy5oICovLApAQCAtNTAyNiw2ICs1MDQ4LDggQEAKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCiAJCQkJMEY4RjE0MzExQURGMDkwMTAwRUQ3
OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwICovLAogCQkJCTBGOEYxNDMyMUFERjA5
MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCisJCQkJMEZGMkNENTkx
QjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKKwkJCQkw
RkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywK
IAkJCQkwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCAq
LywKIAkJCQkwRkMzQ0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmgg
Ki8sCiAJCQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8sCkBAIC01MzMxLDYgKzUzNTUsMTAgQEAKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0ExNEY1
QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkx
NENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLywK
KwkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwICovLAorCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oICovLAorCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCisJCQkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8sCiAJCQkJOTY5QTA3OTQwRUQxRDNBRTAw
RjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8q
IE9wY29kZS5oICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5o
ICovLApAQCAtNTM0Miw2ICs1MzcwLDggQEAKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0
MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUzN0Yw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKKwkJCQkwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLAorCQkJCTBGRDNFNDA4MUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGOTMzMjk5MTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCkBAIC01ODQxLDYgKzU4NzEsNyBAQAogCQkJ
CUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRDQjlGRiAvKiBERkdEaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBF
MUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUz
NENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
LApAQCAtNjA5Myw2ICs2MTI0LDcgQEAKIAkJCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyog
Q29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4ODE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRj
aGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERG
R011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0
NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjEwMiw3ICs2MTM0LDYgQEAKIAkJCQlBN0E4
QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAotCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJu
YWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5
IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAx
MTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMTUsNiArNjE0Niw3IEBA
CiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjQxMSw5ICs2NDQzLDExIEBACiAJCQkJMkFBRDk2
NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0Nh
bGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyog
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThC
NDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0Iy
MjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIx
QjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1h
dGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcw
ODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NDkwLDYgKzY1MjQsNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEg
LyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFD
MTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Bo
aUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYg
LyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MjgxLDYgKzczMTYsNyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlD
b25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJB
IC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1
MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3
ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTcyOTEsNiArNzMyNyw3IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZU
TExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3
RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZG
MkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3
MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNDEsNiArNzM3OCw3IEBA
CiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2Vu
dFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM1MSw3ICs3Mzg5LDYgQEAKIAkJ
CQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAw
QkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNG
OTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJw
cmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8q
IEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNjgsNiArNzQwNSw3
IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82
NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nl
c3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjE1LDYgKzc2NTMs
NyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWlu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwQjFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzAxM0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4RiAv
KiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MjQsNiArNzY2Myw3
IEBACiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRl
bXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE4RDNDRjFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJh
dG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ6OmZpcgogICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAKICAgICBtX2NvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgcmVtb3ZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBs
ZXhHZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKICAgICAvLyBo
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0CkBAIC00
MCwzMiArNDAsMjYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdQog
ICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
OworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAogICAg
IENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJbmxpbmVhYmxl
OwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAgIHJlc3VsdC5t
X2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3VudCkpOworICAg
IGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJlc3VsdC5tX2No
YWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25kaXRpb25TZXQu
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4gc2tpcCgpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWluLT50YWtlc1Ns
b3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRha2Vz
U2xvd1BhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0g
cmVzdWx0Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSog
Y3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAgICAgIAotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOworICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0
eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmli
dXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7Ci0gICAgfQor
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAg
ICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3MzQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKICNkZWZp
bmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3RhdHVzKCkKICAg
ICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zm
c2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAgICAgfQogICAg
IApAQCAtOTcsMjEgKzk2LDE3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIENv
bXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAg
ICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KLSAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmlj
VmFsdWU7IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFpbi5nZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAog
cHJpdmF0ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
LSAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7
Ci0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYs
OCArMjA2LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJ
ZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVj
dHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4o
KSwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVz
Lm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlv
blNldCgpLCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAg
ICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQp
Ci0gICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNv
bmRpdGlvblNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0
dXMoV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlm
IChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNo
YWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1f
Y29uc3RhbnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRC
eUlkVmFyaWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBA
IEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50
JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikK
IHsKICAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29u
c3RhbnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFz
ZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1f
Y29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1h
a2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03
MiwxNiArNjcsNiBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZhcmlhbnQ6OmJhc2VT
dHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KIGJvb2wg
R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhl
cikKIHsKICAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZSkK
QEAgLTkwLDEwICs3NSwxMyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFh
cmVDb21wYXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldCA9
CisgICAgICAgIG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQp
OworICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2Nv
bnN0YW50Q2hlY2tzKTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTIsOCArMTAwLDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
IlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsK
KyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBpZiAobV9hbHRlcm5hdGVC
YXNlKQogICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChK
U1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3
ICs0Myw3IEBAIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFy
aWFudCgKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1
cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKLSAgICAgICAg
Y29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBudWxscHRyLAorICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzID0gbnVsbHB0cik7CiAgICAgCiAgICAgfkdldEJ5SWRWYXJpYW50KCk7CkBAIC01NSw5
ICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
aXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9Ci0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdCB7IHJldHVybiBt
X2FsdGVybmF0ZUJhc2U7IH0KLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0
OworCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIGEgY29uZGl0aW9uIHNldCBtZWFucyB0aGF0IHRo
aXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAg
ICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICAKQEAgLTcwLDggKzcxLDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgR2V0QnlJZFN0YXR1czsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQg
bV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0
YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9v
ZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3Rh
dHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQu
cHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91
dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZShtX29iamVjdCksIGNvbnRleHQpLCAiOiAiLCBpbkNv
bnRleHQobV9jb25kaXRpb24sIGNvbnRleHQpKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisg
ICAgU3RydXR1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24u
aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydXRjdXJlRW5zdXJlc1ZhbGlk
aXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3Qt
PnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRp
dHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QK
K3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0
cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZh
bGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlv
bi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBtX29iamVjdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQobV9v
YmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKTsKK30KKworYm9v
bCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhaWRpdHkoKSBjb25z
dAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5
Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBQcm9wZXJ0
eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgp
LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJs
ZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJp
bGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0
Y2hhYmxlKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBl
ZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9y
dCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKCFIZWFwOjppc01hcmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZl
cmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52
YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3Bl
cnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAg
ICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAg
ICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9v
YmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdp
dGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
eworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVy
dHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0
ZXMpOyAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNl
V2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJh
cnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAg
cmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2UodWlkLCBwcm90
b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVj
dCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIp
OworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90
b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29i
amVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25k
aXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCog
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOwor
ICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQs
IHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3Qg
PSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9u
OjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
ZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxl
bmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisg
ICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJv
cGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0K
KyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0
IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5z
aWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJp
YnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25k
aXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9v
bCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWly
ZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkg
KyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29u
ZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmpl
Y3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAg
CisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRp
Y2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJl
bnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cg
dG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
IGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwg
d2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBj
YXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAg
Ly8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2Vu
Y2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50
aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4K
KyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1
aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9
CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9u
YWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1
Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwg
dGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0
IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9y
IHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9p
ZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0
cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZh
bGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0
LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3Jk
aW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKworICAgIC8v
IENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkgY29uc2VydmF0aXZlbHkg
cmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0cnVjdHVyZSBhbG9uZSBk
b24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiB0
cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJlcyBzb21lIHdhdGNocG9p
bnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhlCisgICAgLy8gc3Ry
dWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9uIGhvbGRzIGJ5IHVz
aW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVjdHVyZUVuc3VyZXNWYWxp
ZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJv
b2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hvcnRoYW5kIGZvciBjb25k
aXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29sIHN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxs
IHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0
aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBp
bXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFBy
b3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6
TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmls
aXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9y
Y2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJl
KiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxl
KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVy
dHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hp
bmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVyaWVzU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24o
KS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBz
dGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBt
X2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2lu
ZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhp
cykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAg
IG51bUZvdW5kKys7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91
bmQgPT0gMSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6YXJlQ29tcGF0aWJsZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGEgOiAqdGhpcykgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBiIDogb3RoZXIpIHsKKyAgICAgICAgICAgIGlmICghYS5pc0NvbXBhdGlibGVX
aXRoKGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFv
dGhlci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHko
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3Ro
ZXIpIHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3Rp
bmdDb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXND
b21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub25FbXB0eShyZXN1bHQpOworfQorCitib29s
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBj
b25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRo
aXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAo
IWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlv
bi52YWxpZGl0eVJlcXVyaWVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExpdmUoKSBjb25zdAoreworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAg
ICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnBy
aW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgb3V0LnByaW50KGxpc3REdW1wSW5D
b250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCJdIik7Cit9
CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK25hbWVz
cGFjZSB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0aW9uKAorICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7CisgICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgIGlmIChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnBy
ZXNlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAg
fQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6IHsKKyAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKAorICAgICAgICAgICAgdm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkpOwor
ICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAg
ICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIoCisg
ICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5z
dG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbigpOworICAgIH0KK30KKworZW51bSBDb25jdXJyZW5jeSB7CisgICAgTWFpblRocmVhZCwK
KyAgICBDb25jdXJyZW50Cit9OworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVD
b25kaXRpb25zKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgSlNPYmplY3QqIHByb3RvdHlw
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCwK
KyAgICBDb25jdXJyZW5jeSBjb25jdXJyZW5jeSA9IE1haW5UaHJlYWQpCit7CisgICAgQVNTRVJU
KCEhcHJvdG90eXBlID09IChjb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNl
KSk7CisgICAgCisgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBjb25kaXRpb25z
OworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgp
KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KCk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2LmlzTnVs
bCgpKSB7CisgICAgICAgICAgICBpZiAoIXByb3RvdHlwZSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxp
ZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4odik7CisgICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJl
KHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3Rv
dHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQgbm90IGJlCisg
ICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IE1haW5U
aHJlYWQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIHRoaXNDb25kaXRpb25L
aW5kOworICAgICAgICBpZiAoa2luZCA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UgJiYg
b2JqZWN0ICE9IHByb3RvdHlwZSkKKyAgICAgICAgICAgIHRoaXNDb25kaXRpb25LaW5kID0gUHJv
cGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXND
b25kaXRpb25LaW5kID0ga2luZDsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIG5ld0NvbmRpdGlvbiA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwg
b3duZXIsIG9iamVjdCwgdWlkLCB0aGlzQ29uZGl0aW9uS2luZCk7CisgICAgICAgIGlmICghbmV3
Q29uZGl0aW9uIHx8ICFuZXdDb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6aW52YWxpZCgpOworICAgICAgICAKKyAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQo
bmV3Q29uZGl0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvYmplY3QgPT0gcHJvdG90eXBl
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8vIFZhbGlkYXRlIHRoZSBy
ZXN1bHQuCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgcHJlc2VuY2VDb3VudCA9IDA7CisgICAgICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlv
bnMpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICAg
ICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICAgICAgcHJl
c2VuY2VDb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChw
cmVzZW5jZUNvdW50ID09IDEpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDog
eworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiBjb25kaXRpb25zKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLmtpbmQo
KSA9PSBraW5kKTsKKyAgICB9IH0KKyAgICAKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlvbnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwKKyAgICAg
ICAgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6
QWJzZW5jZU9mU2V0dGVyKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUG90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVj
dCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJu
IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlwZSwgdWlkLAorICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisg
ICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRl
Q29uZGl0aW9ucygKKyAgICAgICAgdm0sIG51bGxwdHIsIGdsb2JhbE9iamVjdCwgaGVhZFN0cnVj
dHVyZSwgbnVsbHB0ciwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZWNlT2ZTZXR0ZXIsCisg
ICAgICAgIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKyNkZWZpbmUgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCIKKyNpbmNsZHVlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
QW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhl
IHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVlZCB0byBiZSBtZXQgZm9y
IHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2FuIGhhdmUgdGhlIGZvbGxv
d2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5OiBUaGVyZSBhcmUgbm8g
c3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisvLyBJbnZhbGlkOiBUaGUg
aGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6IFRoZXJlIGFyZSBzb21l
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdmFsaWQuCisKK2NsYXNz
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9yPE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICAqcmVzdWx0Lm1f
ZGF0YS0+dmVjdG9yID0gdmVjdG9yOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Rh
dGEgfHwgIW1fZGF0YS0+dmVjdG9yLmlzRW1wdHkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhOworICAgIH0KKyAg
ICAKKyAgICB0eXBlZGVmIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKiBpdGVyYXRvcjsK
KyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
ZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRh
LT52ZWN0b3IuYmVnaW4oKTsKKyAgICB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5lbmQoKTsKKyAgICB9CisgICAgCisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gZm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0OworICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvckNvbmRpdGlvbktpbmQoUHJvcGVydHlDb25kaXRp
b246OktpbmQpIGNvbnN0OworICAgIAorICAgIC8vIElmIHRoaXMgaXMgYSBjb25kaXRpb24gc2V0
IGZvciBhIHByb3RvdHlwZSBoaXQsIHRoZW4gdGhpcyBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB0
aGUKKyAgICAvLyBjb25kaXRpb24gb24gdGhlIHByb3RvdHlwZSBpdHNlbGYuIFRoaXMgYWxsb3dz
IHlvdSB0byBnZXQgdGhlIG9iamVjdCwgb2Zmc2V0LCBhbmQKKyAgICAvLyBhdHRyaWJ1dGVzIGZv
ciB0aGUgcHJvdG90eXBlLiBUaGlzIHdpbGwgUkVMRUFTRV9BU1NFUlQgdGhhdCB0aGVyZSBpcyBl
eGFjdGx5IG9uZSBQcmVzZW5jZQorICAgIC8vIGluIHRoZSBzZXQsIGFuZCBpdCB3aWxsIHJldHVy
biB0aGF0IHByZXNlbmNlLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNsb3RCYXNlQ29u
ZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbiBzZXRzIGFyZSBjb21w
YXRpYmxlIGlmIHRoZXkgYXJlIGJvdGggdmFsaWQgYW5kIGVhY2ggY29uZGl0aW9uIGluICp0aGlz
IGlzCisgICAgLy8gY29tcGF0aWJsZSB3aXRoIGVhY2ggY29uZGl0aW9uIGluIG90aGVyLgorICAg
IGJvb2wgYXJlQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IG90aGVyKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhIG5ldyBjb25k
aXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0aGUgb3RoZXIgb25lLiBUaGlzIHdp
bGwKKyAgICAvLyBmYWlsIGlmICF0aGlzLmFyZUNvbXBhdGlibGVXaXRoKG90aGVyKS4gV2hlbiBp
dCBmYWlscywgaXQgcmV0dXJucyBpbnZhbGlkKCkuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbWVyZ2VkV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIp
IGNvbnN0OworICAgIAorICAgIGJvb2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkgY29uc3Q7
CisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgYXJlU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBIZWxwZXJz
IGZvciB1c2luZyB0aGlzIGluIGEgdW5pb24uCisgICAgdm9pZCogcmVsZWFzZVJhd1BvaW50ZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihtX2RhdGEubGVha1Jl
ZigpKTsKKyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGFkb3B0
UmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYo
c3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGZyb21SYXdQb2lu
dGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBzdGF0aWNfY2FzdDxEYXRh
Kj4ocmF3UG9pbnRlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICAvLyBJbnRlcm5hbGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1c2luZyBh
IHBvaW50ZXIgdG8gYSBEYXRhIHRoYXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKyAgICAKKyAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcGFjdCBieSBoYXZpbmcgaXQgaW50
ZXJuYWxseSB1c2UgYSB2ZWN0b3IgdGhhdCBqdXN0IGhhcworICAgIC8vIHRoZSBub24tdWlkIHBv
cnRpb24gb2YgT2JqZWN0UHJvcGVydHlDb25kaXRpb24sIGFuZCB0aGVuIHJlcXVpcmluZyB0aGF0
IHRoZSBjYWxsZXJzIG9mIGFsbAorICAgIC8vIG9mIHRoZSBBUElzIHN1cHBseSB0aGUgdWlkLgor
ICAgIAorICAgIGNsYXNzIERhdGEgOiBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9CisgICAg
ICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsKKyAg
ICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBl
LAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHko
CisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhl
YWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywx
NCArMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nl
c3MoCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQpCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fY2hhaW5Db3VudChjaGFpbkNvdW50
KQogICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRp
dGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQog
ewotICAgIGlmIChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7
CiB9CiAKIEdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcxLDcgKzcwLDcgQEAg
Ym9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogewogICAgIGlmIChtX3N0
cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4u
Z2V0KCkpKQorICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNTdGlsbExpdmUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hC
dWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlz
aW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEzICs1MywxMiBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgR2V0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAg
ICAgICwgbV9jaGFpbkNvdW50KDApCiAgICAgewogICAgIH0KICAgICAKICAgICBHZXRCeUlkQWNj
ZXNzKAogICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8
SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogPSAw
LCB1bnNpZ25lZCBjaGFpbkNvdW50ID0gMCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwogICAgIAogICAg
IH5HZXRCeUlkQWNjZXNzKCk7CiAgICAgCkBAIC03Miw4ICs3MSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4g
bV9jaGFpbi5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX2NoYWluQ291bnQ7IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAg
ICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAgLTkxLDkgKzg5
LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgIAogICAgIEFj
Y2Vzc1R5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsKICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9jb25kaXRpb25T
ZXQ7IC8vIEZJWE1FIHdoYXQgYWJvdXQgYmFycmllcnM/CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNp
b24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw4IEBA
IFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKICAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5
RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKTsKICAg
ICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uY29weUZyb20oc3R1
YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIoCisg
ICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTY0LDYgKzY1LDkgQEAgUHV0QnlJZEFjY2VzcyBQ
dXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogCiBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2Vh
ayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBjb25zdAogeworICAgIGlmICghbV9jb25k
aXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgUmVwbGFjZToKICAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCkBAIC03NCwxNSArNzgsMTEgQEAgYm9v
bCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fbmV3U3RydWN0dXJlLmdldCgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtl
ZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CiAgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFp
bi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgIAogICAgIFB1dEJ5SWRBY2Nlc3MoKQogICAg
ICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudChVSU5UX01BWCkK
ICAgICB7CiAgICAgfQogICAgIApAQCAtNjIsMTQgKzYxLDE0IEBAIHB1YmxpYzoKICAgICAgICAg
SlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
CiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsK
ICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBU
cmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwg
b2xkU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2bSwgb3duZXIs
IGNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owog
ICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwogICAgICAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTUsOCAr
OTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAg
ICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAogICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CkBAIC0xMDQsMTAg
KzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgICAg
ICByZXN1bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAg
ICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Ci0gICAgICAgICAg
ICByZXN1bHQubV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKLSAgICAgICAgfQorICAgICAgICBy
ZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1
c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUg
PSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0NiwxNyArMTQxLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQog
ICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAg
ICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGNoYWlu
Q291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0dGVyKCkgfHwgaXNDdXN0
b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluQ291bnQ7Ci0gICAgfQorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBt
X2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgp
IGNvbnN0CiAgICAgewpAQCAtMTc4LDggKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzVHlw
ZSBtX3R5cGU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1Y3R1cmU7CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQcm9wZXJ0
eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgi
PGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50
KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNl
IFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBtX29mZnNldCwgIiB3aXRoIGF0
dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJz
ZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0
aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTT2JqZWN0KHByb3RvdHlwZSgpKSwgY29udGV4dCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnBy
aW50KCIgd2l0aCAiLCBpbkNvbnRleHQoSlNWYWx1ZTo6ZW5jb2RlKHJlcXVpcmVkVmFsdWUoKSks
IGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQor
Citib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2Up
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2Ug
UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVudE9mZnNldCAh
PSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJp
YnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJl
KCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhl
CisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJhY3ks
IGFuZCBtYXliZSBtb3JlIHJpc2t5IHRoYW4gd2Ugd2FudC4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQorICAgICAgICAKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUgPSBiYXNlLT5nZXREaXJlY3Qo
Y3VycmVudE9mZnNldCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gcmVxdWlyZWRWYWx1
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6
CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJh
c2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1l
IHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNhbiBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwg
YW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRvdyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24g
dGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBhZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAg
Ly8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZlY3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1w
dXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIgc2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZh
bGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNv
bnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZh
cmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVz
IHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRo
ZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAgICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0
IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFibGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UK
KyAgICAgICAgLy8gc2hvbGRuJ3QgaGF2ZSBhIFRPQ1RPVSByYWNlIGVpdGhlci4KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICAKKyAgICAg
ICAgV2F0Y2hwb2ludFNldCogc2V0OworICAgICAgICBzd2l0Y2ggKGVmZm9ydCkgeworICAgICAg
ICBjYXNlIE1ha2VOb0NoYW5nZXM6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPnByb3Bl
cnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbnN1cmVXYXRjaGFiaWxpdHk6CisgICAgICAgICAgICBzZXQgPSBzdHJ1
Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KAorICAgICAgICAgICAgICAg
ICpIZWFwOjpoZWFwKHN0cnVjdHVyZSktPnZtKCksIG9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFzZXQtPmlzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAor
eworICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVj
dHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJl
LCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9y
dCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sK
KyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkK
KyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKS5p
c0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2Vs
bCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tl
ZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpKQor
ICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFzUmVx
dWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQgY29u
ZGl0aW9uKQoreworICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNl
OgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQu
cHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2Ui
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIFBy
b3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2Vz
OworCitjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsK
KyAgICAgICAgUHJlc2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VPZlNl
dHRlciwKKyAgICAgICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0
aGlzIHdpbGwgYmUgYSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJl
IHRyYW5zaXRpb25zLCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0
aGUgbmV3IHN0cnVjdHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKCkK
KyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkKKyAg
ICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAg
UHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgeworICAg
ICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29u
ZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1
bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9w
ZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1
cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAg
ICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90
b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJl
dHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJp
ZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRlcjsK
KyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlv
biBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNldHRl
cldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQuZXF1aXZhbGVu
Y2UudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVy
KHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIAorICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wgaGFzT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2UgfTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09m
ZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBi
b29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQ
cmVzZW5jZSB9OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0F0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLmF0
dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyBy
ZXR1cm4gISEqdGhpcyAmJiAobV9raW5kID09IEFic2VuY2UgfHwgbV9raW5kID09IEFic2VuY2VP
ZlNldHRlcik7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNQcm90b3R5cGUoKSk7CisgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJv
dG90eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsgfQorICAgIEpTVmFsdWUg
cmVxdWlyZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUmVxdWlyZWRW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWU7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0
ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9raW5kKTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQ
cmVzZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAg
ICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFi
c2VuY2UucHJvdG90eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2
YWxlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1
LmVxdWl2YWxlbmNlLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91
aWQgIT0gb3RoZXIubV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAg
ICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0Cisg
ICAgICAgICAgICAgICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2Vu
Y2UuYXR0cmlidXRlczsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2Vu
Y2VPZlNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90
aGVyLnUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAg
ICAgICAgICByZXR1cm4gYS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNl
LnZhbHVlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1f
a2luZCA9PSBBYnNlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUg
Y29tcGF0aWJsZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZm
ZXJlbnQgdWlkcy4gSWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVj
aWRlIGhvdyB0byByZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
CisgICAgLy8gYSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2Vz
IHlvdSdsbCB3YW50IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGlu
IG90aGVyIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRo
aXMgd2lsbCBhbHNvIHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlr
ZSBQcmVzZW5jZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGlu
dmFsaWQKKyAgICAvLyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcu
CisgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkg
IT0gb3RoZXIudWlkKCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0
J3Mgc3RydWN0dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRl
ZC4KKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQg
dG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdU
b1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENo
ZWNrcyBpZiB0aGUgY29uZGl0aW9uIGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdp
dmVuIG9iamVjdCBhbmQgc3RydWN0dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1
cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50
ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29u
ZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRp
ZXMuIElmIHRoZSBvYmplY3QgaXMgbm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBp
bmRpY2F0ZXMgdGhhdCBjaGVja2luZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVu
IHN0cnVjdHVyZSBndWFyYW50ZWVzIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9i
amVjdCBpcworICAgIC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBv
dGhlciB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBj
b25kaXRpb24gaW4gYWRkaXRpb24gdG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlz
U3RpbGxWYWxpZChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0Owor
ICAgIAorICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJs
ZSwgYnV0IGNvdWxkIGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFw
cHJvcHJpYXRlIHdhdGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50
cyBhcmUgZW5hYmxlZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24g
dGhlIHByb3BlcnR5IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNw
YWNlIGZvcgorICAgIC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQg
bmV2ZXIgZ2V0IHZlcnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFi
bGUgd2F0Y2hpbmcsIHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQuCisgICAgZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlz
IHRoZSBkZWZhdWx0LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2Yg
YW55IFN0cnVjdHVyZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYg
dGhlIHByb3BlcnR5IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1h
a2UKKyAgICAgICAgLy8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5n
IGZyb20gYSBKSVQgdGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJl
ZmVyYWJsZSB3aGVuIGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24g
Zm9yIHRoZSBmaXJzdCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2lu
dCBmaXJlIHRoYXQgY2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBh
CisgICAgICAgIC8vIHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGlu
ZyBpbXBsaWVzIHRoYXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0
IHRvIG1ha2UgaXQgcHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5n
IHdhdGNoZWQgbWF5IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVm
ZXIgdG8gb25seSBhc3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJl
ZW4KKyAgICAgICAgLy8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAg
ICBNYWtlTm9DaGFuZ2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0
byBlbnN1cmUgdGhhdCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhh
cyBubworICAgICAgICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVz
dCBtZWFucyB0aGF0IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyBy
ZXBsYWNlbWVudCB3YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxl
ZCBhbHJlYWR5LiBEbyBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywg
c2luY2UgdGhlIGFjdCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUu
CisgICAgICAgIEVuc3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkg
Ynkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1
cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wg
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3Ry
dWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBN
YWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBz
dGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJh
bnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlz
V2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIs
IFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJv
b2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9m
IG91ciBjb25kaXRpb25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9v
bCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMg
YXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAg
IHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBX
YXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlk
OworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFs
ZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0
IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25I
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwxOCBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCi0gICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
LSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IGludGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENo
YWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywg
c3RydWN0dXJlLCBjaGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9w
Y29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0
aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsX291dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzb25jdXJyZW50bHko
CisgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHByb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOworICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
c3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGludGVuZGVkQ2hhaW4uZ2V0KCksIG9mZnNldCk7Cisg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0
dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBt
YXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0x
NjUsMTYgKzE2NCwxNCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAogICAgICAgICAgICAgc3R1YkluZm8t
PnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAg
ICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgUmVmUHRyPElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT51
LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKSB7Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9w
dFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJv
ZmlsZWRCbG9jaywgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1
cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0
aW9uLmNoYWluLmdldCgpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRy
YW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBj
aGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNl
dCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgfQpAQCAtMjE5LDE1ICsyMTYsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJl
KCktPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhz
bG93UGF0aFN0YXRlKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gY2hhaW47Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hh
aW4oCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBhY2Nlc3Mub2xkU3Ry
dWN0dXJlKCksIGFjY2Vzcy5jaGFpbigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2hh
aW4tPmlzU3RpbGxWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwg
Y2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1
Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBA
IC0yNTMsNyArMjQ2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ss
ICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojpz
ZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0
dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0
YXR1cy5jb25kaXRpb25TZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShj
YWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzY4LDIyICszNjEsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgp
KQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAg
Ci0gICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAgICBpZiAoIWlz
RGlyZWN0KSB7Ci0gICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAg
ICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFkLW9ubHkgcHJv
cGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNl
cHRTdG9yZVRvKHVpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBj
aGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9yIGRp
Y3Rpb25hcmllcykKLSAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhlIGRpY3Rpb25hcnkg
Y2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbm90IGJlZW4KLSAg
ICAgICAgICAgIC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0cmFuc2l0aW9uLiBB
bmQgcmVhbGx5IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKLSAgICAgICAgICAgIC8vIGJh
aWwgaGVyZSBpcyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9wdGlt
aXppbmcgSklUIGdvIGFuZCBmbGF0dGVuCi0gICAgICAgICAgICAvLyBkaWN0aW9uYXJpZXMgaWYg
d2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3ZXJlIG5ldmVy
IHVzZWQgYXMKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUgcHJvdG90
eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBvZgotICAg
ICAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwuCi0gICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6ZWQoKSkKKyAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgICAgICB9CiAgICAgCkBAIC0zOTQsNyArMzc2LDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQu
YXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4uZ2V0KCksIG9mZnNldCkpOworICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRp
b25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNp
b24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0
QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9raW5kID0gb3RoZXIubV9raW5kOwogICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CiAgICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9j
b25zdGFudENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJh
c2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29m
ZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQog
ICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1
cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNjQsMjkgKzYzLDI2IEBAIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGMKIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gVHJhbnNpdGlvbjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7
CiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgIGlmIChzdHJ1
Y3R1cmVDaGFpbikKLSAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQu
bV9jb25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gU2V0dGVyOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBp
ZiAoY2hhaW4pIHsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9jb25zdGFu
dENoZWNrcyk7Ci0gICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBjaGFpbi0+dGVybWlu
YWxQcm90b3R5cGUoKTsKLSAgICB9CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxs
TGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTEzNCwxNiArMTMwLDEyIEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMo
KSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQg
UHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAorSlNPYmplY3QqIFB1dEJ5SWRW
YXJpYW50OjphbHRlcm5hdGVCYXNlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoa2luZCgpID09IFNl
dHRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBz
dHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZv
cihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2tpbmQgPT0gU2V0dGVyKTsKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VD
b25kaXRpb24oKS5vYmplY3QoKTsKIH0KIAogYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRv
TWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQpAQCAtMTk2LDYgKzE4OCw3IEBAIGJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAg
ICBBU1NFUlQoIXJlcGxhY2UuY29uZGl0aW9uU2V0KCkpOwogICAgIAogICAgIC8vIFRoaXMgc29y
dCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNo
IHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAogICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVy
ZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlz
IGRvZXNuJ3QKQEAgLTIzMiwxMyArMjI1LDEzIEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQoUHJpbnQKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0
aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAg
ICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIs
IFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29u
dGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29u
dGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
Ij4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoKICAgICAg
ICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29u
c3RhbnRDaGVja3MoKSwgY29udGV4dCksICJdIik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9j
b25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNl
KQogICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQo
SlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgi
LCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAgICAgICAgOiBt
X2tpbmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCi0gICAgICAg
ICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9m
ZnNldCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYgKzUzLDE1IEBAIHB1YmxpYzoKICAgICBQdXRC
eUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBv
cGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFy
aWFudCByZXBsYWNlKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShj
b25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xk
U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAg
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwogICAgIAogICAg
IEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIApAQCAtNzYsNiArNzQs
MTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CiAgICAgfQogICAg
IAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdHJ1dHVyZSgpOworICAgIH0KKyAgICAKICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7
CkBAIC0xMDAsMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFn
ZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNvbnN0
IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25z
dAogICAgIHsKQEAgLTExMSwxMyArMTExLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9v
ZmZzZXQ7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJu
IG1fYWx0ZXJuYXRlQmFzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1
Y3R1cmUoKSBjb25zdDsKKyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0OwogICAg
IAogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewpAQCAt
MTM2LDggKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJl
U2V0IG1fb2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAg
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2Jq
ZWN0KiBtX2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9j
b25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsMjQgKzQ2LDI5IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQqIFN0cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxs
IGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3
YXRjaHBvaW50cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hw
b2ludCByZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQn
cyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hh
bmdpbmcuCi0gICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1
YkluZm8oKSk7CisgICAgaWYgKCFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6
RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBj
YXVzZSBteSBvd24gZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgor
ICAgICAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1v
dmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlz
dCB0cmF2ZXJzYWwgZm9yIGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5n
LgorICAgICAgICBtX2hvbGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHVi
SW5mbygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3Qo
KS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm8oKQogewogfQogCi1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBv
aW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAg
cmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywg
bV9oZWFkKTsKIH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAog
ICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENv
ZGVCbG9jayogY29kZUJsb2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXkpCiB7CiAgICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFk
b3B0UmVmKG5ldyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHVi
SW5mbykpOwpAQCAtNzIsNyArNzcsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
KiBXYXRjaHBvCiAgICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1Yklu
Zm8pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7
CisgICAgcmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNp
b24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00
NiwxNSArNDcsMTEgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
byYgaG9sZGVyKQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisg
ICAgICAgIDogbV9rZXkoa2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAg
LCBtX25leHQoV1RGOjptb3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRh
aWwmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBt
X2tleTsKICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7
CiB9OwpAQCAtODMsMTEgKzgxLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNP
blN0cnVjdHVyZVN0dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQqIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7
CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3Vy
ZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvKik7CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgs
OSArNDgsMTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxl
dGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJl
Y3Q6CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIo
dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZToKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1
Y3Rpb25zIGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUs
OCArNzgsMTAgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJr
ZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAg
ICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQo
KSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNo
YWluLmdldCgpKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFu
c2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAg
ICAgICAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGls
bExpdmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg3MzQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm8gewogCiAgICAgLy8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkK
KyAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewog
ICAgICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgU3Ry
dWN0dXJlU3R1YkluZm8gewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNT
dHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1
dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAg
ICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAg
ICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQu
cmVsZWFzZVJhd1BvaW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFj
ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkK
QEAgLTE3NSwxMCArMTc1LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAg
IHNlZW4gPSB0cnVlOwogICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
bikKICAgICB7CiAgICAgICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86
OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50
cywgY29kZUJsb2NrLCB0aGlzKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ss
IHRoaXMsIGNvbmRpdGlvbik7CiAgICAgfQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpA
QCAtMjE3LDIzICsyMTgsMTIgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAg
ICAgICB9IGdldEJ5SWRTZWxmOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBX
cml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAg
ICAgYm9vbCBpc0RpcmVjdDsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVj
dCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0
cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNo
YWluOwotICAgICAgICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wg
aXNEaXJlY3QgOiAxOwotICAgICAgICB9IGdldEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0
QnlJZExpc3Q7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFN0cnVjdHVyZT4gcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJC
YXNlPFN0cnVjdHVyZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxT
dHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7
CiAgICAgICAgIH0gcHV0QnlJZFRyYW5zaXRpb247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAg
ICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA2MCwzMCArMjA2MCwyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJhY3RW
YWx1ZSByZXN1bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRCeUlk
VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNb
aV07Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQo
KTsKKyAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIFN0cnVjdHVy
ZVNldCBzZXQgPSBnZXRDYXNlLnNldCgpOwogICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsK
ICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJu
YXRlQmFzZSgpKQotICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5h
dGVCYXNlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckxvYWQg
PSBiYXNlLm1fdmFsdWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAg
ICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAgICAg
ICAgICAgICAgIGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5v
ZmZzZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAgICAg
ICBpZiAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0
YW50KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAog
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXpl
KGNvbnN0YW50UmVzdWx0KSwKKyAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5jb25zdGFudCgpLAog
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlv
bjo6RXF1aXZhbGVuY2UpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRj
aGFibGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFu
c2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBtX2tleS0+b2JqZWN0KCktPnN0cnVjdHVyZSgpLT5nZXRDb25j
dXJyZW50bHkobV9rZXkudWlkKCkpOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1fa2V5Lm9i
amVjdCgpLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zm
c2V0KTsKKyAgICBzZXQtPmFkZFdhdGNocG9pbnQoJm1fcHJvcGVydHlXYXRjaHBvaW50KTsKK30K
Kwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmZpcmUoY29u
c3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIC8vIE9uZSBvZiB0aGUgd2F0Y2hwb2ludHMg
ZmlyZWQsIGJ1dCB0aGUgb3RoZXIgb25lIGRpZG4ndC4gTWFrZSBzdXJlIHRoYXQgbmVpdGhlciBv
ZiB0aGVtIGFyZQorICAgIC8vIGluIGFueSBzZXQgYW55bW9yZS4gVGhpcyBzaW1wbGlmaWVzIHRo
aW5ncyBieSBhbGxvd2luZyB1cyB0byByZWluc3RhbGwgdGhlIHdhdGNocG9pbnRzCisgICAgLy8g
d2hlcmV2ZXIgZnJvbSBzY3JhdGNoLgorICAgIGlmIChtX3N0cnVjdHVyZVdhdGNocG9pbnQuaXNP
bkxpc3QoKSkKKyAgICAgICAgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50LnJlbW92ZSgpOworICAgIGlm
IChtX3Byb3BlcnR5V2F0Y2hwb2ludC5pc09uTGlzdCgpKQorICAgICAgICBtX3Byb3BlcnR5V2F0
Y2hwb2ludC5yZW1vdmUoKTsKKyAgICAKKyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVy
dHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNh
c3NlbWJseSgpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNo
cG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVC
bG9jaywgIlxuIik7CisgICAgfQorICAgIAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAg
ICBvdXQucHJpbnQoIkFkYXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwp
OworICAgIAorICAgIFN0cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRh
KCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmlsZXI6
OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwg
JmRldGFpbCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURl
dGFpbCYgZGV0YWlsKQoreworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRP
RigKKyAgICAgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3N0
cnVjdHVyZVdhdGNocG9pbnQpOworICAgIAorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludCogcGFyZW50ID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSAtIG15T2Zmc2V0KTsKKyAgICAKKyAgICBwYXJlbnQtPmZpcmUoZGV0YWls
KTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlBy
b3BlcnR5V2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVEZXRhaWwmIGRl
dGFpbCkKK3sKKyAgICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoCisgICAg
ICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9wcm9wZXJ0eVdh
dGNocG9pbnQpOworICAgIAorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludCogcGFyZW50ID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludCo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0
aGlzKSAtIG15T2Zmc2V0KTsKKyAgICAKKyAgICBwYXJlbnQtPmZpcmUoZGV0YWlsKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAi
V2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5OyB9CisgICAgCisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3ByaXZhdGU6CisgICAgY2xhc3Mg
U3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFN0cnVjdHVyZVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwor
ICAgIH07CisgICAgY2xhc3MgUHJvcGVydHlXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQg
eworICAgIHB1YmxpYzoKKyAgICAgICAgUHJvcGVydHlXYXRjaHBvaW50KCkgeyB9CisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRh
aWwmKSBvdmVycmlkZTsKKyAgICB9OworICAgIAorICAgIHZvaWQgZmlyZShjb25zdCBGaXJlRGV0
YWlsJik7CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50IG1fc3RydWN0dXJl
V2F0Y2hwb2ludDsKKyAgICBQcm9wZXJ0eVdhdGNocG9pbnQgbV9wcm9wZXJ0eVdhdGNocG9pbnQ7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgIENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9rZXkoa2V5KQorICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGtleS53YXRjaGluZ1JlcXVyaWVzU3Ry
Y3V0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWtleS53
YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkpOworfQorCit2b2lkIEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9rZXkuaXNXYXRjaGFibGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVy
ZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCh0aGlzKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwp
Cit7CisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVX
YXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAg
ICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIo
dGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgIH0K
KyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50KCJBZGFwdGF0
aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAgICBTdHJpbmdG
aXJlRGV0YWlsIGRldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAKKyAgICBtX2Nv
ZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9m
aWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZkZXRhaWwpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKyNkZWZpbmUg
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBv
aW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworcHVibGljOgorICAg
IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAor
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBt
X2tleTsgfQorICAgIAorICAgIHZvaWQgaW5zdGFsbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyArMjAz
LDE0IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAg
ICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9y
JiBpbnNlcnRDaGVja3MpOwogICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAg
Tm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0
IFN0cnVjdHVyZVNldCYsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
LCBOb2RlVHlwZSBvcCA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRs
ZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUg
PSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5
cGUsIE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIE5vZGVU
eXBlID0gR2V0QnlPZmZzZXQpOworICAgIAorICAgIC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeUlk
VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5SWRWYXJpYW50LgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorICAgIE5vZGUqIGxvYWQoTm9kZSogYmFzZSwgY29u
c3QgVmFyaWFudFR5cGUmIHZhcmlhbnQpOworICAgICAgICAKICAgICB2b2lkIGhhbmRsZUdldEJ5
SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlk
U3RhdHVzJik7CkBAIC0yMTIsNyArMjE5LDM0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVQ
dXRCeUlkKAogICAgICAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBO
b2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsCiAgICAgICAgIGJvb2wgaXNEaXJlY3Qp
OwotICAgIHZvaWQgZW1pdENoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9y
Jik7CisgICAgCisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUq
IGJhc2UsIFByb3BlcnR5T2Zmc2V0KTsKKworICAgIC8vIEVpdGhlciByZWdpc3RlciBhIHdhdGNo
cG9pbnQgb3IgZW1pdCBhIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi4gUmV0dXJucyBmYWxzZSBp
ZiB0aGUKKyAgICAvLyBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLCBhbmQgdGhlcmVmb3JlIG5v
IHJlYXNvbmFibGUgY2hlY2sgY2FuIGJlIGVtaXR0ZWQuCisgICAgYm9vbCBjaGVjayhjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHBy
b21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kKTsKKyAgICAKKyAgICAvLyBFaXRoZXIg
cmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24u
IEl0IG11c3QgYmUgYSBQcmVzZW5jZQorICAgIC8vIGNvbmRpdGlvbi4gSXQgd2lsbCBhdHRlbXB0
IHRvIHByb21vdGUgYSBQcmVzZW5jZSBjb25kaXRpb24gdG8gYW4gRXF1aXZhbGVuY2UgY29uZGl0
aW9uLgorICAgIC8vIEVtaXRzIGNvZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUgdGhhdCB0aGUgY29u
ZGl0aW9uIGd1YXJkcywgYW5kIHJldHVybnMgYSBub2RlIGNvbnRhaW5pbmcKKyAgICAvLyB0aGUg
bG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgdGhlIGNvbmRpdGlvbiBubyBsb25nZXIgaG9s
ZHMuCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mKTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBHZXRCeU9mZnNldE1ldGhvZCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7
CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAgICAvLyBDYWxscyBjaGVj
aygpIGZvciBlYWNoIGNvbmRpdGlvbiBpbiB0aGUgc2V0OiB0aGF0IGlzLCBpdCBlaXRoZXIgZW1p
dHMgY2hlY2tzIG9yIHJlZ2lzdGVycworICAgIC8vIHdhdGNocG9pbnRzIChvciBhIGNvbWJpbmF0
aW9uIG9mIHRoZSB0d28pIHRvIG1ha2UgdGhlIGNvbmRpdGlvbnMgaG9sZC4gSWYgYW55IG9mIHRo
b3NlCisgICAgLy8gY29uZGl0aW9ucyBhcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZSwgcmV0dXJucyBm
YWxzZS4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jik7
CisgICAgCisgICAgLy8gQ2FsbHMgY2hlY2soKSBmb3IgdGhvc2UgY29uZGl0aW9ucyB0aGF0IGFy
ZW4ndCB0aGUgc2xvdCBiYXNlLCBhbmQgY2FsbHMgbG9hZCgpIGZvciB0aGUgc2xvdAorICAgIC8v
IGJhc2UuIERvZXMgYSBjb21iaW5hdGlvbiBvZiB3YXRjaHBvaW50IHJlZ2lzdHJhdGlvbiBhbmQg
Y2hlY2sgZW1pc3Npb24gdG8gZ3VhcmQgdGhlCisgICAgLy8gY29uZGl0aW9ucywgYW5kIGVtaXRz
IGNvZGUgdG8gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2xvdCBiYXNlLiBSZXR1cm5zIGEgbm9k
ZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlmIGFu
eSBvZiB0aGUgY29uZGl0aW9ucyB3ZXJlIG5vIGxvbmdlciBjaGVja2FibGUuCisgICAgR2V0QnlP
ZmZzZXRNZXRob2QgcGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsK
KyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwogCiAgICAgdm9pZCBwcmVwYXJlVG9Q
YXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVhckNhY2hlcygpOwpAQCAtNzA2LDYgKzc0MCw5IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNr
KEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCByb3V0ZSB0byBlbWl0UHJvcGVydHlDaGVjaywgbm90IHRoZSBv
dGhlciB3YXkgYXJvdW5kLiBCdXQgY3VycmVudGx5LAorICAgICAgICAvLyB0aGlzIGdldHMgbm8g
cHJvZml0IGZyb20gdXNpbmcgZW1pdFByb3BlcnR5Q2hlY2soKSBzaW5jZSB3ZSdsbCBub24tYWRh
cHRpdmVseSB3YXRjaCB0aGUKKyAgICAgICAgLy8gb2JqZWN0J3Mgc3RydWN0dXJlIGFzIHNvb24g
YXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nvc250YW50LgogICAgICAgICBOb2RlKiBvYmplY3ROb2Rl
ID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVj
dHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3RO
b2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CkBAIC0yMjQwLDE1ICsyMjc3LDggQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IE5vZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7Ci0gICAgaWYgKGJh
c2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dy
YXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNl
dCwgb2Zmc2V0KSkgewotICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKLSAg
ICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9m
ZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwpAQCAtMjI2NCw2
ICsyMjk0LDE4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAg
ICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9CiAKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBz
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK3sKKyAgICBpZiAoYmFzZS0+aGFzQ29u
c3RhbnQoKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQp
KSB7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOworICAgICAgICAgICAg
cmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmll
ck51bWJlciwgb2Zmc2V0LCBvcCk7Cit9CisKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKQEAg
LTIyODEsMTAgKzIzMjMsMjI3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9m
ZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0
Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK3ZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmVtaXRHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
LCBOb2RlKiBiYXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgTm9kZSogcHJvcGVy
dHlTdG9yYWdlOworICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UgPSBiYXNlOworICAgIGVsc2UKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOworICAgIAorICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOworICAgIGRhdGEt
Pm9mZnNldCA9IG9mZnNldDsKKyAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmll
ck51bWJlcjsKKyAgICAKKyAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9w
SW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwor
CisgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OworfQorCitib29sIEJ5dGVDb2RlUGFyc2VyOjpjaGVj
ayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmICht
X2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1
Y3R1cmUoKTsKKyAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoc3Ry
dWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGFkZFRvR3JhcGgoCisg
ICAgICAgIENoZWNrU3RydWN0dXJlLAorICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQoc3RydWN0dXJlKSksCisgICAgICAgIHdlYWtKU0NvbnN0YW50KGNvbmRpdGlvbi5vYmpl
Y3QoKSkpOworICAgIHJldHVybiB0cnVlOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kKQorewor
ICAgIGlmICgobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90
b3R5cGUgfHwgbWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90
b3R5cGVXaXRoQ2hlY2spCisgICAgICAgICYmIG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJl
KCktPmRmZ1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBt
X2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgp
LCBtZXRob2QucHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLCBtZXRob2Qub2Zmc2V0KCkpKQorICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kOjpjb25zdGFudChtX2dyYXBoLmZyZWV6
ZShjb25zdGFudCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWV0aG9kOworfQorCitHZXRC
eU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sKKyAgICAvLyBXZSBtaWdodCBwcm9tb3RlIHRoaXMg
dG8gRXF1aXZhbGVuY2UsIGFuZCBhIGxhdGVyIERGRyBwYXNzIG1pZ2h0IGFsc28gZG8gc3VjaCBw
cm9tb3Rpb24KKyAgICAvLyBldmVuIGlmIHdlIGZhaWwsIGJ1dCBmb3Igc2ltcGxpY2l0eSB0aGlz
IGNhbm5vdCBiZSBhc2tlZCB0byBsb2FkIGFuIGVxdWl2YWxlbmNlIGNvbmRpdGlvbi4KKyAgICAv
LyBOb25lIG9mIHRoZSBjbGllbnRzIG9mIHRoaXMgbWV0aG9kIHdpbGwgcmVxdWVzdCBhIGxvYWQg
b2YgYW4gRXF1aXZhbGVuY2UgY29uZGl0aW9uIGFueXdheSwKKyAgICAvLyBhbmQgc3VwcG9ydGlu
ZyBpdCB3b3VsZCBjb21wbGljYXRlIHRoZSBoZXVyaXN0aWNzIGJlbG93LgorICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsK
KyAgICAKKyAgICAvLyBIZXJlJ3MgdGhlIHJhbmtpbmcgb2YgaG93IHRvIGhhbmRsZSB0aGlzLCBm
cm9tIG1vc3QgcHJlZmVycmVkIHRvIGxlYXN0IHByZWZlcnJlZDoKKyAgICAvLworICAgIC8vIDEp
IFdhdGNocG9pbnQgb24gYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uIGFuZCByZXR1cm4gYSBjb25z
dGFudCBub2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlLgorICAgIC8vICAgIE5vIG90aGVyIGNvZGUg
aXMgZW1pdHRlZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2Ugb2JqZWN0IGlzIG5ldmVy
IHJlZ2lzdGVyZWQuCisgICAgLy8gICAgSGVuY2UgdGhpcyByZXN1bHRzIGluIHplcm8gY29kZSBh
bmQgd2Ugd29uJ3QgamV0dGlzb24gdGhpcyBjb21waWxhdGlvbiBpZiB0aGUgb2JqZWN0CisgICAg
Ly8gICAgdHJhbnNpdGlvbnMsIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRjaGFibGUgcmln
aHQgbm93LgorICAgIC8vCisgICAgLy8gMikgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBj
dXJyZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyBnb2luZyB0byBiZSB3YXRjaGVkIGJ5IHRo
ZQorICAgIC8vICAgIERGRyBhbnl3YXkgKGkuZS4gZGZnU2hvdWxkV2F0Y2gpLiBXYXRjaCB0aGUg
c3RydWN0dXJlIGFuZCBlbWl0IHRoZSBsb2FkLiBEb24ndCB3YXRjaCB0aGUKKyAgICAvLyAgICBj
b25kaXRpb24sIHNpbmNlIHRoZSBhY3Qgb2YgdHVybmluZyB0aGUgYmFzZSBpbnRvIGEgY29uc3Rh
bnQgaW4gSVIgd2lsbCBjYXVzZSB0aGUgREZHIHRvCisgICAgLy8gICAgd2F0Y2ggdGhlIHN0cnVj
dHVyZSBhbnl3YXkgYW5kIGRvaW5nIHNvIHdvdWxkIHN1YnN1bWUgd2F0Y2hpbmcgdGhlIGNvbmRp
dGlvbi4KKyAgICAvLworICAgIC8vIDMpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3Vy
cmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgd2F0Y2hhYmxlIGJ1dCBub3QgYnkgdGhlCisg
ICAgLy8gICAgREZHIChpLmUuIHRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkg
YW5kICFkZmdTaG91bGRXYXRjaElmUG9zc2libGUoKSkuIFdhdGNoCisgICAgLy8gICAgdGhlIGNv
bmRpdGlvbiwgYW5kIGVtaXQgYSBsb2FkLgorICAgIC8vCisgICAgLy8gNCkgTmVlZCB0byBlbWl0
IGEgbG9hZCwgYW5kIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyBub3Qgd2F0
Y2hhYmxlLiBFbWl0IGEKKyAgICAvLyAgICBzdHJ1Y3R1cmUgY2hlY2ssIGFuZCBlbWl0IGEgbG9h
ZC4KKyAgICAvLworICAgIC8vIDUpIFRoZSBjb25kaXRpb24gZG9lcyBub3QgaG9sZC4gR2l2ZSB1
cCBhbmQgcmV0dXJuIG51bGwuCisgICAgCisgICAgLy8gTWFrZSBzdXJlIHdlIGFncmVlIG9uIHdo
YXQgdGhlIHN0cnVjdHVyZSBpcyBmb3IgdGhlIHB1cnBvc2Ugb2YgZW1pdHRpbmcgdGhlc2UgdmFy
aW91cworICAgIC8vIGNoZWNrcy4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlv
bi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgLy8gRmlyc3QsIHRyeSB0byBwcm9t
b3RlIFByZXNlbmNlIHRvIEVxdWl2YWxlbmNlLiBXZSBkbyB0aGlzIGJlZm9yZSBkb2luZyBhbnl0
aGluZyBlbHNlCisgICAgLy8gYmVjYXVzZSBpdCdzIHRoZSBtb3N0IHByb2ZpdGFibGUuIEFsc28s
IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgcHJlc2VuY2UgaXMgd2F0Y2hhYmxlIGJ1dAorICAg
IC8vIHdlIGRvbid0IHdhbnQgdG8gd2F0Y2ggaXQgdW5sZXNzIGl0IGJlY2FtZSBhbiBlcXVpdmFs
ZW5jZSAoc2VlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorICAgIC8vICgxKSwgKDIpLCBhbmQg
KDMpIGFib3ZlKS4KKyAgICBpZiAoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KGNvbmRpdGlvbi5v
ZmZzZXQoKSkpIHsKKyAgICAgICAgLy8gVGhpcyBsb2FkIGlzIGZpbmUgYmVjYXVzZSBvbmx5IHRo
ZSBHQyBjYW4gY2F1c2UgYSBkZWxldGVkIHByb3BlcnR5IHRvIGhhdmUgYSBnYXJiYWdlCisgICAg
ICAgIC8vIHZhbHVlLgorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29uZGl0aW9uLm9iamVjdCgp
LT5nZXREaXJlY3QoY29uZGl0aW9uLm9mZnNldCgpKTsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gZXF1aXZhbGVuY2VDb25kaXRpb24gPQorICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgICAgICAgICAg
Y29uZGl0aW9uLm9iamVjdCgpLCBjb25kaXRpb24udWlkKCksIHZhbHVlKTsKKyAgICAgICAgaWYg
KG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oZXF1aXZhbGVuY2VDb25kaXRpb24pKQorICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kOjpjb25zdGFudChtX2dyYXBoLmZyZWV6ZSh2YWx1
ZSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSdsbCBoYXZlIHRvIG1h
dGVyaWFsaXplIHRoZSBjb25kaXRpb24ncyBiYXNlIGFzIGEgY29uc3RhbnQgaW4gREZHIElSLiBP
bmNlCisgICAgLy8gd2UgZG8gdGhpcywgdGhlIGZyb3plbiB2YWx1ZSB3aWxsIGhhdmUgaXRzIG93
biBpZGVhIG9mIHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4gVXNlIHRoYXQgZnJvbQorICAgIC8vIG5v
dyBvbiBqdXN0IGJlY2F1c2UgaXQncyBsZXNzIGNvbmZ1c2luZy4KKyAgICBGcm96ZW5WYWx1ZSog
YmFzZSA9IG1fZ3JhcGguZnJlZXplKGNvbmRpdGlvbi5vYmplY3QoKSk7CisgICAgc3RydWN0dXJl
ID0gYmFzZS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgLy8gQ2hlY2sgaWYgdGhlIHN0cnVjdHVy
ZSB0aGF0IHdlJ3ZlIHJlZ2lzdGVyZWQgbWFrZXMgdGhlIGNvbmRpdGlvbiBob2xkLiBJZiBub3Qs
IGp1c3QgZ2l2ZQorICAgIC8vIHVwLiBUaGlzIGlzIGNhc2UgKDUpIGFib3ZlLgorICAgIGlmICgh
Y29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAgICAgICBy
ZXR1cm4gR2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAKKyAgICAvLyBJZiB0aGUgc3RydWN0dXJl
IGlzIHdhdGNoZWQgYnkgdGhlIERGRyBhbHJlYWR5LCB0aGVuIGp1c3QgdXNlIHRoaXMgZmFjdCB0
byBlbWl0IHRoZSBsb2FkLgorICAgIC8vIFRoaXMgaXMgY2FzZSAoMikgYWJvdmUuCisgICAgaWYg
KHN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKKyAgICAgICAgcmV0dXJuIHByb21vdGVUb0Nv
bnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlwZShiYXNlLCBjb25kaXRp
b24ub2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBJZiB3ZSBjYW4gd2F0Y2ggdGhlIGNvbmRpdGlv
biByaWdodCBub3csIHRoZW4gd2UgY2FuIGVtaXQgdGhlIGxvYWQgYWZ0ZXIgd2F0Y2hpbmcgaXQu
IFRoaXMKKyAgICAvLyBpcyBjYXNlICgzKSBhYm92ZS4KKyAgICBpZiAobV9ncmFwaC53YXRjaENv
bmRpdGlvbihjb25kaXRpb24pKQorICAgICAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQoR2V0
QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZzZXQo
KSkpOworICAgIAorICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8oYmFzZSkpOworICAgIAorICAgIC8vIFdlIGNhbid0IHdhdGNoIGFueXRoaW5nIGJ1dCB3
ZSBrbm93IHRoYXQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIHNhdGlzZmllcyB0aGUgY29uZGl0aW9u
LiBTbywKKyAgICAvLyBjaGVjayBmb3IgdGhhdCBzdHJ1Y3R1cmUgYW5kIHRoZW4gZW1pdCB0aGUg
bG9hZC4KKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwgCisgICAgICAg
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAgICAgICAgd2Vh
a0pTQ29uc3RhbnQoYmFzZU5vZGUpKTsKKyAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQoR2V0
QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlV2l0aENoZWNrKGJhc2UsIGNvbmRpdGlv
bi5vZmZzZXQoKSkpOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVj
dWxhdGVkVHlwZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlPZmZzZXQgbWV0aG9k
LCBOb2RlVHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICBjYXNl
IEludmFsaWQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QuY29uc3Rh
bnQoKSkpOworICAgIGNhc2UgTG9hZEZyb21Qcm90b3R5cGU6CisgICAgY2FzZSBMb2FkRnJvbVBy
b3RvdHlwZVdpdGhDaGVjazogeworICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGFkZFRvR3JhcGgo
SlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5wcm90b3R5cGUoKSkpOworICAgICAgICByZXR1cm4g
aGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIs
IG1ldGhvZC5vZmZzZXQoKSwgb3ApOworICAgIH0KKyAgICBjYXNlIExvYWQ6CisgICAgICAgIC8v
IFdpbGwgbmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgTm9kZVR5
cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQoY29uZGl0
aW9uKTsKKyAgICByZXR1cm4gbG9hZChwcmVkaWN0aW9uLCBtX2dyYXBoLmlkZW50aWZpZXJzKCku
ZW5zdXJlKGNvbmRpdGlvbi51aWQoKSksIG1ldGhvZCwgb3ApOworfQorCitib29sIEJ5dGVDb2Rl
UGFyc2VyOjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9u
IDogY29uZGl0aW9uU2V0KSB7CisgICAgICAgIGlmICghY2hlY2soY29uZGl0aW9uKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dldEJ5
T2Zmc2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQpCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29uZGl0aW9uU2V0KSB7
CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICBjYXNlIFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1
bHQpOyAvLyBTaG91bGQgb25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhlc2UuCisgICAgICAgICAg
ICByZXN1bHQgPSBsb2FkKHByZWRpY3Rpb24sIGNvbmRpdGlvbiwgb3ApOworICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICgh
Y2hlY2soY29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRo
b2Q7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoISFyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIE5vZGVUeXBlIG9wKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1
cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAg
ICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb25TZXQpOworICAg
IHJldHVybiBsb2FkKAorICAgICAgICBwcmVkaWN0aW9uLAorICAgICAgICBtX2dyYXBoLmlkZW50
aWZpZXJzKCkuZW5zdXJlKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLnVpZCgpKSwK
KyAgICAgICAgbWV0aG9kLCBvcCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRUeXBl
PgorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoTm9kZSogYmFzZSwgY29uc3QgVmFyaWFudFR5
cGUmIHZhcmlhbnQpCit7CisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7Cisg
ICAgCisgICAgU3BlY3VsYXRlZFR5cGUgbG9hZFByZWRpY3Rpb247CisgICAgTm9kZVR5cGUgbG9h
ZE9wOworICAgIGlmICh2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgbG9hZFBy
ZWRpY3Rpb24gPSBTcGVjQ2VsbE90aGVyOworICAgICAgICBsb2FkT3AgPSBHZXRHZXR0ZXJTZXR0
ZXJCeU9mZnNldDsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkUHJlZGljdGlvbiA9IHByZWRp
Y3Rpb247CisgICAgICAgIGxvYWRPcCA9IEdldEJ5T2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBO
b2RlKiBsb2FkZWRWYWx1ZTsKKyAgICBpZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0
eSgpKQorICAgICAgICBsb2FkZWRWYWx1ZSA9IGxvYWQobG9hZFByZWRpY3Rpb24sIHZhcmlhbnQu
Y29uZGl0aW9uU2V0KCksIGxvYWRPcCk7CisgICAgZWxzZSB7CisgICAgICAgIGxvYWRlZFZhbHVl
ID0gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwg
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQo
KSwKKyAgICAgICAgICAgIGxvYWRPcCk7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIGJhY2t3
YXJkcyBwcm9wYWdhdGlvbiBrbm93cyB0aGF0IHdlJ3ZlIHVzZWQgYmFzZS4KKyAgICBhZGRUb0dy
YXBoKFBoYW50b20sIGJhc2UpOworICAgIAorICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKIH0KIAog
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKQEAgLTIzMDcsMTggKzI1NjYsMzMg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24o
KSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5
SWQoKTsKLSAgICAKKyAgICAgICAgVmVjdG9yPE11bHRpR2V0QnlPZmZzZXRNZXRob2QsIDI+IGNh
c2VzOworICAgICAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNo
ZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAg
ICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNl
IGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNr
cyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAo
dW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJp
YW50SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFu
dEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCisgICAgICAgIGZvciAoY29uc3Qg
R2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAg
ICAgICAgICAgIGlmICh2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2VzLmFwcGVuZChNdWx0aUdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkKHZhcmlh
bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxh
bkxvYWQoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKTsKKyAgICAg
ICAgICAgIGlmICghbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNl
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoTXVsdGlHZXRCeU9mZnNldE1ldGhvZCh2YXJpYW50
LnN0cnVjdHVyZVNldCgpLCBtZXRob2QpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2dy
YXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5v
dGljZUlubGluZWRHZXRCeUlkKCk7CisgICAgCiAgICAgICAgIC8vIDIpIEVtaXQgYSBNdWx0aUdl
dEJ5T2Zmc2V0CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5t
X211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IGdl
dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+Y2FzZXMgPSBjYXNlczsKICAg
ICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTXVsdGlHZXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlv
biksIGJhc2UpKTsKQEAgLTIzMjgsMzAgKzI2MDIsMTYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlR2V0QnlJZCgKICAgICBBU1NFUlQoZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09
IDEpOwogICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBnZXRCeUlkU3RhdHVzWzBdOwogICAg
ICAgICAgICAgICAgIAorICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9hZChiYXNlLCB2YXJpYW50
KTsKKyAgICBpZiAoIWxvYWRlZFZhbHVlKSB7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
ZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoZ2V0QnlJZCwgT3BJ
bmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCiAgICAg
ICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKICAgICAK
LSAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNlOwotICAgICAgICAgICAgICAgIAotICAgIGFk
ZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2
YXJpYW50LnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOwotICAgIAotICAgIGVtaXRDaGVja3ModmFy
aWFudC5jb25zdGFudENoZWNrcygpKTsKLQotICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KSkKLSAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KTsKLSAgICAKLSAgICAvLyBVbmxlc3Mgd2Ugd2FudCBidWdzIGxpa2UgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NzgzLCB3ZSBuZWVkIHRvCi0gICAgLy8gZW5zdXJl
IHRoYXQgdGhlIGJhc2Ugb2YgdGhlIG9yaWdpbmFsIGdldF9ieV9pZCBpcyBrZXB0IGFsaXZlIHVu
dGlsIHdlJ3JlIGRvbmUgd2l0aAotICAgIC8vIGFsbCBvZiB0aGUgc3BlY3VsYXRpb25zLiBXZSBv
bmx5IGluc2VydCB0aGUgUGhhbnRvbSBpZiB0aGVyZSBoYWQgYmVlbiBhIENoZWNrU3RydWN0dXJl
Ci0gICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGJhc2UgZm9sbG93aW5nIHRoZSBD
aGVja1N0cnVjdHVyZSBvbiBiYXNlLgotICAgIGlmIChvcmlnaW5hbEJhc2UgIT0gYmFzZSkKLSAg
ICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcmlnaW5hbEJhc2UpOwotICAgIAotICAgIE5vZGUq
IGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgIHZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAotICAgICAgICBiYXNlLCB2
YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQo
KSwKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQgOiBHZXRCeU9mZnNldCk7Ci0gICAgCiAgICAgaWYgKCF2YXJpYW50LmNhbGxMaW5rU3Rh
dHVzKCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQp
LCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MjIsMTcgKzI2ODIsMjAgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkK
LSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQo
KTsKLSAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJp
YW50SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50
SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZW1pdENoZWNrcyhwdXRCeUlkU3Rh
dHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgICAgICAgICAgaWYg
KCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBo
LmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CisgICAgICAgIAogICAgICAg
ICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0
RGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlh
bnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVy
OwpAQCAtMjQ1NCw3ICsyNzE3LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
SWQoCiAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewogICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgZW1pdENoZWNrcyh2
YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29u
ZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVy
TnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgp
KTsKICAgICAKQEAgLTI1MDUsMTkgKzI3NzEsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlJZCgKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNl
dHRlcjogewotICAgICAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNlOwotICAgICAgICAKLSAg
ICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgIENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAg
ICAgCi0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJh
c2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgIAot
ICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAg
ICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50aWZp
ZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAgICBHZXRHZXR0ZXJTZXR0ZXJC
eU9mZnNldCk7CisgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9hZChiYXNlLCB2YXJpYW50
KTsKKyAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgeworICAgICAgICAgICAgZW1pdFB1dEJ5SWQo
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTm9kZSog
c2V0dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZhbHVlKTsKICAgICAgICAgCkBA
IC0yNTQ1LDcgKzI4MDMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAog
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwo
KSk7CiAgICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
bmV4dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5h
a2VkU2V0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIHZh
bHVlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAgICAgICAgIGhhbmRsZUNhbGwoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9u
IDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDkgQEAgdm9pZCBDb21tb25EYXRhOjp2YWxpZGF0
ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNr
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7CiAgICAgICAgIH0K
ICAgICB9CisgICAgCisgICAgZm9yIChBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQqIHdhdGNo
cG9pbnQgOiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzKQorICAgICAgICB3YXRjaHBvaW50
LT5rZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorI2lu
Y2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2lu
Y2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNl
dC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTgsNiArMTAwLDggQEAgcHVibGljOgogICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7CiAgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0dXJlUmVmZXJlbmNlczsKICAgICBC
YWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3YXRjaHBvaW50czsKKyAgICBCYWc8
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRz
OworICAgIEJhZzxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+IGFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CiAgICAgVmVjdG9yPEp1bXBSZXBs
YWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsKICAgICAKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNv
bXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODczNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDggKzI5NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92
ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAgICAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29u
c3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBNdWx0aUdl
dEJ5T2Zmc2V0TWV0aG9kJiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRz
Lmxhc3QoKTsKQEAgLTMwOCw3ICszMDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZz
ZXQoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBk
YXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZGF0YS5jYXNlc1swXSwgZGF0YS5p
ZGVudGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTUyOSw3ICs1MjksMzYgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKyAgICAKKyAg
ICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUs
IGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2QsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgeworICAgICAgICAvLyBXaGVuIHdlIGdldCB0byBoZXJlIHdlIGhhdmUgYWxyZWFk
eSBlbWl0dGVkIGFsbCBvZiB0aGUgcmVxdWlzaXRlIGNoZWNrcyBmb3IgZXZlcnl0aGluZy4KKyAg
ICAgICAgLy8gU28sIHdlIGp1c3QgbmVlZCB0byBlbWl0IHdoYXQgdGhlIG1ldGhvZCBvYmplY3Qg
dGVsbHMgdXMgdG8gZW1pdC4KICAgICAgICAgCisgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQo
KSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAg
ICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbWV0aG9kLmNvbnN0YW50
KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0
QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJ
bkJsb2NrLCBub2RlLCBub2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9m
ZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGVXaXRoQ2hlY2s6IHsKKyAgICAgICAgICAg
IE5vZGUqIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoaW5kZXhJbkJsb2Nr
LCBvcmlnaW4sIG1ldGhvZC5wcm90b3R5cGUoKSk7CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZz
ZXQoCisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBub2RlLCBFZGdlKGNoaWxkLCBLbm93
bkNlbGxVc2UpLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9IH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVu
c2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFz
ZVZhbHVlLCBjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlcikKICAgICB7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2lu
OwpAQCAtNTM3LDI1ICs1NjYsMjQgQEAgcHJpdmF0ZToKIAogICAgICAgICBhZGRCYXNlQ2hlY2so
aW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwog
ICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKLSAgICAgICAgaWYgKHZhcmlh
bnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFs
dGVybmF0ZUJhc2UoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBi
YXNlVmFsdWUubV92YWx1ZTsKLSAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRy
eUdldENvbnN0YW50UHJvcGVydHkoYmFzZUZvckxvYWQsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgp
LCB2YXJpYW50Lm9mZnNldCgpKSkgeworICAgICAgICAvLyBXZSBhcmVuJ3Qgc2V0IHVwIHRvIGhh
bmRsZSBwcm90b3R5cGUgc3R1ZmYuCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOworCisgICAgICAgIGlmIChKU1ZhbHVl
IHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VWYWx1ZS5tX3ZhbHVl
LCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKICAgICAgICAg
ICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFsdWUp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5CbG9jaywgb3JpZ2luLCB2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGlsZEVkZ2UgPSBFZGdlKGNoaWxkLCBL
bm93bkNlbGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRV
c2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxv
Y2ssIG5vZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5C
bG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGNoaWxkRWRnZS5zZXRV
c2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAgICAgICBFZGdlIHByb3BlcnR5U3Rv
cmFnZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNl
dCgpKSkKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNTYz
LDcgKzU5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFN0b3Jh
Z2VBY2Nlc3NEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsK
LSAgICAgICAgZGF0YS5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOworICAgICAgICBkYXRhLm9m
ZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmll
ck51bWJlcjsKICAgICAgICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRh
dGEsIHByb3BlcnR5U3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hwb2ludCog
d2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcq
IHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50
ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1
dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVm
ZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwogICAgIG5l
dXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwxMCArNDYs
MjMgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQogCiB2b2lk
IEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElu
ZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIENvbW1v
bkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVycmVkVmFs
dWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQn
cyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0
b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVycmVkVmFs
dWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2b2lkIEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYg
Y29tbW9uKQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkgeworICAgIGNhc2UgUHJvcGVydHlD
b25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50
cygpIHsgfQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCit2b2lk
IERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7
Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTg4LDYg
KzEwNyw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBt
X2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9pbmZl
cnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZl
clZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1fYWRhcHRpdmVT
dHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29s
IERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC05NSw3ICsxMTUs
OCBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgcmV0dXJu
IG1fc2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxs
VmFsaWQoKQogICAgICAgICAmJiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQotICAg
ICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9idWZm
ZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMuYXJlU3RpbGxWYWxpZCgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRz
LmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
IApAQCAtNDEsMTUgKzQyLDE1IEBAIGNsYXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgogc3RydWN0IEdlbmVyaWNTZXRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJs
b2NrKiwgVCBzZXQsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgc3RhdGljIHZvaWQgYWRk
KENvZGVCbG9jayogY29kZUJsb2NrLCBUIHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHNldC0+YWRkKHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0
LT5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3Rh
dGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5J
bnZhbGlkYXRlZCgpOyB9CiB9OwogCiBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAg
IHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCop
OworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9u
RGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVl
KiBpbmZlcnJlZFZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhh
c0JlZW5JbnZhbGlkYXRlZCgpOwpAQCAtNTcsMTIgKzU4LDE4IEBAIHN0cnVjdCBJbmZlcnJlZFZh
bHVlQWRhcHRvciB7CiB9OwogCiBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0
b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyos
IFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1
ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRh
dGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQg
PSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0K
K307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBz
dGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
LCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtl
eS5pc1dhdGNoYWJsZSgpOwogICAgIH0KIH07CiAKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAg
ICBmb3IgKGF1dG8mIHNldCA6IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2Rl
QmxvY2ssIHNldCwgY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAg
ICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAg
ICAgIG1fcmVhbGx5QWRkZWQgPSB0cnVlOwogICAgIH0KQEAgLTEyMiw2ICsxMjksMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAgICB2b2lkIGFkZExh
emlseShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0J3MgcmVjb21tZW5kZWQg
dGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UKKyAgICAvLyBHcmFwaDo6YWRk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LCB3aGljaCBkb2VzIHRoZSByZXF1aXJlZCBHQyBt
YWdpYyBhcyB3ZWxsLgorICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJik7CisgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKICAg
ICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21tb25EYXRhJik7CkBAIC0xNDQsMTIgKzE1
NSwxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dh
dGNoZWQodmlldyk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVj
dHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzPFdhdGNocG9pbnRTZXQqPiBtX3NldHM7CiAgICAgR2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czxJbmxpbmVXYXRjaHBvaW50U2V0Kj4gbV9pbmxpbmVTZXRzOwog
ICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFs
dWVBZGFwdG9yPiBtX2luZmVycmVkVmFsdWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2lu
dHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4g
bV9idWZmZXJWaWV3czsKKyAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0
aXZlU3RydWN0dXJlU2V0czsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3
ICs1MCwxNCBAQCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6On5EZXNpcmVkV2Vha1JlZmVyCiAKIHZv
aWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXppbHkoSlNDZWxsKiBjZWxsKQogewotICAg
IG1fcmVmZXJlbmNlcy5hZGQoY2VsbCk7CisgICAgaWYgKGNlbGwpCisgICAgICAgIG1fcmVmZXJl
bmNlcy5hZGQoY2VsbCk7Cit9CisKK3ZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXpp
bHkoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFk
ZExhemlseSh2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
Ojpjb250YWlucyhKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDE4NzM0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgfkRlc2lyZWRX
ZWFrUmVmZXJlbmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXppbHkoSlNDZWxsKik7CisgICAgdm9p
ZCBhZGRMYXppbHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsKICAgICAK
ICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ4LDYgKzg0
OCwyMSBAQCB2b2lkIEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQog
fQogCitib29sIEdyYXBoOjp3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KQoreworICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5v
YmplY3QoKSk7CisgICAgaWYgKGtleS5oYXNQcm90b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndl
YWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgIGlmIChrZXkuaGFz
UmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5
KGtleS5yZXF1aXJlZFZhbHVlKCkpOworICAgIAorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRM
YXppbHkoa2V5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNoTWFw
PENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVy
YXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAgLTEwMjAs
OCArMTAzNSwxMiBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTCiBK
U1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KAogICAgIEpTVmFsdWUgYmFzZSwg
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2Ji
ZXJlZCgpKQorICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVy
ZWQoKSkgeworICAgICAgICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNl
dCB0byBhIHVpZCwgd2UgY291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KKyAgICAgICAg
Ly8gd2F0Y2hpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyeUdldENvbnN0YW50UHJv
cGVydHkoYmFzZSwgc3RydWN0dXJlLnNldCgpLCBvZmZzZXQpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NjUsNiArNjY1LDkg
QEAgcHVibGljOgogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVy
biBtX3BsYW4uaWRlbnRpZmllcnM7IH0KICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNocG9p
bnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAgCisgICAgLy8gUmV0dXJu
cyBmYWxzZSBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW52YWxpZC4KKyAgICBib29sIHdhdGNoQ29u
ZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0
aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQo
UHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fa2luZCwgIjoiKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQ29u
c3RhbnQ6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChjb25zdGFudCgp
LCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91
dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9tUHJv
dG90eXBlOgorICAgIGNhc2UgTG9hZEZyb21Qcm90b3R5cGVXaXRoQ2hlY2s6CisgICAgICAgIG91
dC5wcmludChvZmZzZXQoKSwgIkAiLCBwb2ludGVyRHVtcEluQ29udGV4dChwcm90b3R5cGUoKSwg
Y29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIEdldEJ5T2Zmc2V0
TWV0aG9kOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4
dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIE11bHRpR2V0QnlPZmZzZXRDYXNlOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorewor
ICAgIG91dC5wcmludChpbkNvbnRleHQobV9zZXQsIGNvbnRleHQpLCAiOiIsIGluQ29udGV4dCht
X21ldGhvZCwgY29udGV4dCkpOworfQorCit2b2lkIE11bHRpR2V0QnlPZmZzZXRDYXNlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxw
dHIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBHZXRCeU9mZnNldE1ldGhvZDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICBv
dXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zm
c2V0TWV0aG9kOjpMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAg
ICAgICBvdXQucHJpbnQoIkxvYWRGcm9tUHJvdG90eXBlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZVdpdGhDaGVjazoKKyAg
ICAgICAgb3V0LnByaW50KCJMb2FkRnJvbVByb3RvdHlwZVdpdGhDaGVjayIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011
bHRpR2V0QnlPZmZzZXREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdN
dWx0aUdldEJ5T2Zmc2V0RGF0YV9oCisjZGVmaW5lIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKKyNpbmNs
dWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAg
ICBJbnZhbGlkLAorICAgICAgICBDb25zdGFudCwKKyAgICAgICAgTG9hZCwKKyAgICAgICAgTG9h
ZEZyb21Qcm90b3R5cGUsCisgICAgICAgIExvYWRGcm9tUHJvdG90eXBlV2l0aENoZWNrCisgICAg
fTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCgpCisgICAgICAgIDogbV9raW5kKEludmFs
aWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0QnlPZmZzZXRNZXRob2QgY29u
c3RhbnQoRnJvemVuVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRo
b2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJl
c3VsdC51LmNvbnN0YW50ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBsb2FkKFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IExvYWQ7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0gb2Zm
c2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0
QnlPZmZzZXRNZXRob2QgbG9hZEZyb21Qcm90b3R5cGUoRnJvemVuVmFsdWUqIHByb3RvdHlwZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Qg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZEZyb21Qcm90b3R5cGU7CisgICAg
ICAgIHJlc3VsdC51LmxvYWQucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXN1bHQu
dS5sb2FkLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWRGcm9tUHJvdG90eXBlV2l0aENo
ZWNrKEZyb3plblZhbHVlKiBwcm90b3R5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7
CisgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IExvYWRGcm9tUHJvdG90eXBlV2l0aENoZWNrOworICAgICAgICByZXN1bHQudS5sb2FkLnBy
b3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFsaWQ7IH0KKyAgICAKKyAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZSog
Y29uc3RhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFu
dCk7CisgICAgICAgIHJldHVybiB1LmNvbnN0YW50OworICAgIH0KKyAgICAKKyAgICBGcm96ZW5W
YWx1ZSogcHJvdG90eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
TG9hZEZyb21Qcm90b3R5cGUgfHwga2luZCgpID09IExvYWRGcm9tUHJvdG90eXBlV2l0aENoZWNr
KTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IExvYWQgfHwga2luZCgpID09IExvYWRGcm9tUHJvdG90eXBlIHx8IGtpbmQoKSA9PSBMb2Fk
RnJvbVByb3RvdHlwZVdpdGhDaGVjayk7CisgICAgICAgIHJldHVybiB1LmxvYWQub2Zmc2V0Owor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29u
dGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAor
cHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIEZyb3plblZhbHVlKiBjb25zdGFudDsKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGU7CisgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gbG9hZDsKKyAgICB9IHU7
CisgICAgS2luZCBtX2tpbmQ7Cit9OworCitjbGFzcyBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSB7Citw
dWJsaWM6CisgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgTXVsdGlHZXRCeU9mZnNldENhc2UoY29uc3QgU3RydXR1cmVTZXQmIHNldCwgY29uc3QgR2V0
QnlPZmZzZXRNZXRob2QmIG1ldGhvZCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICwg
bV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBz
ZXQoKSB7IHJldHVybiBtX3NldDsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9k
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRob2Q7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbm9udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RydWN0dXJlU2V0IG1fc2V0OworICAg
IEdldEJ5T2Zmc2V0TWV0aG9kIG1fbWV0aG9kOworfTsKKworc3RydWN0IE11bHRpR2V0QnlPZmZz
ZXREYXRhIHsKKyAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOworICAgIFZlY3RvcjxHZXRC
eU9mZnNldE1ldGhvZCwgMj4gY2FzZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTXVsdGlHZXRCeU9m
ZnNldERhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNs
dWRlICJERkdFcG9jaC5oIgogI2luY2x1ZGUgIkRGR0xhenlKU1ZhbHVlLmgiCisjaW5jbHVkZSAi
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNp
bmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKQEAgLTY1
LDExICs2Niw2IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlcjsKIH07CiAKLXN0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7Ci0gICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKLSAgICBWZWN0b3I8R2V0QnlJZFZhcmlhbnQsIDI+
IHZhcmlhbnRzOwotfTsKLQogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyOwogICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMj4gdmFy
aWFudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw2ICszMjgsMTEgQEAgYm9vbCBz
YWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6
CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGFsc28gY2hlY2sgdGhlIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkLgorICAgICAgICAv
LyBJZiB3ZSBoYXZlIG9uZSB0aGF0IGd1YXJhbnRlZXMgdGhlIHByZXNlbmNlIG9mIHRoaXMgcHJv
cGVydHksIHRoZW4gdGhpcyBpcyBhbHdheXMgc2FmZQorICAgICAgICAvLyB0byBleGVjdXRlLgor
ICAgICAgICBGSVhNRTsKKyAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUm
IHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CiAgICAg
ICAgIGlmICh2YWx1ZS5pc1RvcCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQx
LDQyICszNDYsMzAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAog
ICAgICAgICAKICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgLy8gV2UgY2Fu
J3QgYWx3YXlzIGd1YXJhbnRlZSB0aGF0IHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGlzIHNhZmUgdG8g
ZXhlY3V0ZSBpZiBpdAotICAgICAgICAvLyBjb250YWlucyBsb2FkcyBmcm9tIHByb3RvdHlwZXMu
IFdlIGtub3cgdGhhdCBpdCB3b24ndCBsb2FkIGZyb20gdGhvc2UgcHJvdG90eXBlcyBpZgotICAg
ICAgICAvLyB3ZSB3YXRjaCB0aGUgbXV0YWJpbGl0eSBvZiB0aGUgcHJvcGVydGllcyBiZWluZyBs
b2FkZWQuIFNvLCBoZXJlIHdlIHRyeSB0bwotICAgICAgICAvLyBjb25zdGFudC1mb2xkIHByb3Rv
dHlwZSBsb2FkcywgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIGNsYWltIHRoYXQgd2UgY2Fubm90IGhv
aXN0LiBXZQotICAgICAgICAvLyBhbHNvIGtub3cgdGhhdCBhIGxvYWQgaXMgc2FmZSB0byBleGVj
dXRlIGlmIHdlIGFyZSB3YXRjaGluZyB0aGUgcHJvdG90eXBlJ3MKLSAgICAgICAgLy8gc3RydWN0
dXJlLgotICAgICAgICBmb3IgKGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+
bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCF2YXJp
YW50LmFsdGVybmF0ZUJhc2UoKSkgewotICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgcHJv
dG90eXBlIGxvYWQuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgYmFzZSA9IHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IGdyYXBoLmZyZWV6ZShi
YXNlKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSA9PSBT
dHJ1Y3R1cmVzQXJlV2F0Y2hlZAotICAgICAgICAgICAgICAgICYmIGZyb3plbi0+c3RydWN0dXJl
KCktPmRmZ1Nob3VsZFdhdGNoKCkKLSAgICAgICAgICAgICAgICAmJiBmcm96ZW4tPnN0cnVjdHVy
ZSgpLT5pc1ZhbGlkT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gV2UncmUgYWxyZWFkeSB3YXRjaGluZyB0aGF0IGl0J3Mgc2FmZSB0byBsb2FkIGZyb20gdGhp
cy4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9IGdyYXBoLnRyeUdldENvbnN0
YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZh
cmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIGlm
ICghY29uc3RhbnRSZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvLyBDb3VsZG4ndCBjb25zdGFu
dC1mb2xkIGEgcHJvdG90eXBlIGxvYWQuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkbid0IGhvaXN0Ci0g
ICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgc2FmZXR5IG9mIHRoZSBsb2FkIGRlcGVuZHMg
b24gc3RydWN0dXJlIGNoZWNrcyBvbiB0aGUgcHJvdG90eXBlLAotICAgICAgICAgICAgICAgIC8v
IGFuZCB3ZSdyZSB0b28gY2hlYXAgdG8gdmVyaWZ5IHRoYXQgaGVyZS4KKyAgICAgICAgLy8gY29u
dGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5cGVzLiBJZiB0aGUgbG9hZCByZXF1aXJlcyBhIGNoZWNr
IGluIElSLCB3aGljaCBpcyByYXJlLCB0aGVuCisgICAgICAgIC8vIHdlIGN1cnJlbnRseSBjbGFp
bSB0aGF0IHdlIGRvbid0IGtub3cgaWYgaXQncyBzYWZlIHRvIGV4ZWN1dGUgYmVjYXVzZSBmaW5k
aW5nIHRoYXQKKyAgICAgICAgLy8gY2hlY2sgaW4gdGhlIGFic3RyYWN0IHN0YXRlIHdvdWxkIGJl
IGhhcmQuIElmIHRoZSBsb2FkIHJlcXVpcmVzIHdhdGNocG9pbnRzLCB3ZSBqdXN0CisgICAgICAg
IC8vIGNoZWNrIGlmIHdlJ3JlIG5vdCBpbiBhIGNsb2JiZXJlZCBzdGF0ZSAoaS5lLiBpbiBiZXR3
ZWVuIGEgc2lkZSBlZmZlY3QgYW5kIGFuCisgICAgICAgIC8vIGludmFsaWRhdGlvbiBwb2ludCku
CisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2Rl
LT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdl
dENhc2UubWV0aG9kKCkua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEludmFsaWQ6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6IC8vIE9LIGJlY2F1c2UgY29uc3Rh
bnRzIGFyZSBhbHdheXMgc2FmZSB0byBleGVjdXRlLgorICAgICAgICAgICAgY2FzZSBMb2FkOiAv
LyBPSyBiZWNhdXNlIHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGhhcyBpdHMgb3duIGNoZWNrcyBmb3Ig
bG9hZGluZyBmcm9tIHNlbGYuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIExvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgT0sgaWYgdGhl
IHN0YXRlIGlzbid0IGNsb2JiZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2UuCisg
ICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpICE9IFN0cnVj
dHVyZXNBcmVXYXRjaGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBlV2l0
aENoZWNrOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgcmFyZS4gV2UgZW1pdHRl
ZCBhbiBhY3R1YWwgY2hlY2sgaW4gSVIuIFdlIGRvbid0IGtub3cgaWYgdGhlCisgICAgICAgICAg
ICAgICAgLy8gc3RhdGUgcHJvdmVzIHRoZSBjaGVjayB0byBiZSBzdXBlcmZsdW91cy4gV2UgY291
bGQgY2hhbmdlIHRoaXMsIGJ1dCBpdCdzIGhhcmQKKyAgICAgICAgICAgICAgICAvLyBhbmQgcHJv
YmFibHkgbm90IHdvcnRoIGl0LgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3aWxs
IGVpdGhlcjoKLSAgICAgICAgICAgIC8vIC0gTm90IGxvYWQgZnJvbSB0aGUgcHJvdG90eXBlIGJl
Y2F1c2UgY29uc3RhbnQgZm9sZGluZyB3aWxsIHN1Y2NlZWQgaW4gdGhlCi0gICAgICAgICAgICAv
LyAgIGJhY2tlbmQsIG9yCi0gICAgICAgICAgICAvLyAtIEVtaXQgaW52YWxpZCBjb2RlIHRoYXQg
ZmFpbHMgd2F0Y2hwb2ludCBjaGVja3MuIFRoaXMgY291bGQgaGFwcGVuIGlmIHRoZQotICAgICAg
ICAgICAgLy8gICBwcm9wZXJ0eSBiZWNvbWVzIG11dGFibGUgYWZ0ZXIgdGhpcyBwb2ludCwgc2lu
Y2Ugd2UgYWxyZWFkeSBzZXQgdGhlIHdhdGNocG9pbnQKLSAgICAgICAgICAgIC8vICAgYWJvdmUu
IFRoaXMgY2FzZSBpcyBPSyBzaW5jZSB0aGUgY29kZSB3aWxsIGZhaWwgd2F0Y2hwb2ludCBjaGVj
a3MgYW5kIG5ldmVyCi0gICAgICAgICAgICAvLyAgIGdldCBpbnN0YWxsZWQuCiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zODcwLDI0ICszODcwLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBN
dWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEo
KTsKIAotICAgICAgICBpZiAoZGF0YS52YXJpYW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYg
KGRhdGEuY2FzZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3Qg
Y3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0IGxp
a2UgdGhhdC4KICAgICAgICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywg
Mj4gYmxvY2tzKGRhdGEudmFyaWFudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOwogICAgICAgICBM
QmFzaWNCbG9jayBleGl0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0
IGZhaWwiKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7CiAgICAgICAgIAog
ICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CiAgICAgICAgIFN0cnVjdHVyZVNl
dCBiYXNlU2V0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFy
aWFudHNbaV07Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50LnN0cnVjdHVy
ZVNldCgpLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKVtqXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZz
ZXRDYXNlIGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gZ2V0Q2FzZS5zZXQoKS5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlhbnQuc2V0KClbal07CiAgICAgICAgICAgICAgICAgYmFz
ZVNldC5hZGQoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNo
Q2FzZSh3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsK
ICAgICAgICAgICAgIH0KQEAgLTM4OTgsMjkgKzM4OTgsMzcgQEAgcHJpdmF0ZToKICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAg
ICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0
QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOworICAgICAgICAgICAgR2V0QnlP
ZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsKKyAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMu
c2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAg
IGJhc2VTZXQubWVyZ2UodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0OwotICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdDsKLSAgICAgICAg
ICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0
YW50UmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAg
ICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCks
IHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbnN0
YW50UmVzdWx0KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNW
YWx1ZTo6ZW5jb2RlKGNvbnN0YW50UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0Q2FzZTo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldENhc2U6OkNvbnN0YW50OgorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKG1l
dGhvZC5jb25zdGFudCgpLT52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0Q2FzZTo6TG9hZDoKKyAg
ICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRDYXNlOjpMb2FkRnJvbVByb3RvdHlwZToKKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXRDYXNlOjpMb2FkRnJvbVByb3RvdHlwZVdpdGhDaGVjazog
ewogICAgICAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eUJhc2UgPSB3ZWFrUG9pbnRlcih2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zm
c2V0Q2FzZTo6TG9hZCkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsK
LSAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0g
d2Vha1BvaW50ZXIobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KG1ldGhvZC5vZmZzZXQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBt
X2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9h
ZFByb3BlcnR5KHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9m
ZnNldCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJv
cGVydHkoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfSB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0
LmFuY2hvcihyZXN1bHQpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg3MzQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygK
ICAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0
KQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJl
c1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZHNJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkKICAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVy
dHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAg
IAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwpAQCAtMTMyLDQ3
ICsxMzIsMzAgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9
CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwq
IG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQorc3Rh
dGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAg
IGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5h
ZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykp
OwotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgLy8gSWYgd2Ug
ZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2Ug
ZXhwZWN0LiBBc3NlcnQKLSAgICAgICAgICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAg
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gYnJhbmNo
U3RydWN0dXJlKAotICAgICAgICAgICAgICAgIGppdCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5l
ZmZlY3RpdmVXYXRjaHBvaW50KTsKLSAgICAgICAgICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgICAg
IH0KKyAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkgeworICAgICAgICBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5h
ZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoCi0gICAgICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAg
c3RydWN0dXJlKSk7CisgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJl
KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBK
U1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3Rv
dHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5
cGUuaXNDZWxsKCkpOwotICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAg
ICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRj
aEdQUik7CitzdGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BS
KQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6
IHNldCkgeworICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAg
ICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2Ny
YXRjaEdQUik7CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRj
aEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQpAQCAtMjk2LDExICsyNzksMTIgQEAgc3Rh
dGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5l
cmF0ZUJ5SWRTdHViKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3Qg
Y291bnQsCisgICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFy
Z2V0RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwg
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29u
ZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpOworICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJl
ZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsK
ICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzMyArMzMw
LDI1IEBAIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50
eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQu
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRj
aHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaykpOwogCiAgICAgaWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNo
cG9pbnRTZXQtPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAg
U3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJv
dG9PYmplY3QgPSAwOwotICAgIGlmIChjaGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09i
amVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAg
ICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9w
ZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRj
aHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2Nr
LCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAg
fQotICAgICAgICBBU1NFUlQoIXByb3RvT2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUo
KSA9PSBjdXJyU3RydWN0dXJlKTsKLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMoCisgICAgICAgIGNvbmRpdGlvblNldCwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBm
YWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAgIAorICAgIFN0cnVjdHVyZSogY3VyclN0cnVj
dHVyZTsKKyAgICBpZiAoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgY3VyclN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKKyAgICBlbHNlCisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CiAgICAg
Y3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwg
b2Zmc2V0KTsKKyAgICAKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJS
ZWc7CiAgICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikg
eworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8v
IFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0
byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYg
KGxvYWRUYXJnZXRGcm9tUHJveHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwg
YmFzZUZvckdldEdQUik7CkBAIC02MjcsOSArNjAzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIGFjdGlvbkZvckNlbGwoVgogICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rp
b25hcnlPYmplY3Qodm0pOwogICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0K
LSAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAg
Ci0gICAgaWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBl
SW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0cnVj
dHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKIAogICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsKQEAgLTgyNywyMSArODAy
LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICB9CiAK
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZz
ZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVD
aGFpbiA9IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgCiAgICAgaWYgKHNsb3QuaXNVbnNldCgp
IHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgaWYgKHR5cGVJbmZv
LnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgICAgICBpZiAoc2xvdC5p
c1Vuc2V0KCkpCi0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4
ZWMsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eU1pc3MoZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9y
Q2hhaW5BY2Nlc3MoCi0gICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RC
YXNlKCksIGlkZW50LCBvZmZzZXQpOwotICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3Rv
dHlwZUNoYWluKQorICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQoZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCks
IGlkZW50LmltcGwoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAg
ICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7
CiAgICAgfQogICAgIAogICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0dWJJbmZvKTsKQEAgLTg1Miw3ICs4MjgsNyBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJ
ZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xv
dCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4
ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25k
aXRpb25TZXQsIG9mZnNldCwgCiAgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94
eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1Yklu
Zm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAtODcxLDcgKzg0Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJ
ZEFjY2VzcygKICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nl
c3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwg
Y291bnQpKTsKKyAgICAgICAgY29uZGl0aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9H
ZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAg
CkBAIC05OTMsMjYgKzk2OSwyOCBAQCBzdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9u
U3R1YkFuZEdldE9sZFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJl
KiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCkKK3N0YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUq
IGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgCisgICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1
cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJv
cGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1
Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJz
ZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNv
bmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQp
OwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVh
bGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBp
dCBoYXBwZW4uCiAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAg
ICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSkgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJl
YWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwpAQCAtMTAyMCwxNCArOTk4LDEzIEBAIHN0YXRp
YyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3Vs
ZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlm
IChub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpID09IEludmFsaWRQcm90
b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFp
biogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBlbWl0UHV0VHJhbnNpdGlvblN0dWIKKyAgICBp
ZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQu
aW1wbCgpKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVM
YWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4m
IHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CkBAIC0xMDgzLDE3ICsxMDYwLDgg
QEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCAKICAgICAgICAgb2xkU3RydWN0dXJlKSk7CiAgICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKAotICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAg
c2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0
KSB7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBl
Q2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAg
ICAgICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2hlY2tPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKQEAgLTEyMjgsNyAr
MTE5Niw3IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAK
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2Nr
KCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxU
b0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUp
KTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCkBAIC0xMjU2LDggKzEy
MjQsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAg
ICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLAogICAgICAgICAgICAgc3RydWN0dXJlKTsKLQotICAgIHJldHVybiBvbGRTdHJ1
Y3R1cmU7CisgICAgCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBw
dXRLaW5kKQpAQCAtMTI4MSwxMiArMTI0OSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90
LmlzQ2FjaGVhYmxlUHV0KCkpIHsKICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3Bl
cnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKIAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0s
IHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLSAgICAgICAgICAg
IGlmICghb2xkU3RydWN0dXJlKQorICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7
CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0Owor
ICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVy
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldCgKQEAgLTEyOTQsNyArMTI2MSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRj
aENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3By
aWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90
b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5p
dFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xk
U3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAg
ICB9CkBAIC0xMzEyLDIwICsxMjc5LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQKICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRT
cGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0g
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBj
b3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAg
ICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVj
LCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlm
IChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgK
KyAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBs
KCkpOworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAg
ICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwor
CiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAg
ICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5k
Rm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hh
aW4sIGNvdW50LAorICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3Rv
bUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgIG9mZnNldCwg
c3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSks
CiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKQEAgLTEzMzYsNyArMTMwNSw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgbGlzdC0+
YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0
ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRl
ciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1
c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTEzODAsMTcgKzEzNDksMTYgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVs
bCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBo
ZXJlIGR1ZSB0byByZWN1cnNpb24uCiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlID0gZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotCi0gICAg
ICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZTsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKKyAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKIAotICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1
YkluZm8uc3R1YlJvdXRpbmU7CiAgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAg
ICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAg
ICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsCiAgICAgICAgICAgICAg
ICAgICAgIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgfSBlbHNlIHsKQEAgLTE0MjMsMjEgKzEz
OTEsMjQgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgIGlm
ICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkK
ICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAg
ICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgICAgICBTdHJ1Y3R1
cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAg
ICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBz
bG90LmJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50
ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUs
IHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFp
bihleGVjKTsKLSAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
b2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdl
bmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0
eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwK
KyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9y
KHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1
Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgp
KSwKQEAgLTE0NDgsNyArMTQxOSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWls
ZFB1dEJ5SWQKICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigK
ICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAg
ICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1
dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90
eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOworICAg
ICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0
dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVC
bG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTE0ODcsMTEg
KzE0NTgsMTUgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0
cnVjdHVyZSgqdm0pOwogICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0g
ICAgSlNWYWx1ZSBmb3VuZFNsb3RCYXNlID0gd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBK
U1ZhbHVlKCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gIWZvdW5kU2xvdEJhc2UgfHwgZm91bmRTbG90
QmFzZSAhPSBiYXNlID8gCi0gICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5B
Y2Nlc3MoZXhlYywgc3RydWN0dXJlLCBmb3VuZFNsb3RCYXNlLCBpZGVudCwgb2Zmc2V0SWdub3Jl
ZCkgOiAwOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmICh3YXNGb3VuZCkg
eworICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAor
ICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5p
bXBsKCkpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50Lmlt
cGwoKSk7CisgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKICAgICAKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKQEAgLTE1MTYsNyArMTQ5MSw2IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lOwogICAgIAogICAgIHsKQEAgLTE1NDcsMTggKzE1MjEsOCBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50
U2V0KCkpCiAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0
dXJlID0gc3RydWN0dXJlOwotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBj
aGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSwgKytpdCkgewotICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1
cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1
Y3R1cmUqIHByb3RvU3RydWN0dXJlID0gcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAg
ICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBwcm90b3R5
cGUsIHByb3RvU3RydWN0dXJlLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQs
Ci0gICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
IGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0
Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1w
dXJlUHJvcGVydHkoaWRlbnQsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0g
ICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9CisgICAgICAg
IGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICAgICAgY29uZGl0aW9uU2V0
LCBleGVjLT5jb2RlQmxvaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lv
biAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZUNoYWluLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICA6IG1fZ2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKLXsK
LSAgICBBU1NFUlQobV9wcm90b3R5cGUuaXNOdWxsKCkgfHwgbV9wcm90b3R5cGUuaXNPYmplY3Qo
KSk7Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZv
ciAoU3RydWN0dXJlKiBjdXJyZW50ID0gYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkK
LSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogaGVhZCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkK
LSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVj
dCkpCi17Ci0gICAgaWYgKG1fcHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChtX3Byb3RvdHlwZSktPnN0cnVj
dHVyZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0
dXJlKCkpCi0gICAgICAgIG1fdmVjdG9yLmFwcGVuZChjdXJyZW50KTsKLX0KLQotSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKLSAgICA6
IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3Rv
dHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIG1f
dmVjdG9yLmFwcGVuZChwcm90b3R5cGVTdHJ1Y3R1cmUpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKLSAgICA6IG1fZ2xvYmFsT2JqZWN0
KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90
b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGNoYWluLT5oZWFkKClbaV07ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWlu
LT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQpCi0gICAgOiBtX2dsb2JhbE9iamVj
dChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJv
dG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFk
KClbaV0uZ2V0KCkpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbigpCi17Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGls
bFZhbGlkKCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3Rv
dHlwZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAh
PSBtX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVu
dFByb3RvdHlwZSA9IG1fdmVjdG9yW2ldLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBj
aGFpbi0+aGVhZCgpW2ldLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAoY2hhaW4tPmhlYWQoKVttX3ZlY3Rvci5zaXplKCldKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6bWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3Zl
Y3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCi17Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92ZWN0b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRh
a2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0
aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjp0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rvci5p
c0VtcHR5KCkpOwotICAgIGlmIChtX3ZlY3Rvci5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJu
IGFzT2JqZWN0KG1fcHJvdG90eXBlKTsKLSAgICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92
ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0b3JlZFByb3RvdHlwZSgpKTsKLX0KLQotYm9vbCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjpvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4m
IG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2ds
b2JhbE9iamVjdAotICAgICAgICAmJiBtX3Byb3RvdHlwZSA9PSBvdGhlci5tX3Byb3RvdHlwZQot
ICAgICAgICAmJiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjpnYXRoZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgdmVjdG9yKSBjb25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJv
dG90eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAg
ICAgICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUp
OwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAgICAg
dmVjdG9yLmFwcGVuZChDb25zdGFudFN0cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJl
bnRTdHJ1Y3R1cmUpKTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1Y3R1
cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCk7Ci0gICAgfQotfQotCi12b2lk
IEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFsT2Jq
ZWN0KTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJm1fcHJvdG90eXBlKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCi0gICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZvaWQg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewot
ICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihnbG9iYWwgPSAiLCBSYXdQb2lu
dGVyKG1fZ2xvYmFsT2JqZWN0KSwgIiwgaGVhZCA9ICIsCi0gICAgICAgIGluQ29udGV4dChtX3By
b3RvdHlwZSwgY29udGV4dCksICIsIHZlY3RvciA9IFsiKTsKLSAgICBDb21tYVByaW50ZXIgY29t
bWE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKQot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9yW2ld
LCBjb250ZXh0KSk7Ci0gICAgb3V0LnByaW50KCJdKSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZpbmUg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCi0KLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNo
ZWNrLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFs
T2JqZWN0OwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1wQ29u
dGV4dDsKLQotY2xhc3MgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVk
PEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHsKLXB1YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKTsK
LSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSopOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOwot
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgdW5zaWduZWQgY291bnQpOwotICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7
Ci0gICAgCi0gICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMo
U3RydWN0dXJlQ2hhaW4qKSBjb25zdDsKLSAgICBib29sIG1heUludGVyY2VwdFN0b3JlVG8oVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgYm9vbCBpc05vcm1hbGl6ZWQoKTsKLSAgICAKLSAg
ICBib29sIHRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCk7Ci0gICAgCi0gICAg
SlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAgIAot
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0gICAg
U3RydWN0dXJlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4
XTsgfQotICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGF0KGluZGV4KTsgfQotICAgIAotICAgIEpTT2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlwZSgp
IGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVj
dG9yLmxhc3QoKTsgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVuZGVk
U3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGdhdGhlckNoZWNrcyhDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0g
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
LSAgICAKLXByaXZhdGU6Ci0gICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotICAg
IEpTVmFsdWUgbV9wcm90b3R5cGU7Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9yOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShy
ZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCwxOSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVE
aWN0aW9uYXJ5S2luZDsgfQogICAgIGJvb2wgaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSBjb25z
dCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpID09IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQ7IH0K
ICAgCi0gICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgeyByZXR1cm4gZGlj
dGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kICYmICF0eXBlSW5mbygpLnBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZygpOyB9CisgICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJl
Q2FjaGVhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVu
Y2FjaGVkRGljdGlvbmFyeUtpbmQKKyAgICAgICAgICAgICYmICF0eXBlSW5mbygpLnByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZygpCisgICAgICAgICAgICAmJiAhKHR5cGVJbmZvLmhhc0ltcHVyZUdl
dE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0
Y2hwb2ludHMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpCisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpCisgICAgICAgICAgICAmJiB0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNs
b3QoKQorICAgICAgICAgICAgJiYgdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNo
cG9pbnRzKCk7CisgICAgfQogCiAgICAgLy8gV2UgdXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0
dXMgZm9yIHN0cnVjdHVyZXMgdGhhdCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRl
ciB0byBwcmV2ZW50CiAgICAgLy8gREZHIGZyb20gaW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMg
c2luY2Ugc3RydWN0dXJlcyBkb24ndCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3Bl
cnR5IGFwcGVhcnMuCkBAIC0yMDIsNyArMjE0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQot
CisgICAgCiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBj
b25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJu
IG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzNiw2ICs1MzYsNyBA
QCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwog
CiAgICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVu
dGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAgIAogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3Ry
aW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257484</attachid>
            <date>2015-07-24 15:16:11 -0700</date>
            <delta_ts>2015-07-27 14:46:22 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>229411</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODczNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01ODgsNiArNTkwLDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2
MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIy
MTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNG
RjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmNwcCAqLzsgfTsKKwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuY3BwICovOyB9OworCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9w
ZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJG
MDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5NCw2ICs3MDQsOCBA
QAogCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5
NkIgLyogREZHRWRnZS5jcHAgKi87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmNwcCAqLzsgfTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjRCNTIyMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBG
RjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZG
IC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4
RUJENTgwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8q
IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlG
RiAvKiB1ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICov
OyB9OwpAQCAtMTM4OSw4ICsxNDAxLDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8q
IFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NC
QzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMx
OEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8q
IFNwaWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cCAqLzsgfTsKLQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFs
aXplci5oICovOyB9OwogCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5
NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg1Myw2
ICsxODYzLDggQEAKIAkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0Qg
LyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFC
NDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdN
aW5pZmllZEdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Qx
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBk
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVG
MCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
SmV0dGlzb25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkx
OEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM0
NCw2ICsyMzU2LDE0IEBACiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFM0ZGMUI2MThB
QUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZn
L0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQzRTQwNDFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9w
ZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2
QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdC
YXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFD
RjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21p
bmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NDUsNiArMjQ2NSw4IEBACiAJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9
IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0Rjgx
QUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDVBMUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBwYXRoID0gZGZn
L0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzMwMTU4
RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fz
c2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfZGVjb2RlLmM7IHBhdGggPSBkaXNhc3Nl
bWJsZXIvdWRpczg2L3VkaXM4Nl9kZWNvZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMxNTUsOCArMzE3Nyw2IEBACiAJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQ
YXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4
NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZDMTc5NzM4QjgwMDlERjc0NCAvKiBERkdG
YWlsZWRGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRmFpbGVkRmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RDE3OTczOEI4MDA5REY3NDQg
LyogREZHRmFpbGVkRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ZhaWxlZEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RTE3OTczOEI4MDA5REY3NDQgLyog
REZHRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0ZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0ODMsOCArNDUwMyw2IEBACiAJCQkJQTdBOEFGMkIxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLywKLQkJCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCi0JCQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUg
LyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAwODA2NkRE
IC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMTJCQkZGMzFCMDQ0QTk4MDA2NjRCNjkg
LyogSW50bE9iamVjdC5jcHAgKi8sCkBAIC00ODY3LDYgKzQ4ODUsMTAgQEAKIAkJCQlBNzA0RDhG
RjE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCAqLywK
IAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8s
CiAJCQkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLywK
KwkJCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8sCisJCQkJ
MEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAgKi8sCisJCQkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggKi8sCiAJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0FsbG9jYXRvci5oICovLAogCQkJCUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFs
eXNpcy5oICovLApAQCAtNTAyNiw2ICs1MDQ4LDggQEAKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCiAJCQkJMEY4RjE0MzExQURGMDkwMTAwRUQ3
OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwICovLAogCQkJCTBGOEYxNDMyMUFERjA5
MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCisJCQkJMEZGMkNENTkx
QjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKKwkJCQkw
RkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywK
IAkJCQkwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCAq
LywKIAkJCQkwRkMzQ0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmgg
Ki8sCiAJCQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8sCkBAIC01MzMxLDYgKzUzNTUsMTAgQEAKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0ExNEY1
QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkx
NENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLywK
KwkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwICovLAorCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oICovLAorCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCisJCQkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8sCiAJCQkJOTY5QTA3OTQwRUQxRDNBRTAw
RjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8q
IE9wY29kZS5oICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5o
ICovLApAQCAtNTM0Miw2ICs1MzcwLDggQEAKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0
MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUzN0Yw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKKwkJCQkwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLAorCQkJCTBGRDNFNDA4MUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGOTMzMjk5MTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCkBAIC01ODQxLDYgKzU4NzEsNyBAQAogCQkJ
CUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRDQjlGRiAvKiBERkdEaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBF
MUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUz
NENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
LApAQCAtNjA5Myw2ICs2MTI0LDcgQEAKIAkJCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyog
Q29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4ODE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRj
aGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERG
R011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0
NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjEwMiw3ICs2MTM0LDYgQEAKIAkJCQlBN0E4
QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAotCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJu
YWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5
IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAx
MTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMTUsNiArNjE0Niw3IEBA
CiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjQxMSw5ICs2NDQzLDExIEBACiAJCQkJMkFBRDk2
NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0Nh
bGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyog
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThC
NDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0Iy
MjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIx
QjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1h
dGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcw
ODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NDkwLDYgKzY1MjQsNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEg
LyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFD
MTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Bo
aUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYg
LyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MjgxLDYgKzczMTYsNyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlD
b25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJB
IC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1
MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3
ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTcyOTEsNiArNzMyNyw3IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZU
TExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3
RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZG
MkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3
MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNDEsNiArNzM3OCw3IEBA
CiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2Vu
dFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM1MSw3ICs3Mzg5LDYgQEAKIAkJ
CQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAw
QkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNG
OTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJw
cmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8q
IEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNjgsNiArNzQwNSw3
IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82
NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nl
c3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjE1LDYgKzc2NTMs
NyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWlu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwQjFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzAxM0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4RiAv
KiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MjQsNiArNzY2Myw3
IEBACiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRl
bXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE4RDNDRjFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJh
dG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ6OmZpcgogICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAKICAgICBtX2NvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgcmVtb3ZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBs
ZXhHZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKICAgICAvLyBo
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0CkBAIC00
MCwzMiArNDAsMjYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdQog
ICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
OworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAogICAg
IENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJbmxpbmVhYmxl
OwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAgIHJlc3VsdC5t
X2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3VudCkpOworICAg
IGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJlc3VsdC5tX2No
YWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25kaXRpb25TZXQu
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4gc2tpcCgpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWluLT50YWtlc1Ns
b3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRha2Vz
U2xvd1BhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0g
cmVzdWx0Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSog
Y3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAgICAgIAotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOworICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0
eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmli
dXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7Ci0gICAgfQor
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAg
ICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3MzQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKICNkZWZp
bmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3RhdHVzKCkKICAg
ICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zm
c2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAgICAgfQogICAg
IApAQCAtOTcsMjEgKzk2LDE3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIENv
bXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAg
ICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KLSAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmlj
VmFsdWU7IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFpbi5nZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAog
cHJpdmF0ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
LSAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7
Ci0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYs
OCArMjA2LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJ
ZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVj
dHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4o
KSwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVz
Lm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlv
blNldCgpLCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAg
ICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQp
Ci0gICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNv
bmRpdGlvblNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0
dXMoV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAgLTQ0LDEzICs0NSw4IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7CiAgICAgfQotICAgIAotICAgIGlm
IChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNo
YWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1f
Y29uc3RhbnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRC
eUlkVmFyaWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBA
IEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50
JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikK
IHsKICAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29u
c3RhbnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFz
ZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1f
Y29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1h
a2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03
MiwxNiArNjcsNiBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZhcmlhbnQ6OmJhc2VT
dHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KIGJvb2wg
R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhl
cikKIHsKICAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZSkK
QEAgLTkwLDEwICs3NSwxMyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFh
cmVDb21wYXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldCA9
CisgICAgICAgIG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQp
OworICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2Nv
bnN0YW50Q2hlY2tzKTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTIsOCArMTAwLDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
IlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsK
KyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBpZiAobV9hbHRlcm5hdGVC
YXNlKQogICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChK
U1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3
ICsyOCw2IEBACiAKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkNvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC00Myw3ICs0Miw3IEBAIGNsYXNzIEdldEJ5SWRW
YXJpYW50IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKLSAgICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4gPSBudWxscHRyLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0gbnVsbHB0cik7CiAgICAg
CiAgICAgfkdldEJ5SWRWYXJpYW50KCk7CkBAIC01NSw5ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7
IH0KICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJl
U2V0OyB9Ci0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRD
aGVja3MoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3Qq
IGFsdGVybmF0ZUJhc2UoKSBjb25zdCB7IHJldHVybiBtX2FsdGVybmF0ZUJhc2U7IH0KLSAgICBT
dHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OworCisgICAgLy8gVGhlIHByZXNlbmNl
IG9mIGEgY29uZGl0aW9uIHNldCBtZWFucyB0aGF0IHRoaXMgaXMgYSBwcm90b3R5cGUgbG9hZC4K
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29u
c3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIENhbGxMaW5rU3RhdHVzKiBj
YWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0K
ICAgICAKQEAgLTcwLDggKzcwLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgR2V0QnlJ
ZFN0YXR1czsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0
KiBtX2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25k
aXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7
CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludChpbkNvbnRleHQoSlNWYWx1
ZShtX29iamVjdCksIGNvbnRleHQpLCAiOiAiLCBpbkNvbnRleHQobV9jb25kaXRpb24sIGNvbnRl
eHQpKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKwor
Ym9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydXR1cmUqIHN0cnVjdHVyZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6c3RydXRjdXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9v
bCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
b25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1
cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVz
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJl
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJl
LCBtX29iamVjdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxW
YWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5
KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5p
c1N0aWxsVmFsaWQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6c3RydWN0dXJlRW5zdXJlc1ZhaWRpdHkoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJlRW5zdXJlc1Zh
bGlkaXR5KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlD
b25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dhdGNoYWJs
ZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5
RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpLCBlZmZvcnQpOworfQorCitib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxlKHN0cnVjdHVyZSwgZWZmb3J0
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoUHJvcGVy
dHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYg
KCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNo
YWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29i
amVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9jb25kaXRp
b24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFs
aWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkKSBjb25zdAor
eworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0cmFja2VkLmNo
ZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tl
ZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNs
dWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZl
cmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikK
KyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAgICB7CisgICAgfQorICAgIAorICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAs
IG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBK
U09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAg
ICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlV2l0
aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOyAKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHBy
ZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3Qs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1
aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJv
cGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpT
T2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5
cGUpCisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAg
IHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZT
ZXR0ZXJXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2Jq
ZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6YWJz
ZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2Jq
ZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJl
dHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgcHJvdG90eXBl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2
YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsK
KyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxl
bmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5j
ZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0
QmFycmllcihvYmplY3QsIHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbmRpdGlvbjsgfTsKKyAgICAKKyAgICBKU09iamVj
dCogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBQcm9wZXJ0eUNvbmRp
dGlvbiBjb25kaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvbjsgfQorICAgIAorICAg
IFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24o
KS5raW5kKCk7IH0KKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkudWlkKCk7IH0KKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IGNvbmRpdGlvbigpLmhhc09mZnNldCgpOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkub2Zmc2V0KCk7IH0KKyAgICB1bnNpZ25lZCBoYXNB
dHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzQXR0cmlidXRlcygpOyB9
CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmF0
dHJpYnV0ZXMoKTsgfQorICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29u
ZGl0aW9uKCkuaGFzUHJvdG90eXBlKCk7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29u
c3QgeyByZXR1cm4gY29uZGl0aW9uKCkucHJvdG90eXBlKCk7IH0KKyAgICBib29sIGhhc1JlcXVp
cmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNSZXF1aXJlZFZhbHVlKCk7
IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24o
KS5yZXF1aXJlZFZhbHVlKCk7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURjo6UHRySGFzaDxKU09iamVjdCo+OjpoYXNoKG1fb2JqZWN0KSArIG1fY29uZGl0
aW9uLmhhc2goKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X29iamVjdCA9PSBvdGhlci5tX29iamVjdAorICAgICAgICAgICAgJiYgbV9jb25kaXRpb24gPT0g
b3RoZXIubV9jb25kaXRpb247CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2Nv
bmRpdGlvbi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBU
d28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYg
dGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcyBvcgorICAgIC8vIGRpZmZlcmVudCBvYmplY3Rz
LiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0byByZXNvbHZl
IHRoZSBjb25mbGljdCAtCisgICAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlcmUgaXMgYSBQcmVzZW5j
ZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3YW50IHRoZQor
ICAgIC8vIG1vcmUgZ2VuZXJhbCBvZiB0aGUgdHdvIHdoaWxlIGluIG90aGVyIGNhc2VzIHlvdSds
bCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRoaXMKKyAgICAvLyB3aWxsIGFs
c28gcmV0dXJuIGZhbHNlIGZvciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5jZSBhbmQgQWJz
ZW5jZSBvbiB0aGUgc2FtZQorICAgIC8vIG9iamVjdC91aWQuIEJ5IGNvbnZlbnRpb24sIGludmFs
aWQgY29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wg
aXNDb21wYXRpYmxlV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzIHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90
aGVyLnVpZCgpIHx8IG9iamVjdCgpICE9IG90aGVyLm9iamVjdCgpOworICAgIH0KKyAgICAKKyAg
ICAvLyBUaGVzZSB2YWxpZGl0eS1jaGVja2luZyBtZXRob2RzIGNhbiBvcHRpb25hbGx5IHRha2Ug
YSBTdHJ1dHVyZSogaW5zdGVhZCBvZiBsb2FkaW5nIHRoZQorICAgIC8vIFN0cnVjdHVyZSogZnJv
bSB0aGUgb2JqZWN0LiBJZiB5b3UncmUgaW4gdGhlIGNvbmN1cnJlbnQgSklULCB0aGVuIHlvdSBt
dXN0IHVzZSB0aGUgZm9ybXMKKyAgICAvLyB0aGF0IHRha2UgYW4gZXhwbGljaXQgU3RydWN0dXJl
KiBiZWNhdXNlIHlvdSB3YW50IHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBmb3IgdGhlIHNhbWUK
KyAgICAvLyBzdHJ1Y3R1cmUgdGhhdCB5b3UgdmFsaWRhdGVkIChpLmUuIGF2b2lkIGEgVE9DVE9V
IHJhY2UpLgorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJlIGNs
YWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4gVmFsaWRpdHkKKyAg
ICAvLyBkb2VzIG5vdCByZXF1aXJlIHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QuCisgICAgYm9v
bCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5z
dXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVj
dHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgdmFsaWRpdHlSZXF1
aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworCisgICAgLy8gQ2hlY2tzIGlm
IHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFs
c2UsIGlmIHRoZSBvYmplY3QgYW5kCisgICAgLy8gc3RydWN0dXJlIGFsb25lIGRvbid0IGd1YXJh
bnRlZSB0aGUgY29uZGl0aW9uLiBOb3RlIHRoYXQgdGhpcyBtYXkgcmV0dXJuIHRydWUgaWYgdGhl
CisgICAgLy8gY29uZGl0aW9uIHN0aWxsIHJlcXVpcmVzIHNvbWUgd2F0Y2hwb2ludHMgb24gdGhl
IG9iamVjdCBpbiBhZGRpdGlvbiB0byBjaGVja2luZyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIElm
IHlvdSB3YW50IHRvIGNoZWNrIGlmIHRoZSBjb25kaXRpb24gaG9sZHMgYnkgdXNpbmcgdGhlIHN0
cnVjdHVyZSBhbG9uZSwKKyAgICAvLyB1c2Ugc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkuCisg
ICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBpc1N0aWxs
VmFsaWQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBTaG9ydGhhbmQgZm9yIGNvbmRpdGlvbigpLmlz
U3RpbGxWYWxpZChzdHJ1Y3R1cmUpLgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5
KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkg
Y29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5k
IHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAv
LyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9w
ZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25k
aXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFu
Z2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQg
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisKKyAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0
eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVj
dHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLAorICAgICAg
ICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRp
b246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIGJvb2wgaXNXYXRjaGFibGUoCisgICAgICAg
IFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlv
bjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVz
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNvbmRpdGlvbigpLndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludCgpOworICAgIH0KKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNo
cG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbigpLndhdGNoaW5n
UmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhp
cyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUu
CisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVS
ZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgSlNPYmplY3QqIG1fb2JqZWN0OworICAgIFByb3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9u
OworfTsKKworc3RydWN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1
cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6T2JqZWN0UHJvcGVy
dHlDb25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0Ojpmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBp
ZiAoY29uZGl0aW9uLm9iamVjdCgpID09IG9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBjb25k
aXRpb247CisgICAgfQorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworfQor
CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9y
Q29uZGl0aW9uS2luZCgKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKSBjb25zdAor
eworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0
aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IGtpbmQpCisgICAgICAgICAg
ICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWduZWQgbnVtRm91bmQgPSAwOworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAg
ICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkg
eworICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOworICAgICAgICAgICAgbnVtRm91bmQr
KzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChudW1Gb3VuZCA9PSAxKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjphcmVDb21wYXRpYmxlKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikg
Y29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSB8fCAhb3RoZXIuaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
YSA6ICp0aGlzKSB7CisgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGIgOiBvdGhlcikgeworICAgICAgICAgICAgaWYgKCFhLmlzQ29tcGF0aWJsZVdpdGgoYikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6bWVyZ2VkV2l0aCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKworICAgIFZlY3RvcjxPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbj4gcmVzdWx0OworICAgIAorICAgIGlmICghaXNFbXB0eSgpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kVmVjdG9yKG1fZGF0YS0+dmVjdG9yKTsKKyAgICAKKyAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBuZXdDb25kaXRpb24gOiBvdGhlcikgeworICAg
ICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBleGlzdGluZ0NvbmRpdGlv
biA6ICp0aGlzKSB7CisgICAgICAgICAgICBpZiAoIW5ld0NvbmRpdGlvbi5pc0NvbXBhdGlibGVX
aXRoKGV4aXN0aW5nQ29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW52YWxpZCgp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdDb25kaXRpb24pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIG5vbkVtcHR5KHJlc3VsdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAg
ICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9u
LnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLnZhbGlkaXR5
UmVxdXJpZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmFyZVN0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFj
b25kaXRpb24uaXNTdGlsbExpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxp
ZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoIlsiKTsK
KyAgICBpZiAobV9kYXRhKQorICAgICAgICBvdXQucHJpbnQobGlzdER1bXBJbkNvbnRleHQobV9k
YXRhLT52ZWN0b3IsIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworbmFtZXNwYWNlIHsKKwor
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisgICAgVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQ
cm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7Cisg
ICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBp
bnZhbGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
KCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2Uodm0s
IG93bmVyLCBvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgY2Fz
ZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXR1cm4gT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwg
dWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAg
IGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcigKKyAgICAgICAgICAg
IHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3Rv
dHlwZSgpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cisg
ICAgfQorfQorCitlbnVtIENvbmN1cnJlbmN5IHsKKyAgICBNYWluVGhyZWFkLAorICAgIENvbmN1
cnJlbnQKK307CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnMo
CisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kLAorICAgIENvbmN1
cnJlbmN5IGNvbmN1cnJlbmN5ID0gTWFpblRocmVhZCkKK3sKKyAgICBBU1NFUlQoISFwcm90b3R5
cGUgPT0gKGNvbmRpdGlvbiA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpKTsKKyAgICAK
KyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IGNvbmRpdGlvbnM7CisgICAgCisg
ICAgZm9yICg7OykgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCisgICAgICAg
ICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAg
ICAgCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1
cChnbG9iYWxPYmplY3QpOworICAgICAgICAKKyAgICAgICAgaWYgKHYuaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgIGlmICghcHJvdG90eXBlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPih2KTsKKyAgICAgICAgc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAg
ICAgICAKKyAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIHJlcGVh
dGVkbHksIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0IHNob3VsZCBub3QgYmUKKyAgICAgICAgLy8g
dHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKSB7CisgICAgICAgICAgICBpZiAoY29uY3VycmVuY3kgPT0gTWFpblRocmVhZCkKKyAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBv
YmplY3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQgdGhpc0NvbmRpdGlvbktpbmQ7CisgICAg
ICAgIGlmIChraW5kID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSAmJiBvYmplY3QgIT0g
cHJvdG90eXBlKQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBQcm9wZXJ0eUNvbmRp
dGlvbjo6QWJzZW5jZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktp
bmQgPSBraW5kOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbmV3
Q29uZGl0aW9uID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2Jq
ZWN0LCB1aWQsIHRoaXNDb25kaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFuZXdDb25kaXRpb24g
fHwgIW5ld0NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpp
bnZhbGlkKCk7CisgICAgICAgIAorICAgICAgICBjb25kaXRpb25zLmFwcGVuZChuZXdDb25kaXRp
b24pOworICAgICAgICAKKyAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUpCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdC4KKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTog
eworICAgICAgICB1bnNpZ25lZCBwcmVzZW5jZUNvdW50ID0gMDsKKyAgICAgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0aW9ucykgeworICAg
ICAgICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFBy
b3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgICAgICBwcmVzZW5jZUNvdW50
Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29u
ZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByZXNlbmNlQ291
bnQgPT0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlv
bnMpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IGtpbmQp
OworICAgIH0gfQorICAgIAorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
bm9uRW1wdHkoY29uZGl0aW9ucyk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1p
c3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4g
Z2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0
eUNvbmRpdGlvbjo6QWJzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisg
ICAgICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0
dXJlLCBudWxscHRyLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZT
ZXR0ZXIpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5
cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVD
b25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0
aW9uOjpQcmVzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25z
KAorICAgICAgICB2bSwgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0LCBoZWFkU3RydWN0dXJlLCBudWxs
cHRyLCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlY2VPZlNldHRlciwKKyAgICAgICAgQ29u
Y3VycmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3Qg
cHJvcGVydHkgY29uZGl0aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFk
ZGl0aW9uYWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFw
IGFjY2VzcyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBp
bnRlcmVzdGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNv
bmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2Vz
cyBpcyBuZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0KCkgeyB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGlu
dmFsaWQoKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBub25FbXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
JiB2ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9k
YXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJlc3VsdC5tX2RhdGEtPnZlY3Rv
ciA9IHZlY3RvcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhIHx8ICFtX2Rh
dGEtPnZlY3Rvci5pc0VtcHR5KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YTsKKyAgICB9CisgICAgCisgICAgdHlw
ZWRlZiBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiogaXRlcmF0b3I7CisgICAgCisgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmJl
Z2luKCk7CisgICAgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
bV9kYXRhLT52ZWN0b3IuZW5kKCk7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGZvck9iamVjdChKU09iamVjdCogb2JqZWN0KSBjb25zdDsKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBmb3JDb25kaXRpb25LaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kKSBj
b25zdDsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGlzIGEgY29uZGl0aW9uIHNldCBmb3IgYSBwcm90
b3R5cGUgaGl0LCB0aGVuIHRoaXMgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlCisgICAgLy8g
Y29uZGl0aW9uIG9uIHRoZSBwcm90b3R5cGUgaXRzZWxmLiBUaGlzIGFsbG93cyB5b3UgdG8gZ2V0
IHRoZSBvYmplY3QsIG9mZnNldCwgYW5kCisgICAgLy8gYXR0cmlidXRlcyBmb3IgdGhlIHByb3Rv
dHlwZS4gVGhpcyB3aWxsIFJFTEVBU0VfQVNTRVJUIHRoYXQgdGhlcmUgaXMgZXhhY3RseSBvbmUg
UHJlc2VuY2UKKyAgICAvLyBpbiB0aGUgc2V0LCBhbmQgaXQgd2lsbCByZXR1cm4gdGhhdCBwcmVz
ZW5jZS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBzbG90QmFzZUNvbmRpdGlvbigpIGNv
bnN0OworICAgIAorICAgIC8vIFR3byBjb25kaXRpb24gc2V0cyBhcmUgY29tcGF0aWJsZSBpZiB0
aGV5IGFyZSBib3RoIHZhbGlkIGFuZCBlYWNoIGNvbmRpdGlvbiBpbiAqdGhpcyBpcworICAgIC8v
IGNvbXBhdGlibGUgd2l0aCBlYWNoIGNvbmRpdGlvbiBpbiBvdGhlci4KKyAgICBib29sIGFyZUNv
bXBhdGlibGVXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29u
c3Q7CisgICAgCisgICAgLy8gQXR0ZW1wdCB0byBjcmVhdGUgYSBuZXcgY29uZGl0aW9uIHNldCBi
eSBtZXJnaW5nIHRoaXMgb25lIHdpdGggdGhlIG90aGVyIG9uZS4gVGhpcyB3aWxsCisgICAgLy8g
ZmFpbCBpZiAhdGhpcy5hcmVDb21wYXRpYmxlV2l0aChvdGhlcikuIFdoZW4gaXQgZmFpbHMsIGl0
IHJldHVybnMgaW52YWxpZCgpLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdl
ZFdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdDsKKyAg
ICAKKyAgICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpIGNvbnN0OworICAgIGJvb2wg
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSBjb25zdDsKKyAgICAKKyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBj
b25zdDsKKyAgICBib29sIGFyZVN0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gSGVscGVycyBmb3IgdXNpbmcg
dGhpcyBpbiBhIHVuaW9uLgorICAgIHZvaWQqIHJlbGVhc2VSYXdQb2ludGVyKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4obV9kYXRhLmxlYWtSZWYoKSk7CisgICAg
fQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBhZG9wdFJhd1BvaW50ZXIo
dm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0
PERhdGEqPihyYXdQb2ludGVyKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBmcm9tUmF3UG9pbnRlcih2b2lkKiBy
YXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gc3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50
ZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
Ly8gSW50ZXJuYWxseSwgdGhpcyByZXByZXNlbnRzIEludmFsaWQgdXNpbmcgYSBwb2ludGVyIHRv
IGEgRGF0YSB0aGF0IGhhcyBhbiBlbXB0eSB2ZWN0b3IuCisgICAgCisgICAgLy8gRklYTUU6IFRo
aXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXBhY3QgYnkgaGF2aW5nIGl0IGludGVybmFsbHkgdXNl
IGEgdmVjdG9yIHRoYXQganVzdCBoYXMKKyAgICAvLyB0aGUgbm9uLXVpZCBwb3J0aW9uIG9mIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uLCBhbmQgdGhlbiByZXF1aXJpbmcgdGhhdCB0aGUgY2FsbGVy
cyBvZiBhbGwKKyAgICAvLyBvZiB0aGUgQVBJcyBzdXBwbHkgdGhlIHVpZC4KKyAgICAKKyAgICBj
bGFzcyBEYXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGE+IHsKKyAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YSk7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIERhdGEoKSB7IH0KKyAgICAgICAg
CisgICAgICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gdmVjdG9yOworICAgIH07
CisgICAgCisgICAgUmVmUHRyPERhdGE+IG1fZGF0YTsKK307CisKK09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAg
ICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0
cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE0ICsz
NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygK
ICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY2hhaW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCkKICAgICA6IG1fdHlwZSh0eXBlKQogICAgICwgbV9jaGFpbkNvdW50KGNoYWluQ291bnQpCiAg
ICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9u
U2V0KGNvbmRpdGlvblNldCkKICAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0g
ICAgaWYgKGNoYWluKQotICAgICAgICBtX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKIH0K
IAogR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQpAQCAtNzEsNyArNzAsNyBAQCBib29s
IEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiB7CiAgICAgaWYgKG1fc3RydWN0
dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQo
KSkpCisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc1N0aWxsTGl2ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsocmVwYXRjaEJ1ZmZl
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24g
MTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0
QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsMTMgKzUzLDEyIEBAIHB1YmxpYzoKICAgICAK
ICAgICBHZXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAg
LCBtX2NoYWluQ291bnQoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRBY2Nlc3Mo
CiAgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9IDAsIHVu
c2lnbmVkIGNoYWluQ291bnQgPSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgfkdl
dEJ5SWRBY2Nlc3MoKTsKICAgICAKQEAgLTcyLDggKzcxLDcgQEAgcHVibGljOgogICAgIAogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7
IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2No
YWluLmdldCgpOyB9Ci0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hhaW5Db3VudDsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJ
VFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtOTEsOSArODksOCBA
QCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAgQWNjZXNz
VHlwZSBtX3R5cGU7Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OwogICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFp
bj4gbV9jaGFpbjsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNl
dDsgLy8gRklYTUUgd2hhdCBhYm91dCBiYXJyaWVycz8KICAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IG1fc3R1YlJvdXRpbmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lv
biAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAg
UHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgICAgICByZXN1bHQu
bV90eXBlID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlG
cm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwogICAg
ICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHVi
SW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0
aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigKKyAg
ICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsK
ICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtNjQsNiArNjUsOSBAQCBQdXRCeUlkQWNjZXNzIFB1
dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAKIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFr
KFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBpZiAoIUhlYXA6
OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKQEAgLTc0LDE1ICs3OCwxMSBAQCBib29s
IFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KG1fY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFNldHRlcjoKICAgICBjYXNlIEN1c3RvbVNldHRlcjoKICAgICAgICAgaWYg
KCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWlu
LmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0
QnlJZExpc3QuaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTMsNyArNTMsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgUHV0QnlJZEFjY2VzcygpCiAgICAg
ICAgIDogbV90eXBlKEludmFsaWQpCi0gICAgICAgICwgbV9jaGFpbkNvdW50KFVJTlRfTUFYKQog
ICAgIHsKICAgICB9CiAgICAgCkBAIC02MiwxNCArNjEsMTQgQEAgcHVibGljOgogICAgICAgICBK
U0NlbGwqIG93bmVyLAogICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwK
KyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwK
ICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewog
ICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRy
YW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBv
bGRTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25l
ciwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwg
Y2hhaW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAg
ICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IDA7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJS
b3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05NSw4ICs5
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlLAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LAorICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCiAgICAgICAgIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKQEAgLTEwNCwxMCAr
MTAyLDcgQEAgcHVibGljOgogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAg
cmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgICAg
IHJlc3VsdC5tX3R5cGUgPSBhY2Nlc3NUeXBlOwotICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAg
ICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKLSAgICAgICAgICAg
IHJlc3VsdC5tX2NoYWluQ291bnQgPSBjaGFpbkNvdW50OwotICAgICAgICB9CisgICAgICAgIHJl
c3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3Vz
dG9tU2V0dGVyID0gY3VzdG9tU2V0dGVyOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9
IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ2LDE3ICsxNDEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAg
ICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAg
ICByZXR1cm4gbV9jaGFpbi5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhaW5D
b3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXR0ZXIoKSB8fCBpc0N1c3Rv
bSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY2hhaW5Db3VudDsKLSAgICB9CisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkg
Y29uc3QKICAgICB7CkBAIC0xNzgsOCArMTYzLDcgQEAgcHJpdmF0ZToKICAgICBBY2Nlc3NUeXBl
IG1fdHlwZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50Owor
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIG1fY3VzdG9tU2V0dGVyOwogICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gbV9zdHViUm91dGluZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
cm9wZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFByb3BlcnR5
Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8
aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQo
bV9raW5kLCAiIG9mICIsIG1fdWlkKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2Ug
UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmludCgiIGF0ICIsIG1fb2Zmc2V0LCAiIHdpdGggYXR0
cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYnNl
bmNlOgorICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRo
IHByb3RvdHlwZSAiLCBpbkNvbnRleHQoSlNPYmplY3QocHJvdG90eXBlKCkpLCBjb250ZXh0KSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJp
bnQoIiB3aXRoICIsIGluQ29udGV4dChKU1ZhbHVlOjplbmNvZGUocmVxdWlyZWRWYWx1ZSgpKSwg
Y29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisK
K2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSkg
Y29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQ
cmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9
IG9mZnNldCgpIHx8IGN1cnJlbnRBdHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEFic2VuY2U6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpICE9IGludmFsaWRPZmZzZXQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBjYXNlIEFi
c2VuY2VPZlNldHRlcjogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGN1
cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKCkpICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50QXR0cmli
dXRlcyAmIChBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZSgpICE9IHByb3RvdHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAgIGlmICghYmFzZSB8fCBiYXNlLT5zdHJ1Y3R1cmUo
KSAhPSBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIENvbnNlcnZhdGl2ZWx5IHJldHVybiBm
YWxzZSwgc2luY2Ugd2UgY2Fubm90IHZlcmlmeSB0aGlzIG9uZSB3aXRob3V0IGhhdmluZyB0aGUK
KyAgICAgICAgICAgIC8vIG9iamVjdC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc29tZXdoYXQgcmFjeSwg
YW5kIG1heWJlIG1vcmUgcmlza3kgdGhhbiB3ZSB3YW50LgorICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjQxCisgICAgICAgIAorICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKCkpOworICAgICAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IGJhc2UtPmdldERpcmVjdChj
dXJyZW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSByZXF1aXJlZFZhbHVl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToK
KyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICByZXR1cm4gc3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QKK3sKKyAgICBpZiAoIWlz
U3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgYmFz
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUg
dGhhdCBhbiBpbXB1cmUgcHJvcGVydHkgY2FuIGNhdXNlIGEgcHJvcGVydHkgdG8gYXBwZWFyLCBh
bmQgY2FuIGFsc28KKyAgICAvLyAic2hhZG93IiBhbiBleGlzdGluZyBKUyBwcm9wZXJ0eSBvbiB0
aGUgc2FtZSBvYmplY3QuIEhlbmNlIGl0IGFmZmVjdHMgYm90aCBwcmVzZW5jZSBhbmQKKyAgICAv
LyBhYnNlbmNlLiBJdCBkb2Vzbid0IGFmZmVjdCBBYnNlbmNlT2ZTZXR0ZXIgYmVjYXVzZSBpbXB1
cmUgcHJvcGVydGllcyBhcmVuJ3QgZXZlciBzZXR0ZXJzLgorICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFs
ZW5jZToKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Q
cm9wZXJ0eVNsb3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdoZW5WYWxpZCgK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29u
c3QKK3sKKyAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5J
bnZhbGlkYXRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoICht
X2tpbmQpIHsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHNvbWUgdmFy
aWFudCBvZiBpc1ZhbGlkIHJldHVybmVkIHRydWUsIHdoaWNoCisgICAgICAgIC8vIGltcGxpZXMg
dGhhdCB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBzdHJ1Y3R1cmUga25vd3Mgb2YgdGhl
IHByb3BlcnR5LiBXZSBzaG91bGQKKyAgICAgICAgLy8gYWxzbyBoYXZlIHZlcmlmaWVkIHRoYXQg
dGhlIFN0cnVjdHVyZSBpcyBhIGNhY2hlYWJsZSBkaWN0aW9uYXJ5LCB3aGljaCBtZWFucyB3ZQor
ICAgICAgICAvLyBzaG9sZG4ndCBoYXZlIGEgVE9DVE9VIHJhY2UgZWl0aGVyLgorICAgICAgICBS
RUxFQVNFX0FTU0VSVChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7CisgICAgICAgIAorICAgICAg
ICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgICAgIHN3aXRjaCAoZWZmb3J0KSB7CisgICAgICAg
IGNhc2UgTWFrZU5vQ2hhbmdlczoKKyAgICAgICAgICAgIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVy
dHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVuc3VyZVdhdGNoYWJpbGl0eToKKyAgICAgICAgICAgIHNldCA9IHN0cnVj
dHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoCisgICAgICAgICAgICAgICAg
KkhlYXA6OmhlYXAoc3RydWN0dXJlKS0+dm0oKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXNldC0+aXNTdGlsbFZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFi
bGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSwgYmFzZSkKKyAgICAgICAgJiYgaXNXYXRjaGFibGVXaGVuVmFsaWQoc3RydWN0
dXJlLCBlZmZvcnQpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVm
Zm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUs
IGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0
KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAorewor
ICAgIGlmIChoYXNQcm90b3R5cGUoKSAmJiAhSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKQor
ICAgICAgICAmJiByZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpLmlz
Q2VsbCgpCisgICAgICAgICYmICFIZWFwOjppc01hcmtlZChyZXF1aXJlZFZhbHVlKCkuYXNDZWxs
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2Vk
UmVmZXJlbmNlcyYgdHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkpCisg
ICAgICAgIHRyYWNrZWQuY2hlY2socHJvdG90eXBlKCkpOworICAgIAorICAgIGlmIChoYXNSZXF1
aXJlZFZhbHVlKCkpCisgICAgICAgIHRyYWNrZWQuY2hlY2socmVxdWlyZWRWYWx1ZSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBjb25k
aXRpb24pCit7CisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIEpTQzo6UHJvcGVy
dHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIlByZXNlbmNlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6
CisgICAgICAgIG91dC5wcmludCgiQWJzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgIG91dC5w
cmludCgiQWJzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjpFcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJFcXVpdmFsZW5jZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFByb3BlcnR5Q29uZGl0aW9uX2gKKyNkZWZpbmUgUHJv
cGVydHlDb25kaXRpb25faAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7
CisKK2NsYXNzIFByb3BlcnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgewor
ICAgICAgICBQcmVzZW5jZSwKKyAgICAgICAgQWJzZW5jZSwKKyAgICAgICAgQWJzZW5jZU9mU2V0
dGVyLAorICAgICAgICBFcXVpdmFsZW5jZSAvLyBBbiBhZGFwdGl2ZSB3YXRjaHBvaW50IG9uIHRo
aXMgd2lsbCBiZSBhIHBhaXIgb2Ygd2F0Y2hwb2ludHMsIGFuZCB3aGVuIHRoZSBzdHJ1Y3R1cmUg
dHJhbnNpdGlvbnMsIHdlIHdpbGwgc2V0IHRoZSByZXBsYWNlbWVudCB3YXRjaHBvaW50IG9uIHRo
ZSBuZXcgc3RydWN0dXJlLgorICAgIH07CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb24oKQor
ICAgICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKFByZXNlbmNlKQorICAg
IHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAgICAKKyAgICBQ
cm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAg
IDogbV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tpbmQoQWJzZW5jZSkKKyAgICB7CisgICAg
ICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFBy
b3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsK
KyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQg
PSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQcmVzZW5jZTsKKyAgICAgICAgcmVzdWx0
LnUucHJlc2VuY2Uub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXN1bHQudS5wcmVzZW5jZS5h
dHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYs
IEpTQ2VsbCosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
dW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIHJldHVybiBwcmVzZW5jZVdpdGhv
dXRCYXJyaWVyKHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcihVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlD
b25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBBYnNlbmNlOworICAgICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlw
ZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJu
IGFic2VuY2VXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcigK
KyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
dWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gQWJzZW5jZU9mU2V0dGVyOworICAg
ICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFi
c2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0
aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJv
cGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFByb3BlcnR5
Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICBy
ZXN1bHQubV9raW5kID0gRXF1aXZhbGVuY2U7CisgICAgICAgIHJlc3VsdC51LmVxdWl2YWxlbmNl
LnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5j
ZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gZXF1
aXZhbGVuY2VXaXRob3V0QmFycmllcih1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBQcmVz
ZW5jZTsgfTsKKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0K
KyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAg
ICAKKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5k
ID09IFByZXNlbmNlOyB9OworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaGFzT2Zmc2V0KCkpOworICAgICAgICByZXR1cm4gdS5wcmVzZW5j
ZS5vZmZzZXQ7CisgICAgfQorICAgIGJvb2wgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJu
ICEhKnRoaXMgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0F0dHJpYnV0ZXMoKSk7CisgICAg
ICAgIHJldHVybiB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAgIGJvb2wg
aGFzUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiAobV9raW5kID09IEFic2Vu
Y2UgfHwgbV9raW5kID09IEFic2VuY2VPZlNldHRlcik7IH0KKyAgICBKU09iamVjdCogcHJvdG90
eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNQcm90b3R5cGUoKSk7CisgICAg
ICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIGhh
c1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVp
dmFsZW5jZTsgfQorICAgIEpTVmFsdWUgcmVxdWlyZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaGFzUmVxdWlyZWRWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmRlY29kZSh1LmVxdWl2YWxlbmNlLnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IFdURjo6UHRySGFzaDxVbmlxdWVkU3Ry
aW5nSW1wbCo+OjpoYXNoKG1fdWlkKSArIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2tpbmQpOwor
ICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHUucHJlc2VuY2Uub2Zmc2V0OworICAgICAgICAgICAgcmVzdWx0ICs9
IHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFic2VuY2U6CisgICAgICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOgorICAgICAgICAgICAgcmVz
dWx0ICs9IFdURjo6UHRySGFzaDxKU09iamVjdCo+OjpoYXNoKHUuYWJzZW5jZS5wcm90b3R5cGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAg
ICAgICByZXN1bHQgKz0gRW5jb2RlZEpTVmFsdWVIYXNoOjpoYXNoKHUuZXF1aXZhbGVuY2UudmFs
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb3BlcnR5Q29uZGl0
aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3VpZCAhPSBvdGhlci5tX3Vp
ZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fa2luZCAhPSBvdGhl
ci5tX2tpbmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXR1cm4gdS5wcmVz
ZW5jZS5vZmZzZXQgPT0gb3RoZXIudS5wcmVzZW5jZS5vZmZzZXQKKyAgICAgICAgICAgICAgICAm
JiB1LnByZXNlbmNlLmF0dHJpYnV0ZXMgPT0gb3RoZXIudS5wcmVzZW5jZS5hdHRyaWJ1dGVzOwor
ICAgICAgICBjYXNlIEFic2VuY2U6CisgICAgICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOgorICAg
ICAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5wcm90b3R5cGUgPT0gb3RoZXIudS5hYnNlbmNlLnBy
b3RvdHlwZTsKKyAgICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1
LmVxdWl2YWxlbmNlLnZhbHVlID09IG90aGVyLnUuZXF1aXZhbGVuY2UudmFsdWU7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IEFic2VuY2U7
CisgICAgfQorICAgIAorICAgIC8vIFR3byBjb25kaXRpb25zIGFyZSBjb21wYXRpYmxlIGlmIHRo
ZXkgYXJlIGlkZW50aWNhbCBvciBpZiB0aGV5IHNwZWFrIG9mIGRpZmZlcmVudCB1aWRzLiBJZgor
ICAgIC8vIGZhbHNlIGlzIHJldHVybmVkLCB5b3UgaGF2ZSB0byBkZWNpZGUgaG93IHRvIHJlc29s
dmUgdGhlIGNvbmZsaWN0IC0gZm9yIGV4YW1wbGUgaWYgdGhlcmUgaXMKKyAgICAvLyBhIFByZXNl
bmNlIGFuZCBhbiBFcXVpdmFsZW5jZSB0aGVuIGluIHNvbWUgY2FzZXMgeW91J2xsIHdhbnQgdGhl
IG1vcmUgZ2VuZXJhbCBvZiB0aGUgdHdvCisgICAgLy8gd2hpbGUgaW4gb3RoZXIgY2FzZXMgeW91
J2xsIHdhbnQgdGhlIG1vcmUgc3BlY2lmaWMgb2YgdGhlIHR3by4gVGhpcyB3aWxsIGFsc28gcmV0
dXJuIGZhbHNlCisgICAgLy8gZm9yIGNvbnRyYWRpY3Rpb25zLCBsaWtlIFByZXNlbmNlIGFuZCBB
YnNlbmNlIG9uIHRoZSBzYW1lIHVpZC4gQnkgY29udmVudGlvbiwgaW52YWxpZAorICAgIC8vIGNv
bmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4KKyAgICBib29sIGlzQ29t
cGF0aWJsZVdpdGgoY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1aWQoKSAhPSBvdGhlci51aWQoKTsK
KyAgICB9CisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xh
aW1zIHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLgorICAgIGJvb2wgaXNT
dGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiwgSlNP
YmplY3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludCB0byBlbnN1cmUgdmFsaWRp
dHkgZXZlbiBpZgorICAgIC8vIGlzU3RpbGxWYWxpZEFjY29yZGluZ1RvU3RydWN0dXJlKCkgcmV0
dXJuZWQgdHJ1ZS4KKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBjb25k
aXRpb24gaXMgc3RpbGwgdmFsaWQgcmlnaHQgbm93IGZvciB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCBz
dHJ1Y3R1cmUuCisgICAgLy8gTWF5IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgaWYgdGhl
IG9iamVjdCBhbmQgc3RydWN0dXJlIGFsb25lIGRvbid0IGd1YXJhbnRlZSB0aGUKKyAgICAvLyBj
b25kaXRpb24uIFRoaXMgaGFwcGVucyBmb3IgYW4gQWJzZW5jZSBjb25kaXRpb24gb24gYW4gb2Jq
ZWN0IHRoYXQgbWF5IGhhdmUgaW1wdXJlCisgICAgLy8gcHJvcGVydGllcy4gSWYgdGhlIG9iamVj
dCBpcyBub3Qgc3VwcGxpZWQsIHRoZW4gYSAidHJ1ZSIgcmV0dXJuIGluZGljYXRlcyB0aGF0IGNo
ZWNraW5nIGlmCisgICAgLy8gYW4gb2JqZWN0IGhhcyB0aGUgZ2l2ZW4gc3RydWN0dXJlIGd1YXJh
bnRlZXMgdGhlIGNvbmRpdGlvbiBzdGlsbCBob2xkcy4gSWYgYW4gb2JqZWN0IGlzCisgICAgLy8g
c3VwcGxpZWQsIHRoZW4geW91IG1heSBuZWVkIHRvIHVzZSBzb21lIG90aGVyIHdhdGNocG9pbnRz
IG9uIHRoZSBvYmplY3QgdG8gZ3VhcmFudGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbiBpbiBhZGRp
dGlvbiB0byB0aGUgc3RydWN0dXJlIGNoZWNrLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVj
dHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAgLy8gSW4g
c29tZSBjYXNlcywgdGhlIGNvbmRpdGlvbiBpcyBub3Qgd2F0Y2hhYmxlLCBidXQgY291bGQgYmUg
bWFkZSB3YXRjaGFibGUgYnkgZW5hYmxpbmcgdGhlCisgICAgLy8gYXBwcm9wcmlhdGUgd2F0Y2hw
b2ludC4gRm9yIGV4YW1wbGUsIHJlcGxhY2VtZW50IHdhdGNocG9pbnRzIGFyZSBlbmFibGVkIG9u
bHkgd2hlbiBzb21lCisgICAgLy8gYWNjZXNzIGlzIGNhY2hlZCBvbiB0aGUgcHJvcGVydHkgaW4g
c29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgbWFpbmx5IHRvIHNhdmUgc3BhY2UgZm9yCisgICAgLy8g
ZGljdGlvbmFyeSBwcm9wZXJ0aWVzIG9yIHByb3BlcnRpZXMgdGhhdCBuZXZlciBnZXQgdmVyeSBo
b3QuIEJ1dCwgaXQncyBhbHdheXMgc2FmZSB0bworICAgIC8vIGVuYWJsZSB3YXRjaGluZywgcHJv
dmlkZWQgdGhhdCB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBlbnVt
IFdhdGNoYWJpbGl0eUVmZm9ydCB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZmF1bHQuIEl0
IG1lYW5zIHRoYXQgd2UgZG9uJ3QgY2hhbmdlIHRoZSBzdGF0ZSBvZiBhbnkgU3RydWN0dXJlIG9y
CisgICAgICAgIC8vIG9iamVjdCwgYW5kIGltcGxpZXMgdGhhdCBpZiB0aGUgcHJvcGVydHkgaGFw
cGVucyBub3QgdG8gYmUgd2F0Y2hhYmxlIHRoZW4gd2UgZG9uJ3QgbWFrZQorICAgICAgICAvLyBp
dCB3YXRjaGFibGUuIFRoaXMgaXMgbWFuZGF0b3J5IGlmIGNhbGxpbmcgZnJvbSBhIEpJVCB0aHJl
YWQuIFRoaXMgaXMgYWxzbyBzb21ld2hhdAorICAgICAgICAvLyBwcmVmZXJhYmxlIHdoZW4gZmly
c3QgZGVjaWRpbmcgd2hldGhlciB0byB3YXRjaCBhIGNvbmRpdGlvbiBmb3IgdGhlIGZpcnN0IHRp
bWUgKGkuZS4KKyAgICAgICAgLy8gbm90IGZyb20gYSB3YXRjaHBvaW50IGZpcmUgdGhhdCBjYXVz
ZXMgdXMgdG8gc2VlIGlmIHdlIHNob3VsZCBhZGFwdCksIHNpbmNlIGEKKyAgICAgICAgLy8gd2F0
Y2hwb2ludCBub3QgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHdhdGNoaW5nIGltcGxpZXMgdGhhdCBt
YXliZSB3ZSBkb24ndCBrbm93IGVub3VnaAorICAgICAgICAvLyB5ZXQgdG8gbWFrZSBpdCBwcm9m
aXRhYmxlIHRvIHdhdGNoIC0tIGFzIGluLCB0aGUgdGhpbmcgYmVpbmcgd2F0Y2hlZCBtYXkgbm90
IGhhdmUKKyAgICAgICAgLy8gc3RhYmlsaXplZCB5ZXQuIFdlIHByZWZlciB0byBvbmx5IGFzc3Vt
ZSB0aGF0IGEgY29uZGl0aW9uIHdpbGwgaG9sZCBpZiBpdCBoYXMgYmVlbgorICAgICAgICAvLyBr
bm93biB0byBob2xkIGZvciBhIHdoaWxlIGFscmVhZHkuCisgICAgICAgIE1ha2VOb0NoYW5nZXMs
CisgICAgICAgIAorICAgICAgICAvLyBEbyB3aGF0IGl0IHRha2VzIHRvIGVuc3VyZSB0aGF0IHRo
ZSBwcm9wZXJ0eSBjYW4gYmUgd2F0Y2hlZCwgaWYgZG9pbmcgc28gaGFzIG5vCisgICAgICAgIC8v
IHVzZXItb2JzZXJ2YWJsZSBlZmZlY3QuIEZvciBub3cgdGhpcyBqdXN0IG1lYW5zIHRoYXQgd2Ug
d2lsbCBlbnN1cmUgdGhhdCBhIHByb3BlcnR5CisgICAgICAgIC8vIHJlcGxhY2VtZW50IHdhdGNo
cG9pbnQgaXMgZW5hYmxlZCBpZiBpdCBoYWRuJ3QgYmVlbiBlbmFibGVkIGFscmVhZHkuIERvIG5v
dCB1c2UgdGhpcworICAgICAgICAvLyBmcm9tIEpJVCB0aHJlYWRzLCBzaW5jZSB0aGUgYWN0IG9m
IGVuYWJsaW5nIHdhdGNocG9pbnRzIGlzIG5vdCB0aHJlYWQtc2FmZS4KKyAgICAgICAgRW5zdXJl
V2F0Y2hhYmlsaXR5CisgICAgfTsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBz
dGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJh
bnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZSBhbmQgcG9zc2libHkg
YW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQuCisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVj
dCogYmFzZSA9IG51bGxwdHIsIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNv
bnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3
ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8g
d2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLgorICAgIGJvb2wgaXNXYXRjaGFibGUoCisgICAg
ICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZm
b3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgYm9vbCB3YXRjaGluZ1JlcXVp
cmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
Ly8gQ3VycmVudGx5LCB0aGlzIGlzIHJlcXVpcmVkIGZvciBhbGwgb2Ygb3VyIGNvbmRpdGlvbnMu
CisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKyAgICBib29sIHdhdGNoaW5nUmVxdWly
ZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEh
KnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgdGhlIG9iamVjdHMgaW52b2x2ZWQgaW4gdGhpcyBhcmUgc3RpbGwgbGl2ZS4K
KyAgICBib29sIGlzU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJl
ZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBib29sIGlzV2F0Y2hhYmxlV2hlblZhbGlkKFN0cnVjdHVyZSosIFdhdGNoYWJpbGl0eUVmZm9y
dCkgY29uc3Q7CisKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7CisgICAgS2luZCBtX2tp
bmQ7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0OworICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAg
fSBwcmVzZW5jZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGU7CisgICAgICAgIH0gYWJzZW5jZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAg
IEVuY29kZWRKU1ZhbHVlIHZhbHVlOworICAgICAgICB9IGVxdWl2YWxlbmNlOworICAgIH0gdTsK
K307CisKK3N0cnVjdCBQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAgICAgY29uc3QgUHJvcGVydHlDb25kaXRp
b24mIGEsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjpLaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bj4geworICAgIHR5cGVkZWYgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1
Y3QgSGFzaFRyYWl0czxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRy
YWl0czxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gUHJvcGVydHlDb25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODczNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsMTkgKzkwLDE4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNv
ZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0
X29mX2xpbmUpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IGluc3RydWN0
aW9uWzZdLnUuc3RydWN0dXJlLmdldCgpOwotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGlu
c3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCk7Ci0gICAgQVNTRVJUKG5ld1N0cnVj
dHVyZSk7Ci0gICAgQVNTRVJUKGNoYWluKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgIGlmICghaXNWYWxp
ZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICAKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gaW50ZW5kZWRD
aGFpbjsKLSAgICBpZiAoY2hhaW4pCi0gICAgICAgIGludGVuZGVkQ2hhaW4gPSBhZG9wdFJlZihu
ZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGNoYWlu
KSk7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlm
IChpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKG9wX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX25vcm1hbCkKKyAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUg
PT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29m
X2xpbmUpKSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAg
ICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0
cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgfQogICAg
IAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0
cnVjdHVyZSwgaW50ZW5kZWRDaGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCwgb2Zmc2V0KTsKIH0KIAogUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3R1YkluZm9NYXAmIG1hcCwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTE2NSwxNiArMTY0LDE0IEBA
IFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gCiAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNp
dGlvbi5zdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gY2hhaW47Ci0gICAgICAgICAgICBpZiAoc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRp
b24uY2hhaW4pIHsKLSAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHVi
SW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkp
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRl
cigKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25k
aXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3Vy
ZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
CiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNT
dHJ1Y3R1cmUuZ2V0KCksCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5z
aXRpb24uc3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgIGNoYWluLmdldCgpLCBvZmZz
ZXQpOworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkBAIC0y
MTksMTUgKzIxNiwxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
CiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVu
dGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwot
ICAgICAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAg
ICAgICAgICAgICAgICBpZiAoYWNjZXNzLmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNz
LmNoYWluKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
ID0gYWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vz
cy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjaGFpbi5nZXQoKSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3Mu
bmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTI1Myw3ICsyNDYsNyBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKnN0dWItPm1fY2FsbExp
bmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29t
cGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNl
dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7
CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNjgsMjIg
KzM2MSwxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKLSAgICAgICAgUmVmUHRy
PEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAg
ICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGUgcHJv
dG90eXBlIGNoYWluIGhhcyBzZXR0ZXJzIG9yIHJlYWQtb25seSBwcm9wZXJ0aWVzLCB0aGVuIGdp
dmUgdXAuCi0gICAgICAgICAgICBpZiAoY2hhaW4tPm1heUludGVyY2VwdFN0b3JlVG8odWlkKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAg
ICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhc24ndCBiZWVu
IG5vcm1hbGl6ZWQgKGkuZS4gdGhlcmUgYXJlIHByb3hpZXMgb3IgZGljdGlvbmFyaWVzKQotICAg
ICAgICAgICAgLy8gdGhlbiBnaXZlIHVwLiBUaGUgZGljdGlvbmFyeSBjYXNlIHdvdWxkIG9ubHkg
aGFwcGVuIGlmIHRoaXMgc3RydWN0dXJlIGhhcyBub3QgYmVlbgotICAgICAgICAgICAgLy8gdXNl
ZCBpbiBhbiBvcHRpbWl6ZWQgcHV0X2J5X2lkIHRyYW5zaXRpb24uIEFuZCByZWFsbHkgdGhlIG9u
bHkgcmVhc29uIHdoeSB3ZSB3b3VsZAotICAgICAgICAgICAgLy8gYmFpbCBoZXJlIGlzIHRoYXQg
SSBkb24ndCByZWFsbHkgZmVlbCBsaWtlIGhhdmluZyB0aGUgb3B0aW1pemluZyBKSVQgZ28gYW5k
IGZsYXR0ZW4KLSAgICAgICAgICAgIC8vIGRpY3Rpb25hcmllcyBpZiB3ZSBoYXZlIGV2aWRlbmNl
IHRvIHN1Z2dlc3QgdGhhdCB0aG9zZSBvYmplY3RzIHdlcmUgbmV2ZXIgdXNlZCBhcwotICAgICAg
ICAgICAgLy8gcHJvdG90eXBlcyBpbiBhIGNhY2hlYWJsZSBwcm90b3R5cGUgYWNjZXNzIC0gaS5l
LiB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCBzb21lIG9mCi0gICAgICAgICAgICAvLyB0aGUg
b3RoZXIgY2hlY2tzIGJlbG93IHdpbGwgZmFpbC4KLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzUHJveHkoKSB8fCAhY2hhaW4tPmlzTm9ybWFsaXplZCgpKQorICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVu
dGx5KAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAg
ICAgICAgIH0KICAgICAKQEAgLTM5NCw3ICszNzYsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KAot
ICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0
aW9uLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6
dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7
CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Myw4ICs0Myw3IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3Bl
cmF0b3IKICAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7CiAgICAgbV9vbGRTdHJ1Y3R1cmUgPSBv
dGhlci5tX29sZFN0cnVjdHVyZTsKICAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3Ry
dWN0dXJlOwotICAgIG1fY29uc3RhbnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwot
ICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRp
dGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9v
ZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExp
bmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxs
TGlua1N0YXR1cyk7CkBAIC02NCwyOSArNjMsMjYgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2UoYwogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJl
Q2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAg
UHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwog
ICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKICAgICByZXN1bHQubV9u
ZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgaWYgKHN0cnVjdHVyZUNoYWluKQotICAg
ICAgICBzdHJ1Y3R1cmVDaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5tX2NvbnN0YW50Q2hlY2tz
KTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRWYXJp
YW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykK
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiB7CiAgICAg
UHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CiAgICAg
cmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIGlmIChjaGFpbikgewotICAg
ICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5tX2NvbnN0YW50Q2hlY2tzKTsKLSAgICAg
ICAgcmVzdWx0Lm1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwot
ICAgIH0KKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RG
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTM0LDE2ICsx
MzAsMTIgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0CiAgICAgcmV0
dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKLVN0cnVjdHVyZVNldCBQdXRCeUlkVmFyaWFudDo6
YmFzZVN0cnVjdHVyZSgpIGNvbnN0CitKU09iamVjdCogUHV0QnlJZFZhcmlhbnQ6OmFsdGVybmF0
ZUJhc2UoKSBjb25zdAogewotICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAKLSAg
ICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpOwotICAg
IAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29uc3RhbnRDaGVj
a3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKLSAg
ICByZXR1cm4gc3RydWN0dXJlOworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2luZCA9PSBTZXR0ZXIp
OworICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBtX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpOwogfQogCiBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRC
eUlkVmFyaWFudCYgb3RoZXIpCkBAIC0xOTYsNiArMTg4LDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1f
b2Zmc2V0KTsKICAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKICAgICBB
U1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVCghcmVwbGFj
ZS5jb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdpbmcgb25s
eSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZp
ZWxkIHdoaWNoCiAgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUgdGhlIG90
aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndApAQCAtMjMy
LDEzICsyMjUsMTMgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAog
ICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4
dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKICAgICAgICAgICAgIHBvaW50ZXJE
dW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAg
ICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygpLCBjb250ZXh0KSwgIl0sIG9mZnNl
dCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVyOgogICAgICAgICBvdXQucHJpbnQoCiAg
ICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
IiwgWyIsCi0gICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygpLCBj
b250ZXh0KSwgIl0iKTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29u
dGV4dCksICJdIik7CiAgICAgICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgICAgICBv
dXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJu
YXRlQmFzZSksIGNvbnRleHQpKTsKICAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1f
b2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNiBAQAog
I2lmbmRlZiBQdXRCeUlkVmFyaWFudF9oCiAjZGVmaW5lIFB1dEJ5SWRWYXJpYW50X2gKIAotI2lu
Y2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNl
dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBAIC00Niw3ICs0NSw2IEBAIHB1Ymxp
YzoKICAgICBQdXRCeUlkVmFyaWFudCgpCiAgICAgICAgIDogbV9raW5kKE5vdFNldCkKICAgICAg
ICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQotICAgICAgICAsIG1fYWx0ZXJuYXRlQmFzZShu
dWxscHRyKQogICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgewogICAgIH0K
QEAgLTU0LDE2ICs1MiwxNSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0
QnlJZFZhcmlhbnQmKTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5
SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZSgKLSAgICAg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7
CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0Jiwg
UHJvcGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0
aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0
cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgICAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0
YXR1cyk7CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQ7IH0KICAgICAKQEAgLTc2LDYgKzczLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwogICAgIH0KICAgICAKKyAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RydXR1
cmUoKTsKKyAgICB9CisgICAgCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUo
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtp
bmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAtMTAwLDEwICsxMDIsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKICAgICBib29s
IG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKLSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9jb25zdGFudENoZWNrczsKLSAgICB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAg
ICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKICAgICB7CkBAIC0xMTEsMTMg
KzExMCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgIH0KICAgICAK
LSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2FsdGVybmF0ZUJhc2U7Ci0g
ICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CisgICAg
SlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdDsKICAgICAKICAgICBDYWxsTGlua1N0YXR1
cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAogICAgIHsKQEAgLTEzNiw4ICsxMjksNyBAQCBwcml2
YXRlOgogICAgIEtpbmQgbV9raW5kOwogICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsK
ICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNl
OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFBy
b3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ2LDI0ICs0NiwyOSBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBTdHJ1Y3R1
CiAKIHZvaWQgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNv
bnN0IEZpcmVEZXRhaWwmKQogewotICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15
IG93biBkZW1pc2U6IHN0dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCi0gICAgLy8g
VGhhdCB3b3JrcywgYmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9t
IHRoZSBzZXQncyBsaXN0LCBhbmQKLSAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9y
IGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgotICAgIG1faG9sZGVy
LmNvZGVCbG9jaygpLT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgIGlmICgh
bV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkp
IHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTog
c3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KKyAgICAgICAgLy8gVGhhdCB3b3Jr
cywgYmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQn
cyBsaXN0LCBhbmQKKyAgICAgICAgLy8gdGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJp
bmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2luZy4KKyAgICAgICAgbV9ob2xkZXIu
Y29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRU
cmFuc2l0aW9uV2F0Y2hwb2ludCh0aGlzKTsKIH0KIAogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjp+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKCkKIHsKIH0KIAotU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZv
OjphZGRXYXRjaHBvaW50KCkKK1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNo
cG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYga2V5KQogewotICAgIHJldHVybiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpwdXNoKCp0aGlzLCBtX2hlYWQpOworICAgIHJldHVybiBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKGtleSwgKnRoaXMsIG1faGVhZCk7CiB9CiAKIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
bzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKICAgICBSZWZQdHI8V2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVmLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCisgICAgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewogICAgIGlm
ICghaG9sZGVyUmVmKQogICAgICAgICBob2xkZXJSZWYgPSBhZG9wdFJlZihuZXcgV2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvKGNvZGVCbG9jaywgc3R1YkluZm8pKTsKQEAgLTcyLDcgKzc3
LDcgQEAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwbwogICAgICAgICBB
U1NFUlQoaG9sZGVyUmVmLT5tX3N0dWJJbmZvID09IHN0dWJJbmZvKTsKICAgICB9CiAgICAgCi0g
ICAgcmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludCgpOworICAgIHJldHVybiBob2xkZXJS
ZWYtPmFkZFdhdGNocG9pbnQoa2V5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludF9oCiAjZGVmaW5lIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnRfaAogCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJX
YXRjaHBvaW50LmgiCiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNDYsMTUgKzQ3LDExIEBAIGNsYXNz
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQgOiAKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KAot
ICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlcikKLSAgICAgICAg
OiBtX2hvbGRlcihob2xkZXIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5LAogICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlciwK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+
IG5leHQpCi0gICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQorICAgICAgICA6IG1fa2V5KGtleSkK
KyAgICAgICAgLCBtX2hvbGRlcihob2xkZXIpCiAgICAgICAgICwgbV9uZXh0KFdURjo6bW92ZShu
ZXh0KSkKICAgICB7CiAgICAgfQpAQCAtNjksNiArNjYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CiAgICAgV2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvJiBtX2hvbGRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4gbV9uZXh0OwogfTsKQEAgLTgzLDExICs4MSwx
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgfldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygp
OwogICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9p
bnQoKTsKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpOwogICAgIAogICAgIHN0YXRpYyBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBlbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRj
aHBvaW50KAogICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiYg
aG9sZGVyUmVmLAotICAgICAgICBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyopOworICAg
ICAgICBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8o
KSBjb25zdCB7IHJldHVybiBtX3N0dWJJbmZvOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE4
NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDkgKzQ4LDEyIEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OmRlcmVmKCkKICAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0
dXJlczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
c2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKHUucHV0QnlJZFRyYW5zaXRpb24u
cmF3Q29uZGl0aW9uU2V0KTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRp
b25TZXQgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5
X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CiAgICAgY2FzZSBh
Y2Nlc3NfdW5zZXQ6CiAgICAgICAgIC8vIFRoZXNlIGluc3RydWN0aW9ucyBkb24ndCBoYXZlIHRv
IHJlbGVhc2UgYW55IGFsbG9jYXRlZCBtZW1vcnkKQEAgLTc1LDggKzc4LDEwIEBAIGJvb2wgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fZGlyZWN0OgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRp
b24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJr
ZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICB8fCAh
SGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpCisgICAgICAg
ICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIU9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcigKKyAgICAgICAgICAgICAgICB1LnB1dEJ5
SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkuYXJlU3RpbGxMaXZlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF9yZXBsYWNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRTdHVi
Um91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgpAQCAtMTEzLDcgKzExNCw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAgICAv
LyBQdXRCeUlkKgogCi0gICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24oVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBib29sIGlzRGlyZWN0KQorICAgIHZvaWQgaW5p
dFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2
aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGNvbmRpdGlvblNldCwgYm9vbCBpc0RpcmVjdCkKICAgICB7CiAgICAgICAgIGlmIChp
c0RpcmVjdCkKICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OwpAQCAtMTIyLDcgKzEyMyw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
byB7CiAKICAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5zZXQo
dm0sIG93bmVyLCBwcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRp
b24uc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJ
ZFRyYW5zaXRpb24uY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworICAgICAgICB1LnB1dEJ5
SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldC5yZWxlYXNlUmF3UG9p
bnRlcigpOwogICAgIH0KIAogICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlKQpAQCAtMTc1LDEwICsx
NzYsMTEgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgc2VlbiA9IHRydWU7
CiAgICAgfQogICAgICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBh
ZGRXYXRjaHBvaW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoCisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJl
bmNlQW5kQWRkV2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ss
IHRoaXMpOworICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29uZGl0
aW9uKTsKICAgICB9CiAgICAgCiAgICAgaW50OF90IGFjY2Vzc1R5cGU7CkBAIC0yMTcsMjMgKzIx
OSwxMiBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIH0gZ2V0QnlJ
ZFNlbGY7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0
cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJh
c2U8U3RydWN0dXJlPiBwcm90b3R5cGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBib29sIGlzRGly
ZWN0OwotICAgICAgICB9IGdldEJ5SWRQcm90bzsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBjb3VudCA6IDMxOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA6IDE7
Ci0gICAgICAgIH0gZ2V0QnlJZENoYWluOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBnZXRCeUlkTGlzdDsKICAg
ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBw
cmV2aW91c1N0cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJl
PiBzdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWlu
PiBjaGFpbjsKKyAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKICAgICAgICAgfSBw
dXRCeUlkVHJhbnNpdGlvbjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYwLDMw
ICsyMDYwLDIyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAg
ICAgIFN0cnVjdHVyZVNldCBzZXQgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpOworICAgICAgICBm
b3IgKGNvbnN0IE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNlIDogbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKS5jYXNlcykgeworICAgICAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IGdl
dENhc2Uuc2V0KCk7CiAgICAgICAgICAgICBzZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAg
aWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBiYXNlU2V0Lm1lcmdlKHNldCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUg
YmFzZUZvckxvYWQ7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0g
ICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2UubV92YWx1
ZTsKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQotICAgICAgICAgICAgICAg
IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAgYmFz
ZUZvckxvYWQsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAg
ICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChnZXRDYXNl
Lm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQpIHsKICAgICAg
ICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSB0aGlzUmVzdWx0OwogICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1
bHQpLAorICAgICAgICAgICAgICAgICpnZXRDYXNlLmNvbnN0YW50KCksCiAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAgICAgICAgICByZXN1bHQu
bWVyZ2UodGhpc1Jlc3VsdCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChrZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5j
ZSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Ojpp
bnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgpKTsKKyAg
ICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBv
aW50KCZtX3N0cnVjdHVyZVdhdGNocG9pbnQpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IG1fa2V5LT5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShtX2tl
eS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXkub2JqZWN0KCktPnN0cnVj
dHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgIHNl
dC0+YWRkV2F0Y2hwb2ludCgmbV9wcm9wZXJ0eVdhdGNocG9pbnQpOworfQorCit2b2lkIEFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6ZmlyZShjb25zdCBGaXJlRGV0YWls
JiBkZXRhaWwpCit7CisgICAgLy8gT25lIG9mIHRoZSB3YXRjaHBvaW50cyBmaXJlZCwgYnV0IHRo
ZSBvdGhlciBvbmUgZGlkbid0LiBNYWtlIHN1cmUgdGhhdCBuZWl0aGVyIG9mIHRoZW0gYXJlCisg
ICAgLy8gaW4gYW55IHNldCBhbnltb3JlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGJ5IGFsbG93
aW5nIHVzIHRvIHJlaW5zdGFsbCB0aGUgd2F0Y2hwb2ludHMKKyAgICAvLyB3aGVyZXZlciBmcm9t
IHNjcmF0Y2guCisgICAgaWYgKG1fc3RydWN0dXJlV2F0Y2hwb2ludC5pc09uTGlzdCgpKQorICAg
ICAgICBtX3N0cnVjdHVyZVdhdGNocG9pbnQucmVtb3ZlKCk7CisgICAgaWYgKG1fcHJvcGVydHlX
YXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fcHJvcGVydHlXYXRjaHBvaW50LnJlbW92
ZSgpOworICAgIAorICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6
RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsK
KyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsK
KyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgi
QWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAg
U3RyaW5nRmlyZURldGFpbCBkZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisg
ICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVU
b1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKK30K
Kwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVy
ZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwp
Cit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAgICAgICBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fc3RydWN0dXJlV2F0Y2hw
b2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMp
IC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit2b2lk
IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBv
aW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAg
IHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3Byb3BlcnR5V2F0Y2hwb2ludCk7Cisg
ICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQg
PQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZz
ZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAK
KyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBTdHJ1Y3R1cmVXYXRj
aHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RydWN0
dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lk
IGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICBj
bGFzcyBQcm9wZXJ0eVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGlj
OgorICAgICAgICBQcm9wZXJ0eVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRl
OworICAgIH07CisgICAgCisgICAgdm9pZCBmaXJlKGNvbnN0IEZpcmVEZXRhaWwmKTsKKyAgICAK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnQgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50Owor
ICAgIFByb3BlcnR5V2F0Y2hwb2ludCBtX3Byb3BlcnR5V2F0Y2hwb2ludDsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LndhdGNoaW5nUmVxdXJpZXNTdHJjdXR1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgha2V5LndhdGNoaW5nUmVxdWly
ZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNo
YWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5z
aXRpb25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAo
bV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkp
IHsKKyAgICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiAoIiwg
bV9rZXksICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgfQorICAgIAorICAgIFN0
cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFkYXB0YXRpb24gb2YgIiwgbV9r
ZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0cmluZ0ZpcmVEZXRhaWwgZGV0
YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5qZXR0
aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisgICAg
CisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZmly
ZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsMTQgQEAgcHJpdmF0
ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxl
Q29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0
aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNr
cyk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVH
ZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0
JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlIG9w
ID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRU
eXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNl
dCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQo
U3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0
KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFz
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9m
ZnNldCk7CisgICAgCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5SWRWYXJpYW50IGFuZCB0
aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmFyaWFudFR5cGU+CisgICAgTm9kZSogbG9hZChOb2RlKiBiYXNlLCBjb25zdCBWYXJpYW50VHlw
ZSYgdmFyaWFudCk7CisgICAgICAgIAogICAgIHZvaWQgaGFuZGxlR2V0QnlJZCgKICAgICAgICAg
aW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsKQEAg
LTIxMiw3ICsyMTksMzQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAg
ICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBj
b25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCk7Ci0gICAgdm9pZCBl
bWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsKKyAgICAKKyAg
ICB2b2lkIGVtaXRHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgUHJvcGVy
dHlPZmZzZXQpOworCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0
IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBSZXR1cm5zIGZhbHNlIGlmIHRoZQorICAgIC8v
IGNvbmRpdGlvbiBubyBsb25nZXIgaG9sZHMsIGFuZCB0aGVyZWZvcmUgbm8gcmVhc29uYWJsZSBj
aGVjayBjYW4gYmUgZW1pdHRlZC4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJik7CisgICAgCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcHJvbW90ZVRvQ29uc3Rh
bnQoR2V0QnlPZmZzZXRNZXRob2QpOworICAgIAorICAgIC8vIEVpdGhlciByZWdpc3RlciBhIHdh
dGNocG9pbnQgb3IgZW1pdCBhIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi4gSXQgbXVzdCBiZSBh
IFByZXNlbmNlCisgICAgLy8gY29uZGl0aW9uLiBJdCB3aWxsIGF0dGVtcHQgdG8gcHJvbW90ZSBh
IFByZXNlbmNlIGNvbmRpdGlvbiB0byBhbiBFcXVpdmFsZW5jZSBjb25kaXRpb24uCisgICAgLy8g
RW1pdHMgY29kZSBmb3IgdGhlIGxvYWRlZCB2YWx1ZSB0aGF0IHRoZSBjb25kaXRpb24gZ3VhcmRz
LCBhbmQgcmV0dXJucyBhIG5vZGUgY29udGFpbmluZworICAgIC8vIHRoZSBsb2FkZWQgdmFsdWUu
IFJldHVybnMgbnVsbCBpZiB0aGUgY29uZGl0aW9uIG5vIGxvbmdlciBob2xkcy4KKyAgICBHZXRC
eU9mZnNldE1ldGhvZCBwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOwor
ICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IEdldEJ5T2Zmc2V0TWV0aG9kLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBs
b2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIE5vZGVU
eXBlID0gR2V0QnlPZmZzZXQpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNrKCkgZm9yIGVhY2gg
Y29uZGl0aW9uIGluIHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVpdGhlciBlbWl0cyBjaGVja3Mgb3Ig
cmVnaXN0ZXJzCisgICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEgY29tYmluYXRpb24gb2YgdGhlIHR3
bykgdG8gbWFrZSB0aGUgY29uZGl0aW9ucyBob2xkLiBJZiBhbnkgb2YgdGhvc2UKKyAgICAvLyBj
b25kaXRpb25zIGFyZSBubyBsb25nZXIgY2hlY2thYmxlLCByZXR1cm5zIGZhbHNlLgorICAgIGJv
b2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICAKKyAgICAv
LyBDYWxscyBjaGVjaygpIGZvciB0aG9zZSBjb25kaXRpb25zIHRoYXQgYXJlbid0IHRoZSBzbG90
IGJhc2UsIGFuZCBjYWxscyBsb2FkKCkgZm9yIHRoZSBzbG90CisgICAgLy8gYmFzZS4gRG9lcyBh
IGNvbWJpbmF0aW9uIG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBjaGVjayBlbWlzc2lv
biB0byBndWFyZCB0aGUKKyAgICAvLyBjb25kaXRpb25zLCBhbmQgZW1pdHMgY29kZSB0byBsb2Fk
IHRoZSB2YWx1ZSBmcm9tIHRoZSBzbG90IGJhc2UuIFJldHVybnMgYSBub2RlIGNvbnRhaW5pbmcK
KyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgYW55IG9mIHRoZSBjb25k
aXRpb25zIHdlcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAgICBHZXRCeU9mZnNldE1ldGhvZCBw
bGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOworICAgIE5vZGUqIGxv
YWQoU3BlY3VsYXRlZFR5cGUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgTm9k
ZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsK
ICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiArNzQwLDkgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBhcm91
bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJvbSB1
c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdhdGNo
IHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtlIGl0
IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25z
dGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
bV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAg
ICByZXR1cm4gb2JqZWN0Tm9kZTsKQEAgLTIyNDAsMTUgKzIyNzcsOCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2Rl
KiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3Ap
CitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAgICBpZiAoYmFzZS0+aGFzQ29uc3Rh
bnQoKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29u
c3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQpKSB7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOwotICAgICAgICAgICAgcmV0
dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAg
ICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkp
CiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0yMjY0LDYgKzIyOTQsMTggQEAg
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIHJldHVybiBnZXRC
eU9mZnNldDsKIH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IHN0cnVjdHVyZVNldCYg
c3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIE5vZGVUeXBlIG9wKQoreworICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgpKSB7Cisg
ICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3Bl
cnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQsIG9mZnNldCkpIHsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gd2Vha0pT
Q29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBo
YW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZz
ZXQsIG9wKTsKK30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5v
ZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9k
ZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMjI4MSwxMCArMjMy
MywyMjcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVja3MoY29uc3Qg
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKQordm9pZCBCeXRlQ29kZVBhcnNl
cjo6ZW1pdEdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2Us
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7Cisg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGJhc2U7CisgICAgZWxzZQorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdl
dEJ1dHRlcmZseSwgYmFzZSk7CisgICAgCisgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBt
X2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CisgICAgZGF0YS0+b2Zmc2V0ID0gb2Zm
c2V0OworICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAg
IAorICAgIE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBP
cEluZm8ocHJlZGljdGlvbiksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisKKyAgICByZXR1cm4g
Z2V0QnlPZmZzZXQ7Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCit7CisgICAgaWYgKG1fZ3JhcGgud2F0Y2hD
b25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAg
IGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tT
dHJ1Y3R1cmUsCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpKSwKKyAgICAgICAgd2Vha0pTQ29uc3RhbnQoY29uZGl0aW9uLm9iamVjdCgpKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwcm9t
b3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QpCit7CisgICAgaWYgKChtZXRo
b2Qua2luZCgpID09IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZSB8fCBtZXRo
b2Qua2luZCgpID09IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZVdpdGhDaGVj
aykKKyAgICAgICAgJiYgbWV0aG9kLnByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxk
V2F0Y2goKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCksIG1ldGhvZC5wcm90
b3R5cGUoKS0+c3RydWN0dXJlKCksIG1ldGhvZC5vZmZzZXQoKSkpCisgICAgICAgICAgICByZXR1
cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKGNvbnN0YW50KSk7
CisgICAgfQorICAgIAorICAgIHJldHVybiBtZXRob2Q7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9k
IEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uKQoreworICAgIC8vIFdlIG1pZ2h0IHByb21vdGUgdGhpcyB0byBFcXVpdmFsZW5j
ZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBzdWNoIHByb21vdGlvbgorICAg
IC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5IHRoaXMgY2Fubm90IGJlIGFz
a2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8vIE5vbmUgb2YgdGhl
IGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEgbG9hZCBvZiBhbiBFcXVpdmFs
ZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBwb3J0aW5nIGl0IHdvdWxkIGNv
bXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0
aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworICAgIAorICAgIC8v
IEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRoaXMsIGZyb20gbW9zdCBwcmVm
ZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAgLy8gMSkgV2F0Y2hwb2ludCBv
biBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBhIGNvbnN0YW50IG5vZGUgZm9y
IHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIgY29kZSBpcyBlbWl0dGVkLCBh
bmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMgbmV2ZXIgcmVnaXN0ZXJlZC4K
KyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBjb2RlIGFuZCB3ZSB3b24ndCBq
ZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QKKyAgICAvLyAgICB0cmFuc2l0
aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJsZSByaWdodCBub3cuCisgICAg
Ly8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0
dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQgYnkgdGhlCisgICAgLy8gICAg
REZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNoIHRoZSBzdHJ1Y3R1cmUgYW5k
IGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8vICAgIGNvbmRpdGlvbiwgc2lu
Y2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBjb25zdGFudCBpbiBJUiB3aWxs
IGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUgc3RydWN0dXJlIGFueXdheSBh
bmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUgY29uZGl0aW9uLgorICAgIC8v
CisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJyZW50IHN0cnVjdHVy
ZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0aGUKKyAgICAvLyAgICBERkcg
KGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSBhbmQgIWRmZ1Nob3Vs
ZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0aGUgY29uZGl0aW9uLCBhbmQg
ZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQg
dGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5vdCB3YXRjaGFibGUuIEVtaXQg
YQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQgYSBsb2FkLgorICAgIC8vCisg
ICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBHaXZlIHVwIGFuZCByZXR1cm4g
bnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWdyZWUgb24gd2hhdCB0aGUgc3RydWN0
dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGluZyB0aGVzZSB2YXJpb3VzCisgICAgLy8g
Y2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5z
dHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRvIHByb21vdGUgUHJlc2VuY2Ug
dG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UKKyAg
ICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4gQWxzbywgdGhlcmUgYXJlIGNh
c2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0CisgICAgLy8gd2UgZG9uJ3Qg
d2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVxdWl2YWxlbmNlIChzZWUgdGhl
IHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAoMiksIGFuZCAoMykgYWJvdmUpLgor
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQoY29uZGl0aW9uLm9mZnNldCgpKSkgewor
ICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNhdXNlIG9ubHkgdGhlIEdDIGNhbiBjYXVz
ZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdhcmJhZ2UKKyAgICAgICAgLy8gdmFsdWUu
CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRpb24ub2JqZWN0KCktPmdldERpcmVjdChj
b25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVp
dmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgICAgICBjb25kaXRpb24ub2Jq
ZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOworICAgICAgICBpZiAobV9ncmFwaC53YXRj
aENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgICAgICByZXR1cm4gR2V0
QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CisgICAgfQor
ICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ2xsIGhhdmUgdG8gbWF0ZXJpYWxpemUgdGhl
IGNvbmRpdGlvbidzIGJhc2UgYXMgYSBjb25zdGFudCBpbiBERkcgSVIuIE9uY2UKKyAgICAvLyB3
ZSBkbyB0aGlzLCB0aGUgZnJvemVuIHZhbHVlIHdpbGwgaGF2ZSBpdHMgb3duIGlkZWEgb2Ygd2hh
dCB0aGUgc3RydWN0dXJlIGlzLiBVc2UgdGhhdCBmcm9tCisgICAgLy8gbm93IG9uIGp1c3QgYmVj
YXVzZSBpdCdzIGxlc3MgY29uZnVzaW5nLgorICAgIEZyb3plblZhbHVlKiBiYXNlID0gbV9ncmFw
aC5mcmVlemUoY29uZGl0aW9uLm9iamVjdCgpKTsKKyAgICBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1
Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiB0aGUgc3RydWN0dXJlIHRoYXQgd2UndmUg
cmVnaXN0ZXJlZCBtYWtlcyB0aGUgY29uZGl0aW9uIGhvbGQuIElmIG5vdCwganVzdCBnaXZlCisg
ICAgLy8gdXAuIFRoaXMgaXMgY2FzZSAoNSkgYWJvdmUuCisgICAgaWYgKCFjb25kaXRpb24uc3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBHZXRCeU9m
ZnNldE1ldGhvZCgpOworICAgIAorICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZCBi
eSB0aGUgREZHIGFscmVhZHksIHRoZW4ganVzdCB1c2UgdGhpcyBmYWN0IHRvIGVtaXQgdGhlIGxv
YWQuCisgICAgLy8gVGhpcyBpcyBjYXNlICgyKSBhYm92ZS4KKyAgICBpZiAoc3RydWN0dXJlLT5k
ZmdTaG91bGRXYXRjaCgpKQorICAgICAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlP
ZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZzZXQoKSkp
OworICAgIAorICAgIC8vIElmIHdlIGNhbiB3YXRjaCB0aGUgY29uZGl0aW9uIHJpZ2h0IG5vdywg
dGhlbiB3ZSBjYW4gZW1pdCB0aGUgbG9hZCBhZnRlciB3YXRjaGluZyBpdC4gVGhpcworICAgIC8v
IGlzIGNhc2UgKDMpIGFib3ZlLgorICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRp
dGlvbikpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhv
ZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7CisgICAgCisg
ICAgTm9kZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhiYXNlKSk7
CisgICAgCisgICAgLy8gV2UgY2FuJ3Qgd2F0Y2ggYW55dGhpbmcgYnV0IHdlIGtub3cgdGhhdCB0
aGUgY3VycmVudCBzdHJ1Y3R1cmUgc2F0aXNmaWVzIHRoZSBjb25kaXRpb24uIFNvLAorICAgIC8v
IGNoZWNrIGZvciB0aGF0IHN0cnVjdHVyZSBhbmQgdGhlbiBlbWl0IHRoZSBsb2FkLgorICAgIGFk
ZFRvR3JhcGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLCAKKyAgICAgICAgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3ZWFrSlNDb25zdGFudChi
YXNlTm9kZSkpOworICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhv
ZDo6bG9hZEZyb21Qcm90b3R5cGVXaXRoQ2hlY2soYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7
Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeU9mZnNldCBtZXRob2QsIE5vZGVUeXBlIG9w
KQoreworICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgIGNhc2UgSW52YWxpZDoKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgcmV0dXJu
IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CisgICAg
Y2FzZSBMb2FkRnJvbVByb3RvdHlwZToKKyAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBlV2l0aENo
ZWNrOiB7CisgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obWV0aG9kLnByb3RvdHlwZSgpKSk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9m
ZnNldChwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNl
dCgpLCBvcCk7CisgICAgfQorICAgIGNhc2UgTG9hZDoKKyAgICAgICAgLy8gV2lsbCBuZXZlciBz
ZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBOb2RlVHlwZSBvcCkKK3sKKyAg
ICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgIHJl
dHVybiBsb2FkKHByZWRpY3Rpb24sIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0
aW9uLnVpZCgpKSwgbWV0aG9kLCBvcCk7Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNr
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25T
ZXQpIHsKKyAgICAgICAgaWYgKCFjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRob2Qg
cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkK
K3sKKyAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKKyAgICAgICAgc3dp
dGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246
OlByZXNlbmNlOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7IC8vIFNob3Vs
ZCBvbmx5IHNlZSBleGFjdGx5IG9uZSBvZiB0aGVzZS4KKyAgICAgICAgICAgIHJlc3VsdCA9IGxv
YWQocHJlZGljdGlvbiwgY29uZGl0aW9uLCBvcCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCFjaGVjayhjb25kaXRp
b24pKQorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZDsKKyAgICAgICAg
fQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghIXJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgTm9kZVR5cGUgb3ApCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5z
aXplKCk7ICsraSkKLSAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHZlY3Rv
cltpXS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCkpOworICAgIEdldEJ5T2Zmc2V0
TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvblNldCk7CisgICAgcmV0dXJuIGxvYWQo
CisgICAgICAgIHByZWRpY3Rpb24sCisgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1
cmUoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkudWlkKCkpLAorICAgICAgICBtZXRo
b2QsIG9wKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CitOb2RlKiBCeXRl
Q29kZVBhcnNlcjo6bG9hZChOb2RlKiBiYXNlLCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkK
K3sKKyAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKKyAgICAKKyAgICBTcGVj
dWxhdGVkVHlwZSBsb2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlwZSBsb2FkT3A7CisgICAgaWYg
KHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgeworICAgICAgICBsb2FkUHJlZGljdGlvbiA9IFNw
ZWNDZWxsT3RoZXI7CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRlclNldHRlckJ5T2Zmc2V0Owor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gcHJlZGljdGlvbjsKKyAgICAg
ICAgbG9hZE9wID0gR2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE5vZGUqIGxvYWRlZFZh
bHVlOworICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAg
IGxvYWRlZFZhbHVlID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFyaWFudC5jb25kaXRpb25TZXQo
KSwgbG9hZE9wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRC
eU9mZnNldCgKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCB2YXJpYW50LnN0cnVj
dHVyZVNldCgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAorICAgICAgICAg
ICAgbG9hZE9wKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgYmFja3dhcmRzIHByb3BhZ2F0
aW9uIGtub3dzIHRoYXQgd2UndmUgdXNlZCBiYXNlLgorICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
YmFzZSk7CisgICAgCisgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCiB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMwNywxOCArMjU2NiwzMyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAg
ICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwotICAgIAor
ICAgICAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldE1ldGhvZCwgMj4gY2FzZXM7CisgICAgICAg
IAogICAgICAgICAvLyAxKSBFbWl0IHByb3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwg
Y2hhaW5zLiBUaGlzIGNvdWxkIHNvcnQgb2YgbWF5YmUgbm90IGJlCiAgICAgICAgIC8vICAgIG9w
dGltYWwsIGlmIHRoZXJlIGlzIHNvbWUgcmFyZWx5IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNoYWlu
IHRoYXQgcmVxdWlyZXMgYSBsb3QKICAgICAgICAgLy8gICAgb2YgY2hlY2tzIGFuZCB0aG9zZSBj
aGVja3MgYXJlIG5vdCB3YXRjaHBvaW50YWJsZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJp
YW50SW5kZXggPSBnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykK
LSAgICAgICAgICAgIGVtaXRDaGVja3MoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0
YW50Q2hlY2tzKCkpOwotICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA6IGdldEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYg
KHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZXMuYXBwZW5kKE11bHRpR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZChnZXRCeUlk
U3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpOworICAgICAgICAgICAgaWYgKCFt
ZXRob2QpIHsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9u
T3BlcmFuZCksCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoZ2V0QnlJZCwgT3BJbmZv
KGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2VzLmFwcGVuZChNdWx0aUdldEJ5T2Zmc2V0TWV0aG9kKHZhcmlhbnQuc3RydWN0dXJlU2V0
KCksIG1ldGhvZCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRp
b24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdl
dEJ5SWQoKTsKKyAgICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0QnlPZmZzZXQKICAg
ICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9m
ZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gZ2V0QnlJZFN0YXR1cy52
YXJpYW50cygpOworICAgICAgICBkYXRhLT5jYXNlcyA9IGNhc2VzOwogICAgICAgICBkYXRhLT5p
ZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAogICAgICAgICAgICAgYWRkVG9HcmFwaChNdWx0
aUdldEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwpA
QCAtMjMyOCwzMCArMjYwMiwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KAogICAgIEFTU0VSVChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CiAgICAgR2V0
QnlJZFZhcmlhbnQgdmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAgICAgICAgICAgICAg
CisgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKGJhc2UsIHZhcmlhbnQpOworICAgIGlmICgh
bG9hZGVkVmFsdWUpIHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9w
ZXJhbmQpLAorICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgbV9ncmFwaC5j
b21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwogICAgIAotICAgIE5vZGUqIG9y
aWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgYWRkVG9HcmFwaChDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0
dXJlU2V0KCkpKSwgYmFzZSk7Ci0gICAgCi0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50
Q2hlY2tzKCkpOwotCi0gICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICBi
YXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwotICAgIAotICAg
IC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQgdG8KLSAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFz
ZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9u
ZSB3aXRoCi0gICAgLy8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRo
ZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBz
b21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJl
IG9uIGJhc2UuCi0gICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQotICAgICAgICBhZGRUb0dy
YXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZSk7Ci0gICAgCi0gICAgTm9kZSogbG9hZGVkVmFsdWUg
PSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8g
U3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0gICAgICAgIGJhc2UsIHZhcmlhbnQuYmFzZVN0
cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAgICB2
YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5
T2Zmc2V0KTsKLSAgICAKICAgICBpZiAoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgewogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVl
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQyMiwxNyArMjY4MiwyMCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAg
bV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwotICAgICAgICAK
ICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJp
YW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykg
ewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgp
ICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudElu
ZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5
SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRT
dGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24o
KS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlP
ZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwog
ICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKICAgICAg
ICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CkBAIC0yNDU0LDcg
KzI3MTcsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAKICAg
ICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3Rh
bnRDaGVja3MoKSk7CisgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkp
IHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVl
LCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgIApAQCAt
MjUwNSwxOSArMjc3MSwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVyOiB7Ci0gICAg
ICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgIAotICAgICAgICBhZGRUb0dy
YXBoKAotICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAKLSAgICAgICAg
ZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotICAgICAgICAKLSAgICAgICAg
aWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgYmFzZSA9IHdlYWtKU0Nv
bnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAgCi0gICAgICAgIE5vZGUq
IGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICBTcGVjQ2VsbE90
aGVyLCBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51bWJlciwgdmFy
aWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIEdldEdldHRlclNldHRlckJ5T2Zmc2V0KTsKKyAg
ICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKGJhc2UsIHZhcmlhbnQpOworICAgICAgICBp
ZiAoIWxvYWRlZFZhbHVlKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlm
aWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRU
b0dyYXBoKEdldFNldHRlciwgbG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI1NDUsNyArMjgw
Myw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKICAgICAKICAg
ICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIG9yaWdpbmFsQmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgdmFsdWUsIEltbWVkaWF0
ZU5ha2VkU2V0KTsKICAgICAKICAgICAgICAgaGFuZGxlQ2FsbCgKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODksNiArODksOSBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhj
b25zCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICAK
KyAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA6IGFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlk
YXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5o
CShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShERkdf
SklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5j
bHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHSnVt
cFJlcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCkBAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFdyaXRl
QmFycmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOwogICAgIEJhZzxDb2RlQmxvY2tK
ZXR0aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgQmFnPEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1w
UmVwbGFjZW1lbnRzOwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNv
bXBpbGF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTQsOCArMjk0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2ludGVy
cHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVzaCBDRkEgb3ZlciB0aGlzIG5vZGUg
YWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCiAgICAgICAgICAgICAgICAgYWxyZWFkeUhh
bmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIg
dG8gZG8gdGhpbmdzIHRvIHRoaXMuCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRz
W2ldOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2Vz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRNZXRo
b2QmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgICAgICAgICB2YXJp
YW50LnN0cnVjdHVyZVNldCgpLmZpbHRlcihiYXNlVmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEudmFyaWFudHNbaS0tXSA9IGRhdGEudmFyaWFudHMubGFzdCgpOwpAQCAt
MzA4LDcgKzMwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldCgKLSAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIGRhdGEudmFyaWFudHNb
MF0sIGRhdGEuaWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgbm9kZSwgYmFzZVZhbHVlLCBkYXRhLmNhc2VzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1i
ZXIpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQpAQCAtNTI5LDcgKzUyOSwzNiBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdl
dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgR2V0QnlP
ZmZzZXRNZXRob2QmIG1ldGhvZCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB7Cisg
ICAgICAgIC8vIFdoZW4gd2UgZ2V0IHRvIGhlcmUgd2UgaGF2ZSBhbHJlYWR5IGVtaXR0ZWQgYWxs
IG9mIHRoZSByZXF1aXNpdGUgY2hlY2tzIGZvciBldmVyeXRoaW5nLgorICAgICAgICAvLyBTbywg
d2UganVzdCBuZWVkIHRvIGVtaXQgd2hhdCB0aGUgbWV0aG9kIG9iamVjdCB0ZWxscyB1cyB0byBl
bWl0LgogICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICAgICAgbV9n
cmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBtZXRob2QuY29uc3RhbnQoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6TG9hZDoKKyAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUs
IG5vZGUtPmNoaWxkMSgpLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRN
ZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpMb2FkRnJvbVByb3RvdHlwZVdpdGhDaGVjazogeworICAgICAgICAgICAgTm9kZSogY2hpbGQg
PSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudChpbmRleEluQmxvY2ssIG9yaWdpbiwgbWV0
aG9kLnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldCgKKyAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVzZSksIGlk
ZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJ
bkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0
IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAg
IHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CkBAIC01MzcsMjUg
KzU2NiwyNCBAQCBwcml2YXRlOgogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ss
IG5vZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAg
ICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVC
YXNlKCkpCi0gICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2VWYWx1ZS5tX3Zh
bHVlOwotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQ
cm9wZXJ0eShiYXNlRm9yTG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zm
c2V0KCkpKSB7CisgICAgICAgIC8vIFdlIGFyZW4ndCBzZXQgdXAgdG8gaGFuZGxlIHByb3RvdHlw
ZSBzdHVmZi4KKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50LmNvbmRp
dGlvblNldCgpLmlzRW1wdHkoKSk7CisKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dy
YXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZVZhbHVlLm1fdmFsdWUsIHZhcmlhbnQuYmFz
ZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKSkgewogICAgICAgICAgICAgbV9ncmFwaC5j
b252ZXJ0VG9Db25zdGFudChub2RlLCBtX2dyYXBoLmZyZWV6ZSh2YWx1ZSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAodmFyaWFudC5hbHRl
cm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Q29uc3RhbnQoaW5kZXhJbkJsb2NrLCBvcmlnaW4sIHZhcmlhbnQuYWx0ZXJuYXRlQmFz
ZSgpKTsKLSAgICAgICAgICAgIGNoaWxkRWRnZSA9IEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVzZSk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgY2hp
bGRFZGdlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBu
b2RlLCBFZGdlIGNoaWxkRWRnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKICAgICAgICAgCiAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAg
ICAKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGNoaWxkRWRnZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkBAIC01NjMsNyArNTkxLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEm
IGRhdGEgPSAqbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwotICAgICAgICBkYXRh
Lm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CisgICAgICAgIGRhdGEub2Zmc2V0ID0gb2Zmc2V0
OwogICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAg
ICAgICAKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlT
dG9yYWdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsOCArMzUsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEFy
cmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29tbW9u
RGF0YSYgY29tbW9uKQogeworICAgIFdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBjb21tb24ud2F0
Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7CiAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50KiBuZXV0ZXJpbmdXYXRjaHBvaW50ID0KICAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50OjpjcmVhdGUoKmNvZGVCbG9jay0+dm0oKSk7CiAgICAgbmV1dGVyaW5nV2F0Y2hw
b2ludC0+c2V0KCktPmFkZCh3YXRjaHBvaW50KTsKQEAgLTQ1LDEwICs0NiwyMyBAQCB2b2lkIEFy
cmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphCiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1
ZUFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSog
aW5mZXJyZWRWYWx1ZSwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgQ29tbW9uRGF0YSYgY29tbW9u
KQogewogICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBj
b21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90
LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBpbmZl
cnJlZFZhbHVlLT5hZGQod2F0Y2hwb2ludCk7CisgICAgaW5mZXJyZWRWYWx1ZS0+YWRkKGNvbW1v
bi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7Cisg
ICAgc3dpdGNoIChrZXkua2luZCgpKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1
aXZhbGVuY2U6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgY29tbW9uLmFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dHMuYWRkKGtleSwgY29kZUJsb2NrKS0+aW5zdGFsbCgpOworICAgICAgICBicmVhazsKKyAgICB9
CiB9CiAKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CkBAIC03
NCw2ICs4OCwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJyCiAg
ICAgbV9idWZmZXJWaWV3cy5hZGRMYXppbHkodmlldyk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNo
cG9pbnRzOjphZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sK
KyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAg
IGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtODgsNiArMTA3LDcgQEAgdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5saW5lU2V0cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2luZmVycmVkVmFsdWVzLnJl
YWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5
QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMu
cmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNo
cG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTk1LDcgKzExNSw4IEBAIGJvb2wgRGVz
aXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0
aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAg
ICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYnVm
ZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0
aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZh
bGlkKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24g
MTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1v
bkRhdGEuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCkBAIC00MSwxNSAr
NDIsMTUgQEAgY2xhc3MgR3JhcGg7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2Vu
ZXJpY1NldEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBUIHNldCwg
V2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFQgc2V0LCBDb21tb25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1
cm4gc2V0LT5hZGQod2F0Y2hwb2ludCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24u
d2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNC
ZWVuSW52YWxpZGF0ZWQoVCBzZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7
IH0KIH07CiAKIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQg
YWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGlj
IHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBDb21tb25EYXRhJik7CiAgICAg
c3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFs
dWUpCiAgICAgewogICAgICAgICByZXR1cm4gaW5mZXJyZWRWYWx1ZS0+aGFzQmVlbkludmFsaWRh
dGVkKCk7CkBAIC01NywxMiArNTgsMTggQEAgc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsK
IH07CiAKIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvciB7Ci0gICAgc3Rh
dGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgV2F0Y2hwb2ludCop
OworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIENv
bW1vbkRhdGEmKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1
ZmZlclZpZXcqIHZpZXcpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9ICF2aWV3LT5sZW5n
dGgoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiAhdmlldy0+bGVuZ3RoKCk7CisgICAgfQorfTsKKworc3RydWN0
IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvbW1vbkRhdGEm
KTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAha2V5LmlzV2F0Y2hhYmxl
KCk7CiAgICAgfQogfTsKIApAQCAtODcsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYg
c2V0IDogbV9zZXRzKQotICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBj
b21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworICAgICAgICAgICAgQWRhcHRvcjo6
YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24pOwogICAgICAgICAKICAgICAgICAgbV9yZWFsbHlB
ZGRlZCA9IHRydWU7CiAgICAgfQpAQCAtMTIyLDYgKzEyOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJyYXlC
dWZmZXJWaWV3Kik7CiAgICAgCisgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24n
dCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZQorICAgIC8vIEdyYXBoOjphZGRBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQsIHdoaWNoIGRvZXMgdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwu
CisgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAg
ICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIAogICAgIHZvaWQgcmVhbGx5
QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEmKTsKQEAgLTE0NCwxMiArMTU1LDE3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsK
ICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dh
dGNoZWQoa2V5KTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHM8V2F0Y2hwb2ludFNldCo+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNo
cG9pbnRzPElubGluZVdhdGNocG9pbnRTZXQqPiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rl
c2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1f
aW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVm
ZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdz
OworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24s
IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVT
ZXRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAko
cmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2Vha1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDE0IEBAIERl
c2lyZWRXZWFrUmVmZXJlbmNlczo6fkRlc2lyZWRXZWFrUmVmZXIKIAogdm9pZCBEZXNpcmVkV2Vh
a1JlZmVyZW5jZXM6OmFkZExhemlseShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgbV9yZWZlcmVuY2Vz
LmFkZChjZWxsKTsKKyAgICBpZiAoY2VsbCkKKyAgICAgICAgbV9yZWZlcmVuY2VzLmFkZChjZWxs
KTsKK30KKwordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU1ZhbHVlIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYWRkTGF6aWx5KHZhbHVl
LmFzQ2VsbCgpKTsKIH0KIAogYm9vbCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKEpT
Q2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdl
YWtSZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB+RGVzaXJlZFdlYWtSZWZlcmVuY2Vz
KCk7CiAKICAgICB2b2lkIGFkZExhemlseShKU0NlbGwqKTsKKyAgICB2b2lkIGFkZExhemlseShK
U1ZhbHVlKTsKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgcmVh
bGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNiArODQ4LDIxIEBAIHZvaWQg
R3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVGbGEKICAgICB9CiB9CiAKK2Jvb2wgR3Jh
cGg6OndhdGNoQ29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7
CisgICAgaWYgKCFrZXkuaXNXYXRjaGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5Lm9iamVjdCgpKTsKKyAg
ICBpZiAoa2V5Lmhhc1Byb3RvdHlwZSgpKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMu
YWRkTGF6aWx5KGtleS5wcm90b3R5cGUoKSk7CisgICAgaWYgKGtleS5oYXNSZXF1aXJlZFZhbHVl
KCkpCisgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5LnJlcXVpcmVk
VmFsdWUoKSk7CisgICAgCisgICAgbV9wbGFuLndhdGNocG9pbnRzLmFkZExhemlseShrZXkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVu
ZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTAyMCw4ICsxMDM1LDEyIEBA
IEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6
OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAg
ICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpCisgICAg
aWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBJZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3
ZSBjb3VsZCBkbyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbgorICAgICAgICAvLyB3YXRjaGluZyB0
byBjb25zdGFudC1mb2xkIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI3MQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OworICAgIH0KICAgICAKICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBz
dHJ1Y3R1cmUuc2V0KCksIG9mZnNldCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2NSw2ICs2NjUsOSBAQCBwdWJsaWM6CiAg
ICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVu
dGlmaWVyczsgfQogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVy
biBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRo
ZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkLgorICAgIGJvb2wgd2F0Y2hDb25kaXRpb24oY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVz
cyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxp
dmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordm9pZCBHZXRCeU9mZnNldE1ldGhvZDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5k
LCAiOiIpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAg
ICAgb3V0LnByaW50KHBvaW50ZXJEdW1wSW5Db250ZXh0KGNvbnN0YW50KCksIGNvbnRleHQpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDoKKyAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZEZyb21Qcm90b3R5cGU6CisgICAg
Y2FzZSBMb2FkRnJvbVByb3RvdHlwZVdpdGhDaGVjazoKKyAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpLCAiQCIsIHBvaW50ZXJEdW1wSW5Db250ZXh0KHByb3RvdHlwZSgpLCBjb250ZXh0KSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0
cik7Cit9CisKK3ZvaWQgTXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KGluQ29udGV4dChtX3NldCwgY29udGV4dCksICI6IiwgaW5Db250ZXh0KG1fbWV0aG9kLCBjb250
ZXh0KSk7Cit9CisKK3ZvaWQgTXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29u
c3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6CisgICAgICAgIG91dC5wcmlu
dCgiTG9hZEZyb21Qcm90b3R5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlP
ZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlV2l0aENoZWNrOgorICAgICAgICBvdXQucHJp
bnQoIkxvYWRGcm9tUHJvdG90eXBlV2l0aENoZWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNl
dERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR011bHRpR2V0QnlPZmZz
ZXREYXRhX2gKKyNkZWZpbmUgREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR2V0QnlPZmZz
ZXRNZXRob2QgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIEludmFsaWQsCisg
ICAgICAgIENvbnN0YW50LAorICAgICAgICBMb2FkLAorICAgICAgICBMb2FkRnJvbVByb3RvdHlw
ZSwKKyAgICAgICAgTG9hZEZyb21Qcm90b3R5cGVXaXRoQ2hlY2sKKyAgICB9OworICAgIAorICAg
IEdldEJ5T2Zmc2V0TWV0aG9kKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFudChGcm96ZW5W
YWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3Rh
bnQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsK
KyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gTG9hZDsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhv
ZCBsb2FkRnJvbVByb3RvdHlwZShGcm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBMb2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUu
bG9hZC5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgR2V0QnlPZmZzZXRNZXRob2QgbG9hZEZyb21Qcm90b3R5cGVXaXRoQ2hlY2soRnJvemVuVmFs
dWUqIHByb3RvdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0
QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZEZyb21Q
cm90b3R5cGVXaXRoQ2hlY2s7CisgICAgICAgIHJlc3VsdC51LmxvYWQucHJvdG90eXBlID0gcHJv
dG90eXBlOworICAgICAgICByZXN1bHQudS5sb2FkLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZDsgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIEZyb3plblZhbHVlKiBjb25zdGFudCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IENvbnN0YW50KTsKKyAgICAgICAg
cmV0dXJuIHUuY29uc3RhbnQ7CisgICAgfQorICAgIAorICAgIEZyb3plblZhbHVlKiBwcm90b3R5
cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkRnJvbVByb3Rv
dHlwZSB8fCBraW5kKCkgPT0gTG9hZEZyb21Qcm90b3R5cGVXaXRoQ2hlY2spOworICAgICAgICBy
ZXR1cm4gdS5sb2FkLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gTG9hZCB8fCBr
aW5kKCkgPT0gTG9hZEZyb21Qcm90b3R5cGUgfHwga2luZCgpID09IExvYWRGcm9tUHJvdG90eXBl
V2l0aENoZWNrKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAg
IHVuaW9uIHsKKyAgICAgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50OworICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1f
a2luZDsKK307CisKK2NsYXNzIE11bHRpR2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBN
dWx0aUdldEJ5T2Zmc2V0Q2FzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0aUdldEJ5
T2Zmc2V0Q2FzZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgY29uc3QgR2V0QnlPZmZzZXRNZXRo
b2QmIG1ldGhvZCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV9tZXRob2QobWV0
aG9kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzZXQoKSB7IHJldHVy
biBtX3NldDsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zZXQ7IH0KKyAgICBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXRob2Q7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbm9udGV4dChQcmludFN0cmVh
bSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgU3RydWN0dXJlU2V0IG1fc2V0OworICAgIEdldEJ5T2Zmc2V0
TWV0aG9kIG1fbWV0aG9kOworfTsKKworc3RydWN0IE11bHRpR2V0QnlPZmZzZXREYXRhIHsKKyAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOworICAgIFZlY3RvcjxHZXRCeU9mZnNldE1ldGhv
ZCwgMj4gY2FzZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFj
ZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6R2V0
QnlPZmZzZXRNZXRob2Q6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTg3MzQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdFcG9j
aC5oIgogI2luY2x1ZGUgIkRGR0xhenlKU1ZhbHVlLmgiCisjaW5jbHVkZSAiREZHTXVsdGlHZXRC
eU9mZnNldERhdGEuaCIKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdO
b2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKQEAgLTY1LDExICs2Niw2IEBA
IHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
cjsKIH07CiAKLXN0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7Ci0gICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlcjsKLSAgICBWZWN0b3I8R2V0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwot
fTsKLQogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyOwogICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNp
b24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw2ICszMjgsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRl
KEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBH
ZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGFsc28gY2hlY2sgdGhlIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkLgorICAgICAgICAvLyBJZiB3ZSBoYXZl
IG9uZSB0aGF0IGd1YXJhbnRlZXMgdGhlIHByZXNlbmNlIG9mIHRoaXMgcHJvcGVydHksIHRoZW4g
dGhpcyBpcyBhbHdheXMgc2FmZQorICAgICAgICAvLyB0byBleGVjdXRlLgorICAgICAgICBGSVhN
RTsKKyAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZhbHVlID0gc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CiAgICAgICAgIGlmICh2YWx1
ZS5pc1RvcCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQxLDQyICszNDYsMzAg
QEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICAKICAg
ICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgLy8gV2UgY2FuJ3QgYWx3YXlzIGd1
YXJhbnRlZSB0aGF0IHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGlzIHNhZmUgdG8gZXhlY3V0ZSBpZiBp
dAotICAgICAgICAvLyBjb250YWlucyBsb2FkcyBmcm9tIHByb3RvdHlwZXMuIFdlIGtub3cgdGhh
dCBpdCB3b24ndCBsb2FkIGZyb20gdGhvc2UgcHJvdG90eXBlcyBpZgotICAgICAgICAvLyB3ZSB3
YXRjaCB0aGUgbXV0YWJpbGl0eSBvZiB0aGUgcHJvcGVydGllcyBiZWluZyBsb2FkZWQuIFNvLCBo
ZXJlIHdlIHRyeSB0bwotICAgICAgICAvLyBjb25zdGFudC1mb2xkIHByb3RvdHlwZSBsb2Fkcywg
YW5kIGlmIHRoYXQgZmFpbHMsIHdlIGNsYWltIHRoYXQgd2UgY2Fubm90IGhvaXN0LiBXZQotICAg
ICAgICAvLyBhbHNvIGtub3cgdGhhdCBhIGxvYWQgaXMgc2FmZSB0byBleGVjdXRlIGlmIHdlIGFy
ZSB3YXRjaGluZyB0aGUgcHJvdG90eXBlJ3MKLSAgICAgICAgLy8gc3RydWN0dXJlLgotICAgICAg
ICBmb3IgKGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+bXVsdGlHZXRCeU9m
ZnNldERhdGEoKS52YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCF2YXJpYW50LmFsdGVybmF0
ZUJhc2UoKSkgewotICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgcHJvdG90eXBlIGxvYWQu
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEpTVmFsdWUgYmFzZSA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwotICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IGdyYXBoLmZyZWV6ZShiYXNlKTsKLSAgICAg
ICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJl
V2F0Y2hlZAotICAgICAgICAgICAgICAgICYmIGZyb3plbi0+c3RydWN0dXJlKCktPmRmZ1Nob3Vs
ZFdhdGNoKCkKLSAgICAgICAgICAgICAgICAmJiBmcm96ZW4tPnN0cnVjdHVyZSgpLT5pc1ZhbGlk
T2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgYWxy
ZWFkeSB3YXRjaGluZyB0aGF0IGl0J3Mgc2FmZSB0byBsb2FkIGZyb20gdGhpcy4KLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9IGdyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHko
Ci0gICAgICAgICAgICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0
cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIGlmICghY29uc3RhbnRS
ZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvLyBDb3VsZG4ndCBjb25zdGFudC1mb2xkIGEgcHJv
dG90eXBlIGxvYWQuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkbid0IGhvaXN0Ci0gICAgICAgICAgICAg
ICAgLy8gYmVjYXVzZSB0aGUgc2FmZXR5IG9mIHRoZSBsb2FkIGRlcGVuZHMgb24gc3RydWN0dXJl
IGNoZWNrcyBvbiB0aGUgcHJvdG90eXBlLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSdyZSB0
b28gY2hlYXAgdG8gdmVyaWZ5IHRoYXQgaGVyZS4KKyAgICAgICAgLy8gY29udGFpbnMgbG9hZHMg
ZnJvbSBwcm90b3R5cGVzLiBJZiB0aGUgbG9hZCByZXF1aXJlcyBhIGNoZWNrIGluIElSLCB3aGlj
aCBpcyByYXJlLCB0aGVuCisgICAgICAgIC8vIHdlIGN1cnJlbnRseSBjbGFpbSB0aGF0IHdlIGRv
bid0IGtub3cgaWYgaXQncyBzYWZlIHRvIGV4ZWN1dGUgYmVjYXVzZSBmaW5kaW5nIHRoYXQKKyAg
ICAgICAgLy8gY2hlY2sgaW4gdGhlIGFic3RyYWN0IHN0YXRlIHdvdWxkIGJlIGhhcmQuIElmIHRo
ZSBsb2FkIHJlcXVpcmVzIHdhdGNocG9pbnRzLCB3ZSBqdXN0CisgICAgICAgIC8vIGNoZWNrIGlm
IHdlJ3JlIG5vdCBpbiBhIGNsb2JiZXJlZCBzdGF0ZSAoaS5lLiBpbiBiZXR3ZWVuIGEgc2lkZSBl
ZmZlY3QgYW5kIGFuCisgICAgICAgIC8vIGludmFsaWRhdGlvbiBwb2ludCkuCisgICAgICAgIGZv
ciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdldENhc2UubWV0aG9k
KCkua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6IC8vIE9LIGJlY2F1c2UgY29uc3RhbnRzIGFyZSBhbHdh
eXMgc2FmZSB0byBleGVjdXRlLgorICAgICAgICAgICAgY2FzZSBMb2FkOiAvLyBPSyBiZWNhdXNl
IHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGhhcyBpdHMgb3duIGNoZWNrcyBmb3IgbG9hZGluZyBmcm9t
IHNlbGYuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGcm9t
UHJvdG90eXBlOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgT0sgaWYgdGhlIHN0YXRlIGlzbid0
IGNsb2JiZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2UuCisgICAgICAgICAgICAg
ICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpICE9IFN0cnVjdHVyZXNBcmVXYXRj
aGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBlV2l0aENoZWNrOgorICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgcmFyZS4gV2UgZW1pdHRlZCBhbiBhY3R1YWwg
Y2hlY2sgaW4gSVIuIFdlIGRvbid0IGtub3cgaWYgdGhlCisgICAgICAgICAgICAgICAgLy8gc3Rh
dGUgcHJvdmVzIHRoZSBjaGVjayB0byBiZSBzdXBlcmZsdW91cy4gV2UgY291bGQgY2hhbmdlIHRo
aXMsIGJ1dCBpdCdzIGhhcmQKKyAgICAgICAgICAgICAgICAvLyBhbmQgcHJvYmFibHkgbm90IHdv
cnRoIGl0LgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3aWxsIGVpdGhlcjoKLSAg
ICAgICAgICAgIC8vIC0gTm90IGxvYWQgZnJvbSB0aGUgcHJvdG90eXBlIGJlY2F1c2UgY29uc3Rh
bnQgZm9sZGluZyB3aWxsIHN1Y2NlZWQgaW4gdGhlCi0gICAgICAgICAgICAvLyAgIGJhY2tlbmQs
IG9yCi0gICAgICAgICAgICAvLyAtIEVtaXQgaW52YWxpZCBjb2RlIHRoYXQgZmFpbHMgd2F0Y2hw
b2ludCBjaGVja3MuIFRoaXMgY291bGQgaGFwcGVuIGlmIHRoZQotICAgICAgICAgICAgLy8gICBw
cm9wZXJ0eSBiZWNvbWVzIG11dGFibGUgYWZ0ZXIgdGhpcyBwb2ludCwgc2luY2Ugd2UgYWxyZWFk
eSBzZXQgdGhlIHdhdGNocG9pbnQKLSAgICAgICAgICAgIC8vICAgYWJvdmUuIFRoaXMgY2FzZSBp
cyBPSyBzaW5jZSB0aGUgY29kZSB3aWxsIGZhaWwgd2F0Y2hwb2ludCBjaGVja3MgYW5kIG5ldmVy
Ci0gICAgICAgICAgICAvLyAgIGdldCBpbnN0YWxsZWQuCiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcw
LDI0ICszODcwLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0RGF0YSYgZGF0YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKIAotICAgICAg
ICBpZiAoZGF0YS52YXJpYW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGRhdGEuY2FzZXMu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQ
aGkgZnVuY3Rpb24gd2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2UgdGhhdC4KICAg
ICAgICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRh
dGEudmFyaWFudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJp
YW50cy5zaXplKCk7IGktLTspCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMu
c2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOwogICAgICAgICBMQmFzaWNCbG9jayBl
eGl0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGZhaWwiKSk7CiAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TXVsdGlHZXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7CiAgICAgICAgIAogICAgICAgICBWZWN0
b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0Owot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewot
ICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpLnNpemUo
KTsgai0tOykgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFyaWFu
dC5zdHJ1Y3R1cmVTZXQoKVtqXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNl
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENh
c2UgPSBkYXRhLmNhc2VzW2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZ2V0Q2Fz
ZS5zZXQoKS5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZhcmlhbnQuc2V0KClbal07CiAgICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3Ry
dWN0dXJlKTsKICAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3Ry
dWN0dXJlSUQoc3RydWN0dXJlKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAgICAgICAg
IH0KQEAgLTM4OTgsMjkgKzM4OTgsMzcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxW
YWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0
YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0
YS5jYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNl
IGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOworICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Qg
bWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxv
Y2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHZXRCeUlkVmFy
aWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgIGJhc2VTZXQubWVy
Z2UodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0Owot
ICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdDsKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmFsdGVybmF0ZUJhc2UoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0YW50UmVzdWx0ID0g
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgICAgICB2YXJp
YW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zm
c2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbnN0YW50UmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KGNvbnN0YW50UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0Q2FzZTo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBHZXRCeU9mZnNldENhc2U6OkNvbnN0YW50OgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKG1ldGhvZC5jb25zdGFu
dCgpLT52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0Q2FzZTo6TG9hZDoKKyAgICAgICAgICAgIGNh
c2UgR2V0QnlPZmZzZXRDYXNlOjpMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgICAgIGNhc2Ug
R2V0QnlPZmZzZXRDYXNlOjpMb2FkRnJvbVByb3RvdHlwZVdpdGhDaGVjazogewogICAgICAgICAg
ICAgICAgIExWYWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFr
UG9pbnRlcih2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zmc2V0Q2FzZTo6TG9h
ZCkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIo
bWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzSW5saW5lT2Zmc2V0KG1ldGhvZC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2Jq
ZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5KHBy
b3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkoCisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRo
b2Qub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1
bHQpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcg
KzEwNSw3IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVu
Y3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQogewotICAgIGlm
IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRz
KCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZHNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkK
ICAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlO
YW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgIAogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwpAQCAtMTMyLDQ3ICsxMzIsMzAgQEAg
c3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2
b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQorc3RhdGljIHZvaWQgY2hl
Y2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChvYmplY3Qt
PnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9u
V2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlz
IGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3Nl
cnQKLSAgICAgICAgICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gYnJhbmNoU3RydWN0dXJlKAot
ICAgICAgICAgICAgICAgIGppdCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5lZmZlY3RpdmVXYXRj
aHBvaW50KTsKLSAgICAgICAgICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KKyAgICBpZiAo
Y29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkg
eworICAgICAgICBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9u
V2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0g
ICAgICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7
CisgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0
YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3Rv
dHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywK
LSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1
cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkp
OwotICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90
eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CitzdGF0
aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAg
ICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9u
LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Cisg
ICAgfQogfQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVw
YXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgdGFyZ2V0KQpAQCAtMjk2LDExICsyNzksMTIgQEAgc3RhdGljIEZ1bmN0aW9u
UHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHVi
KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAg
RnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5
LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1
Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0
cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
OworICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVl
UmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzMyArMzMwLDI1IEBAIHN0YXRp
YyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5l
d0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1w
dXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9j
aykpOwogCiAgICAgaWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFk
ZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBj
dXJyU3RydWN0dXJlID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAw
OwotICAgIGlmIChjaGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQg
PSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7
ICsraSwgKytpdCkgewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3Ry
dWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJl
KiBwcm90b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAg
IGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0
Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1w
dXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9j
aykpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgIHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywg
c3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBB
U1NFUlQoIXByb3RvT2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3Ry
dWN0dXJlKTsKLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAg
ICAgIGNvbmRpdGlvblNldCwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMs
IHNjcmF0Y2hHUFIpOwogICAgIAorICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICBp
ZiAoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKKyAgICBlbHNlCisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CiAgICAgY3VyclN0cnVjdHVy
ZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKKyAg
ICAKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYg
KGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhh
dmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJv
bSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRG
cm9tUHJveHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQ
Uik7CkBAIC02MjcsOSArNjAzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZv
ckNlbGwoVgogICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qo
dm0pOwogICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KLSAgICBBU1NFUlQo
IXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgaWYgKHR5
cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1
cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVy
dHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
IAogICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsKQEAgLTgyNywyMSArODAyLDIyIEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICB9CiAKICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNh
Y2hlZE9mZnNldCgpOwotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0g
ICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CiAgICAgCiAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xv
dEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1By
b3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0g
ICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9w
ZXJ0eU1pc3MoZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3Mo
Ci0gICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50
LCBvZmZzZXQpOwotICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQor
ICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXQoZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwo
KSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBz
dHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgb2Zmc2V0
ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAg
IAogICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojpmcm9tKHN0dWJJbmZvKTsKQEAgLTg1Miw3ICs4MjgsNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZv
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9m
ZnNldCwgCiAgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRj
aHBvaW50U2V0KCksIAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJv
dXRpbmUpOwpAQCAtODcxLDcgKzg0Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlC
dWlsZEdldEJ5SUQKICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAg
ICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAg
ICAgICAgY29uZGl0aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihj
b2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYg
Kzk2OSwyOCBAQCBzdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9s
ZFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJl
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRp
YyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2
bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBu
YW1lKGlkZW50KTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAg
ICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2Jq
ZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1l
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShv
bGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYg
KCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2Ug
ZG9uJ3QgaGF2ZQogICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAg
ICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpCiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAg
IC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0
aGUgc3RydWN0dXJlIGhhcwpAQCAtMTAyMCwxNCArOTk4LDEzIEBAIHN0YXRpYyBTdHJ1Y3R1cmUq
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAg
dGhpcyEgSW1wbGVtZW50IGl0IQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzA5MTQKICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChub3JtYWxpemVQ
cm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAvLyBlbWl0UHV0VHJhbnNpdGlvblN0dWIKKyAgICBpZiAocHV0S2luZCA9
PSBOb3REaXJlY3QpIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvcGVydHlTZXR0ZXJNaXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAg
ICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCA9IHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5l
ID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CkBAIC0xMDgzLDE3ICsxMDYwLDggQEAgc3RhdGljIFN0
cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKICAgICAgICAg
b2xkU3RydWN0dXJlKSk7CiAgICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAot
ICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2so
KSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQUjEp
OwotICAgICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAg
IGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQo
KTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSMSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbnMoCisgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKQEAgLTEyMjgsNyArMTE5Niw3IEBAIHN0
YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAKICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBpZiAo
YWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCkBAIC0xMjU2LDggKzEyMjQsOCBAQCBzdGF0
aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgICAgICBleGVjLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAog
ICAgICAgICAgICAgc3RydWN0dXJlKTsKLQotICAgIHJldHVybiBvbGRTdHJ1Y3R1cmU7CisgICAg
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAt
MTI4MSwxMiArMTI0OSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eUlECiAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxl
UHV0KCkpIHsKICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3
UHJvcGVydHkpIHsKIAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0
UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwg
aWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLSAgICAgICAgICAgIGlmICghb2xkU3Ry
dWN0dXJlKQorICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0OworICAgICAgICAgICAg
aWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNs
b3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBl
Q2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
CiAgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dCgKQEAgLTEyOTQsNyArMTI2MSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5SUQKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRj
aEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWls
ZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwg
cHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFu
c2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEy
LDIwICsxMjc5LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQK
ICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAg
ICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0g
ICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50
ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUs
IHNsb3QuYmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJ
bnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBp
ZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQg
PSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAg
ICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAg
ICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgPSBj
b25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCiAgICAgICAgIFBv
bHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3Vs
dCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBp
ZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LAor
ICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwg
c3R1YkluZm8sIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBm
YWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKQEAgLTEzMzYsNyArMTMwNSw3IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1
dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5
SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAg
ICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNldHRlcigp
LCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNs
b3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKQEAgLTEzODAsMTcgKzEzNDksMTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byBy
ZWN1cnNpb24uCiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1
dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotCi0gICAgICAgICAgICBpZiAo
IW9sZFN0cnVjdHVyZSkgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAg
ICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0
aW9uU2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAg
ICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihleGVjKTsKICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJv
dXRpbmU7CiAgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0
QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUs
IHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVj
dHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsCiAgICAgICAgICAgICAgICAgICAgIHN0dWJS
b3V0aW5lKSk7CiAKICAgICAgICAgfSBlbHNlIHsKQEAgLTE0MjMsMjEgKzEzOTEsMjQgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgIGlmICgoc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKICAgICAgICAgJiYg
c3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJv
dG90eXBlQ2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNh
Y2hlZE9mZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFz
ZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVBy
b3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwg
cHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQ
cm90b3R5cGVDaGFpbikKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAg
ICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0KAorICAgICAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgp
LCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAg
ICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAg
ICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0
aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExp
c3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1
dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0
dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3Rv
bUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAg
IGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHVi
SW5mbywgY29uZGl0aW9uU2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNl
LCBudWxscHRyLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKQEAgLTE0NDgs
NyArMTQxOSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAg
ICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAg
ICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6
OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNv
dW50LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7
CiAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFi
ZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTE0ODcsMTEgKzE0NTgsMTUgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgqdm0p
OwogICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgSlNWYWx1ZSBm
b3VuZFNsb3RCYXNlID0gd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCk7Ci0g
ICAgc2l6ZV90IGNvdW50ID0gIWZvdW5kU2xvdEJhc2UgfHwgZm91bmRTbG90QmFzZSAhPSBiYXNl
ID8gCi0gICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywg
c3RydWN0dXJlLCBmb3VuZFNsb3RCYXNlLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgOiAwOwotICAg
IGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICBp
ZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAg
ICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAg
ICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5TWlzcyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKICAgICAKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdDsKQEAgLTE1MTYsNyArMTQ5MSw2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAg
ICB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihleGVjKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwog
ICAgIAogICAgIHsKQEAgLTE1NDcsMTggKzE1MjEsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5UmVwYXRjaEluKAogICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50U2V0KCkpCiAgICAg
ICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQo
Y29kZUJsb2NrKSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewot
ICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUt
PnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3Rv
U3RydWN0dXJlID0gcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvU3Ry
dWN0dXJlLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAg
ICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0
cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkK
LSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHko
aWRlbnQsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBj
dXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9CisgICAgICAgIGNoZWNrT2JqZWN0
UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2Rl
QmxvaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkp
KSwgcmVzdWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxODczNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgi
Ci0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCi0j
aW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKLXsKLSAgICBBU1NFUlQo
bV9wcm90b3R5cGUuaXNOdWxsKCkgfHwgbV9wcm90b3R5cGUuaXNPYmplY3QoKSk7Ci0gICAgaWYg
KHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoU3RydWN0dXJl
KiBjdXJyZW50ID0gYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1
cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92
ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogaGVhZCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJv
dG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAg
aWYgKG1fcHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1
Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChtX3Byb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCi0gICAg
ICAgIG1fdmVjdG9yLmFwcGVuZChjdXJyZW50KTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
KiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKLSAgICA6IG1fZ2xvYmFsT2Jq
ZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5w
cm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIG1fdmVjdG9yLmFwcGVu
ZChwcm90b3R5cGVTdHJ1Y3R1cmUpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbikKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29r
dXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGNoYWluLT5o
ZWFkKClbaV07ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0u
Z2V0KCkpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgdW5zaWduZWQgY291bnQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9v
a3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkp
OwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigp
Ci17Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKCkgY29u
c3QKLXsKLSAgICBKU1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3RvdHlwZTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAhPSBtX3ZlY3Rvcltp
XSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9
IG1fdmVjdG9yW2ldLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhTdHJ1Y3R1cmVDaGFp
biogY2hhaW4pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9y
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBjaGFpbi0+aGVhZCgp
W2ldLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoY2hh
aW4tPmhlYWQoKVttX3ZlY3Rvci5zaXplKCldKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJj
ZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0
Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNl
dChvZmZzZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbV92ZWN0b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHko
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRha2VzU2xvd1BhdGhJ
bkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1w
dXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLUpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW5h
bFByb3RvdHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rvci5pc0VtcHR5KCkpOwot
ICAgIGlmIChtX3ZlY3Rvci5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGFzT2JqZWN0KG1f
cHJvdG90eXBlKTsKLSAgICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgp
IC0gMl0tPnN0b3JlZFByb3RvdHlwZSgpKTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjpvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25z
dAotewotICAgIHJldHVybiBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2dsb2JhbE9iamVjdAot
ICAgICAgICAmJiBtX3Byb3RvdHlwZSA9PSBvdGhlci5tX3Byb3RvdHlwZQotICAgICAgICAmJiBt
X3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjpnYXRoZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKSBj
b25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBKU09iamVj
dCogY3VycmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpOwotICAgICAgICBT
dHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAgICAgdmVjdG9yLmFwcGVu
ZChDb25zdGFudFN0cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRTdHJ1Y3R1cmUp
KTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlw
ZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFsT2JqZWN0KTsKLSAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJm1fcHJvdG90eXBlKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWRQb2ludGVyKCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNv
bnRleHQob3V0LCAwKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewot
ICAgIG91dC5wcmludCgKLSAgICAgICAgIihnbG9iYWwgPSAiLCBSYXdQb2ludGVyKG1fZ2xvYmFs
T2JqZWN0KSwgIiwgaGVhZCA9ICIsCi0gICAgICAgIGluQ29udGV4dChtX3Byb3RvdHlwZSwgY29u
dGV4dCksICIsIHZlY3RvciA9IFsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9yW2ldLCBjb250ZXh0KSk7
Ci0gICAgb3V0LnByaW50KCJdKSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0
dXJlQ2hhaW4uaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZpbmUgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbl9oCi0KLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xh
c3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1wQ29udGV4dDsKLQotY2xh
c3MgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4+IHsKLXB1YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSop
OwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZSogaGVhZCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5z
aWduZWQgY291bnQpOwotICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7Ci0gICAgCi0gICAg
Ym9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoU3RydWN0dXJlQ2hh
aW4qKSBjb25zdDsKLSAgICBib29sIG1heUludGVyY2VwdFN0b3JlVG8oVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7Ci0gICAgYm9vbCBpc05vcm1hbGl6ZWQoKTsKLSAgICAKLSAgICBib29sIHRha2Vz
U2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCk7Ci0gICAgCi0gICAgSlNWYWx1ZSBwcm90
b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAgIAotICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0gICAgU3RydWN0dXJlKiBh
dChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsgfQotICAgIFN0
cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotICAgIAotICAgIEpTT2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0OwotICAg
IAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmxhc3QoKTsg
fQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
JikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hh
aW4mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNo
ZWNrVmVjdG9yJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAgICAKLXByaXZh
dGU6Ci0gICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotICAgIEpTVmFsdWUgbV9w
cm90b3R5cGU7Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9yOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxODcz
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RpY3Rpb25h
cnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2lu
ZDsgfQogICAgIGJvb2wgaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBk
aWN0aW9uYXJ5S2luZCgpID09IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQ7IH0KICAgCi0gICAgYm9v
bCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQo
KSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZygpOyB9CisgICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlv
bmFyeUtpbmQKKyAgICAgICAgICAgICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZygpCisgICAgICAgICAgICAmJiAhKHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVy
dHlTbG90KCkgJiYgIXR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRz
KCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQor
ICAgICAgICAgICAgJiYgdHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKQor
ICAgICAgICAgICAgJiYgdHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHMoKTsKKyAgICB9CiAKICAgICAvLyBXZSB1c2UgU2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBm
b3Igc3RydWN0dXJlcyB0aGF0IG1heSBnZXQgbmV3IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRv
IHByZXZlbnQKICAgICAvLyBERkcgZnJvbSBpbmxpbmluZyBwcm9wZXJ0eSBhY2Nlc3NlcyBzaW5j
ZSBzdHJ1Y3R1cmVzIGRvbid0IHRyYW5zaXRpb24gd2hlbiBhIG5ldyBpbXB1cmUgcHJvcGVydHkg
YXBwZWFycy4KQEAgLTIwMiw3ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gdHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKTsKICAgICB9Ci0KKyAg
ICAKICAgICAvLyBUeXBlIGFjY2Vzc29ycy4KICAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0
IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9i
bG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3Qo
KSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTM2LDYgKzUzNiw3IEBAIHB1
YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb2RlKCk7CiAKICAg
ICB2b2lkIHJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZp
ZXImLCBXYXRjaHBvaW50Kik7CisgICAgCiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcg
b25jZSBpdCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257594</attachid>
            <date>2015-07-27 14:46:22 -0700</date>
            <delta_ts>2015-07-27 22:56:37 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>243928</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODczNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01ODgsNiArNTkwLDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2
MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIy
MTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNG
RjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmNwcCAqLzsgfTsKKwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuY3BwICovOyB9OworCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9w
ZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJG
MDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5NCw2ICs3MDQsOCBA
QAogCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5
NkIgLyogREZHRWRnZS5jcHAgKi87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmNwcCAqLzsgfTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjRCNTIyMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBG
RjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZG
IC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4
RUJENTgwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8q
IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlG
RiAvKiB1ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICov
OyB9OwpAQCAtMTM4OSw4ICsxNDAxLDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8q
IFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NC
QzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMx
OEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8q
IFNwaWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cCAqLzsgfTsKLQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFs
aXplci5oICovOyB9OwogCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5
NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg1Myw2
ICsxODYzLDggQEAKIAkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0Qg
LyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFC
NDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdN
aW5pZmllZEdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0Qx
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBk
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVG
MCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
SmV0dGlzb25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkx
OEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM0
NCw2ICsyMzU2LDE0IEBACiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFM0ZGMUI2MThB
QUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZn
L0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQzRTQwNDFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9w
ZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2
QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdC
YXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFD
RjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21p
bmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NDUsNiArMjQ2NSw4IEBACiAJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9
IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0Rjgx
QUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDVBMUI2
MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBwYXRoID0gZGZn
L0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzMwMTU4
RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fz
c2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfZGVjb2RlLmM7IHBhdGggPSBkaXNhc3Nl
bWJsZXIvdWRpczg2L3VkaXM4Nl9kZWNvZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMxNTUsOCArMzE3Nyw2IEBACiAJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQ
YXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4
NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZDMTc5NzM4QjgwMDlERjc0NCAvKiBERkdG
YWlsZWRGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRmFpbGVkRmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RDE3OTczOEI4MDA5REY3NDQg
LyogREZHRmFpbGVkRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ZhaWxlZEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RTE3OTczOEI4MDA5REY3NDQgLyog
REZHRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0ZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0ODMsOCArNDUwMyw2IEBACiAJCQkJQTdBOEFGMkIxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLywKLQkJCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCi0JCQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUg
LyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAwODA2NkRE
IC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMTJCQkZGMzFCMDQ0QTk4MDA2NjRCNjkg
LyogSW50bE9iamVjdC5jcHAgKi8sCkBAIC00ODY3LDYgKzQ4ODUsMTAgQEAKIAkJCQlBNzA0RDhG
RjE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCAqLywK
IAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8s
CiAJCQkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLywK
KwkJCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8sCisJCQkJ
MEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAgKi8sCisJCQkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggKi8sCiAJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0FsbG9jYXRvci5oICovLAogCQkJCUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFs
eXNpcy5oICovLApAQCAtNTAyNiw2ICs1MDQ4LDggQEAKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCiAJCQkJMEY4RjE0MzExQURGMDkwMTAwRUQ3
OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwICovLAogCQkJCTBGOEYxNDMyMUFERjA5
MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCisJCQkJMEZGMkNENTkx
QjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKKwkJCQkw
RkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywK
IAkJCQkwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCAq
LywKIAkJCQkwRkMzQ0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmgg
Ki8sCiAJCQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8sCkBAIC01MzMxLDYgKzUzNTUsMTAgQEAKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0ExNEY1
QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkx
NENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLywK
KwkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwICovLAorCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oICovLAorCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCisJCQkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8sCiAJCQkJOTY5QTA3OTQwRUQxRDNBRTAw
RjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8q
IE9wY29kZS5oICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5o
ICovLApAQCAtNTM0Miw2ICs1MzcwLDggQEAKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0
MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUzN0Yw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKKwkJCQkwRkQzRTQwNzFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLAorCQkJCTBGRDNFNDA4MUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGOTMzMjk5MTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCkBAIC01ODQxLDYgKzU4NzEsNyBAQAogCQkJ
CUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRDQjlGRiAvKiBERkdEaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBF
MUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUz
NENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
LApAQCAtNjA5Myw2ICs2MTI0LDcgQEAKIAkJCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyog
Q29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4ODE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRj
aGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERG
R011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0
NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjEwMiw3ICs2MTM0LDYgQEAKIAkJCQlBN0E4
QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAotCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJu
YWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5
IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAx
MTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMTUsNiArNjE0Niw3IEBA
CiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjQxMSw5ICs2NDQzLDExIEBACiAJCQkJMkFBRDk2
NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0Nh
bGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyog
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThC
NDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0Iy
MjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIx
QjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1h
dGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcw
ODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NDkwLDYgKzY1MjQsNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEg
LyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFD
MTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Bo
aUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYg
LyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MjgxLDYgKzczMTYsNyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlD
b25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJB
IC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1
MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3
ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTcyOTEsNiArNzMyNyw3IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZU
TExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3
RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZG
MkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3
MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNDEsNiArNzM3OCw3IEBA
CiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2Vu
dFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM1MSw3ICs3Mzg5LDYgQEAKIAkJ
CQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAw
QkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNG
OTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJw
cmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8q
IEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNjgsNiArNzQwNSw3
IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82
NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nl
c3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjE1LDYgKzc2NTMs
NyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWlu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwQjFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzAxM0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4RiAv
KiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MjQsNiArNzY2Myw3
IEBACiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRl
bXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE4RDNDRjFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJh
dG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg3MzQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0MCw3ICszNDAsNiBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2Fj
aGVTdGF0dXMoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVj
dHVyZSA9IDA7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IDA7
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSAwOwogICAgICAgICAgICAgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewpAQCAtMzcwLDExICszNjksNiBAQCB2b2lk
IENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJwcm90b3R5cGVTdHJ1Y3QiLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjaGFpbikgewot
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcENo
YWluKG91dCwgY2hhaW4sIGlkZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsIGxpc3Qg
PSAlcDogWyIsIGxpc3QpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsaXN0LT5zaXplKCk7ICsraSkgewpAQCAtMzgyLDkgKzM3Niw5IEBAIHZvaWQgQ29kZUJsb2Nr
OjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5w
cmludGYoIiwgIik7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIigiKTsKICAgICAg
ICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJiYXNlIiwgbGlzdC0+YXQoaSkuc3Ry
dWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QtPmF0KGkpLmNo
YWluKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0LT5hdChpKS5jb25kaXRpb25T
ZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwg
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBsaXN0LT5hdChpKS5j
aGFpbigpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQobGlzdC0+
YXQoaSkuY29uZGl0aW9uU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTYsMTAg
KzQ1MCw4IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cygKICAgICAg
ICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLCBpZGVudCk7CiAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIsICIpOwogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAi
bmV4dCIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLCBpZGVu
dCk7Ci0gICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFp
biwgaWRlbnQpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpCisgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiLCAiLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1Bv
aW50ZXIoc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9s
aXN0OiB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlzdCA9IFsiKTsKQEAgLTQ4Mywx
MCArNDc1LDggQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAg
ICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2IiwgYWNjZXNzLm9s
ZFN0cnVjdHVyZSgpLCBpZGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiwgIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQi
LCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhY2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5w
cmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBh
Y2Nlc3MuY2hhaW4oKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCBhY2Nlc3MuY29uZGl0
aW9uU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dC5wcmludCgidW5rbm93biIpOwogICAgICAgICAgICAgICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRjaHBv
aW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKIAog
ICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmls
ZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlmIChp
c09uTGlzdCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRT
dGF0dXMuY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDggQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNv
bXB1dGVGb3IoCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywg
U3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUgdGhh
dAogICAgIC8vIGhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpIGJ1dCBmb3Igd2hpY2ggd2Ug
ZG9uJ3QKQEAgLTQwLDMyICs0MCwyNiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0
dXM6OmNvbXB1CiAgICAgLy8gdGhhdCwgeWV0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAKKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSk7CisgICAgCiAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJ
bkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7
CiAgICAgCiAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9
IElubGluZWFibGU7CiAgICAgCi0gICAgaWYgKGNoYWluICYmIGNoYWluQ291bnQpIHsKLSAgICAg
ICAgcmVzdWx0Lm1fY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigK
LSAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGhlYWRTdHJ1Y3R1cmUsIGNoYWluLCBjaGFpbkNv
dW50KSk7CisgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3Vs
dC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgCi0gICAgICAgIGlmICgh
cmVzdWx0Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICBpZiAoIXJlc3VsdC5tX2Nv
bmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgIHJldHVy
biBza2lwKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoaGVhZFN0cnVjdHVyZS0+dGFrZXNTbG93
UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotICAgICAgICAgICAgfHwgcmVzdWx0Lm1fY2hh
aW4tPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdGFrZXNTbG93UGF0aCgpOwotICAgICAgICAKLSAgICAgICAgSlNPYmplY3QqIGN1cnJl
bnRPYmplY3QgPSByZXN1bHQubV9jaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICAgICAg
U3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gcmVzdWx0Lm1fY2hhaW4tPmxhc3QoKTsKLSAg
ICAgICAgCi0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9iamVj
dCk7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2UgPSByZXN1bHQubV9jb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKTsKKyAgICAgICAgQVNTRVJUKGJhc2Uua2luZCgp
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CiAgICAgICAgIAotICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCByZXN1
bHQubV9hdHRyaWJ1dGVzKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQubV9vZmZzZXQg
PSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCByZXN1bHQubV9hdHRyaWJ1dGVz
KTsKLSAgICB9CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJhc2Uub2Zmc2V0KCk7CisgICAg
fSBlbHNlCisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSh1aWQpOwogICAgIAogICAgIGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZz
ZXQpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCShyZXZpc2lvbiAx
ODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIENvbXBsZXhHZXRTdGF0
dXNfaAogI2RlZmluZSBDb21wbGV4R2V0U3RhdHVzX2gKIAotI2luY2x1ZGUgIkludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAgIENvbXBsZXhHZXRT
dGF0dXMoKQogICAgICAgICA6IG1fa2luZChTaG91bGRTa2lwKQogICAgICAgICAsIG1fb2Zmc2V0
KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9hdHRyaWJ1dGVzKFVJTlRfTUFYKQogICAgIHsK
ICAgICB9CiAgICAgCkBAIC05NywyMSArOTYsMTcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAg
ICBzdGF0aWMgQ29tcGxleEdldFN0YXR1cyBjb21wdXRlRm9yKAotICAgICAgICBDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLAotICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKKyAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9raW5kOyB9Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlczsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3BlY2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBj
b25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0
OyB9CiAgICAgCiBwcml2YXRlOgogICAgIEtpbmQgbV9raW5kOwogICAgIFByb3BlcnR5T2Zmc2V0
IG1fb2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKLSAgICBKU1ZhbHVlIG1fc3Bl
Y2lmaWNWYWx1ZTsKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
bnN0YW50U3RydWN0dXJlQ2hlY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcAkocmV2aXNpb24gMTg3MzQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hl
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsK
LSAgICBvdXQucHJpbnQoCi0gICAgICAgICIoQ2hlY2sgaWYgIiwgaW5Db250ZXh0KEpTVmFsdWUo
bV9jb25zdGFudCksIGNvbnRleHQpLCAiIGhhcyBzdHJ1Y3R1cmUgIiwKLSAgICAgICAgcG9pbnRl
ckR1bXBJbkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKSIpOwotfQotCi12b2lkIENv
bnN0YW50U3RydWN0dXJlQ2hlY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAg
ICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Ci19Ci0KLVN0cnVjdHVyZSogc3RydWN0dXJl
Rm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvciwgSlNDZWxsKiBj
b25zdGFudCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIGlmICh2ZWN0b3JbaV0uY29uc3RhbnQoKSA9PSBjb25zdGFudCkKLSAgICAgICAg
ICAgIHJldHVybiB2ZWN0b3JbaV0uc3RydWN0dXJlKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVj
a1ZlY3RvciYgYSwgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgYikKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBhLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUq
IG90aGVyU3RydWN0dXJlID0gc3RydWN0dXJlRm9yKGIsIGFbaV0uY29uc3RhbnQoKSk7Ci0gICAg
ICAgIGlmICghb3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKGFbaV0uc3RydWN0dXJlKCkgIT0gb3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIG1lcmdlSW50byhj
b25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIHRhcmdldCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzb3VyY2Uu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmVGb3IodGFyZ2V0LCBzb3VyY2Vb
aV0uY29uc3RhbnQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFyZ2V0LmFw
cGVuZChzb3VyY2VbaV0pOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0jZGVmaW5lIENvbnN0YW50U3RydWN0
dXJlQ2hlY2tfaAotCi0jaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKLSNpbmNsdWRlICJKU0NlbGwu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb25z
dGFudFN0cnVjdHVyZUNoZWNrIHsKLXB1YmxpYzoKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNr
KCkKLSAgICAgICAgOiBtX2NvbnN0YW50KG51bGxwdHIpCi0gICAgICAgICwgbV9zdHJ1Y3R1cmUo
bnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2so
SlNDZWxsKiBjb25zdGFudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogbV9jb25z
dGFudChjb25zdGFudCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0gICAgewot
ICAgICAgICBBU1NFUlQoISFtX2NvbnN0YW50ID09ICEhbV9zdHJ1Y3R1cmUpOwotICAgIH0KLSAg
ICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbnN0YW50OyB9Ci0g
ICAgCi0gICAgSlNDZWxsKiBjb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnQ7IH0K
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9
Ci0gICAgCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQq
KSBjb25zdDsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXByaXZh
dGU6Ci0gICAgSlNDZWxsKiBtX2NvbnN0YW50OwotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7
Ci19OwotCi10eXBlZGVmIFZlY3RvcjxDb25zdGFudFN0cnVjdHVyZUNoZWNrLCAyPiBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yOwotCi1TdHJ1Y3R1cmUqIHN0cnVjdHVyZUZvcihjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIEpTQ2VsbCogY29uc3RhbnQpOwot
Ym9vbCBhcmVDb21wYXRpYmxlKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImLCBj
b25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7Ci12b2lkIG1lcmdlSW50byhjb25z
dCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImIHRhcmdldCk7Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8g
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMDYsOCArMjA2LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNv
bXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNh
bGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21w
bGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsK
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFy
aWFudCh2YXJpYW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
c2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM0LDkgKzM0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0
QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVj
dHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAg
ICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
ICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKQEAg
LTQ0LDEzICs0NSw4IEBAIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAgICAgICAg
QVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKCFjaGFpbik7
CiAgICAgfQotICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBj
aGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3RhbnRDaGVja3MpOwotICAgIH0KIH0KLQorICAgICAg
ICAgICAgICAgICAgICAgCiBHZXRCeUlkVmFyaWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAK
IEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3Ro
ZXIpCkBAIC02Miw4ICs1OCw3IEBAIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25z
dCBHZXQKIEdldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdl
dEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3Ry
dWN0dXJlU2V0OwotICAgIG1fY29uc3RhbnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tz
OwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2Nv
bmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIu
bV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2Fs
bExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9j
YWxsTGlua1N0YXR1cyk7CkBAIC03MiwxNiArNjcsNiBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJ
ZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQg
R2V0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRl
cm5hdGVCYXNlKQotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRl
cm5hdGVCYXNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBz
dHJ1Y3R1cmU7Ci19Ci0KIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0
IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90
aGVyLm1fYWx0ZXJuYXRlQmFzZSkKQEAgLTkwLDEwICs3NSwxMyBAQCBib29sIEdldEJ5SWRWYXJp
YW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
bV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFhcmVDb21wYXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVy
Lm1fY29uc3RhbnRDaGVja3MpKQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1lcmdlZENvbmRpdGlvblNldCA9CisgICAgICAgIG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgo
b3RoZXIubV9jb25kaXRpb25TZXQpOworICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIG1lcmdlSW50byhvdGhlci5t
X2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsKKyAgICBtX2NvbmRpdGlvblNldCA9
IG1lcmdlZENvbmRpdGlvblNldDsKICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0
cnVjdHVyZVNldCk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTIsOCArMTAwLDcgQEAg
dm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAg
ICBvdXQucHJpbnQoCi0gICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250
ZXh0KSwgIiwgIiwKLSAgICAgICAgIlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hl
Y2tzLCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0
KCksIGNvbnRleHQpLCAiLCAiLCBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsK
ICAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQogICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRl
QmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsK
ICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4
NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNyw4ICsyNyw2IEBACiAjZGVmaW5lIEdldEJ5SWRWYXJpYW50X2gK
IAogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5oIgotI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVTZXQuaCIKQEAgLTQzLDcgKzQxLDcgQEAgY2xhc3MgR2V0QnlJZFZhcmlhbnQgewog
cHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50KAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBp
bnZhbGlkT2Zmc2V0LAotICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFp
biA9IG51bGxwdHIsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAKICAgICB+R2V0
QnlJZFZhcmlhbnQoKTsKQEAgLTU1LDkgKzUzLDEwIEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQogICAgIFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KLSAg
ICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0KLSAgICBKU09iamVjdCogYWx0ZXJuYXRl
QmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRlQmFzZTsgfQotICAgIFN0cnVjdHVyZVNl
dCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CisKKyAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgYSBjb25k
aXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3RvdHlwZSBsb2FkLgorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVy
biBtX2NvbmRpdGlvblNldDsgfQorICAgIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAt
NzAsOCArNjksNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHZXRCeUlkU3RhdHVzOwog
ICAgIAogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKLSAgICBDb25zdGFudFN0cnVj
dHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJu
YXRlQmFzZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
ICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KGluQ29udGV4dChKU1ZhbHVlKG1fb2JqZWN0
KSwgY29udGV4dCksICI6ICIsIGluQ29udGV4dChtX2NvbmRpdGlvbiwgY29udGV4dCkpOworfQor
Cit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1dHVyZSogc3RydWN0dXJlKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
OjpzdHJ1dGN1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi52
YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSk7Cit9CisK
K2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUsIG1fb2JqZWN0
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKCkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
cmV0dXJuIGlzU3RpbGxWYWxpZChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxp
ZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1
cmVFbnN1cmVzVmFpZGl0eSgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkobV9v
YmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZv
cnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBlZmZvcnQpOworfQorCitib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZm
b3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dChtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9w
ZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGUoc3RydWN0dXJlLCBlZmZvcnQpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlv
bjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlKG1fb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2JqZWN0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxs
TGl2ZSgpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVy
ZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYg
KCEqdGhpcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHRyYWNrZWQuY2hlY2sobV9vYmpl
Y3QpOworICAgIG1fY29uZGl0aW9uLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bl9oCisjZGVmaW5lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisK
K2NsYXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAg
fQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSB0b2tlbikKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgICAgICAs
IG1fY29uZGl0aW9uKHRva2VuKQorICAgIHsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24oSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbikKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9jb25kaXRp
b24oY29uZGl0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIHByZXNlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBv
YmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5z
aWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1
bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmll
cih1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisg
ICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOwor
ICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgb2Zmc2V0
LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2Jq
ZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRp
dGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFi
c2VuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhv
dXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAg
ICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0
ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNl
T2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVj
dCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2Vu
Y2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VXaXRo
b3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICBy
ZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0
QmFycmllcih1aWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKG9i
amVjdCwgdWlkLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1fY29uZGl0aW9uOyB9OworICAgIAorICAgIEpTT2JqZWN0KiBvYmplY3Qo
KSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIFByb3BlcnR5Q29uZGl0aW9uIGNvbmRp
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uOyB9CisgICAgCisgICAgUHJvcGVydHlD
b25kaXRpb246OktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmtpbmQoKTsg
fQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24o
KS51aWQoKTsgfQorICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9u
KCkuaGFzT2Zmc2V0KCk7IH0KKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBjb25kaXRpb24oKS5vZmZzZXQoKTsgfQorICAgIHVuc2lnbmVkIGhhc0F0dHJpYnV0ZXMo
KSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNBdHRyaWJ1dGVzKCk7IH0KKyAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuYXR0cmlidXRlcygp
OyB9CisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5o
YXNQcm90b3R5cGUoKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVy
biBjb25kaXRpb24oKS5wcm90b3R5cGUoKTsgfQorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1JlcXVpcmVkVmFsdWUoKTsgfQorICAgIEpT
VmFsdWUgcmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnJlcXVpcmVk
VmFsdWUoKTsgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1
bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RG
OjpQdHJIYXNoPEpTT2JqZWN0Kj46Omhhc2gobV9vYmplY3QpICsgbV9jb25kaXRpb24uaGFzaCgp
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09
IG90aGVyLm1fb2JqZWN0CisgICAgICAgICAgICAmJiBtX2NvbmRpdGlvbiA9PSBvdGhlci5tX2Nv
bmRpdGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fY29uZGl0aW9uLmlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIC8vIFR3byBjb25kaXRp
b25zIGFyZSBjb21wYXRpYmxlIGlmIHRoZXkgYXJlIGlkZW50aWNhbCBvciBpZiB0aGV5IHNwZWFr
IG9mIGRpZmZlcmVudCB1aWRzIG9yCisgICAgLy8gZGlmZmVyZW50IG9iamVjdHMuIElmIGZhbHNl
IGlzIHJldHVybmVkLCB5b3UgaGF2ZSB0byBkZWNpZGUgaG93IHRvIHJlc29sdmUgdGhlIGNvbmZs
aWN0IC0KKyAgICAvLyBmb3IgZXhhbXBsZSBpZiB0aGVyZSBpcyBhIFByZXNlbmNlIGFuZCBhbiBF
cXVpdmFsZW5jZSB0aGVuIGluIHNvbWUgY2FzZXMgeW91J2xsIHdhbnQgdGhlCisgICAgLy8gbW9y
ZSBnZW5lcmFsIG9mIHRoZSB0d28gd2hpbGUgaW4gb3RoZXIgY2FzZXMgeW91J2xsIHdhbnQgdGhl
IG1vcmUgc3BlY2lmaWMgb2YgdGhlIHR3by4gVGhpcworICAgIC8vIHdpbGwgYWxzbyByZXR1cm4g
ZmFsc2UgZm9yIGNvbnRyYWRpY3Rpb25zLCBsaWtlIFByZXNlbmNlIGFuZCBBYnNlbmNlIG9uIHRo
ZSBzYW1lCisgICAgLy8gb2JqZWN0L3VpZC4gQnkgY29udmVudGlvbiwgaW52YWxpZCBjb25kaXRp
b25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcuCisgICAgYm9vbCBpc0NvbXBhdGli
bGVXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkgIT0gb3RoZXIudWlkKCkg
fHwgb2JqZWN0KCkgIT0gb3RoZXIub2JqZWN0KCk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNl
IHZhbGlkaXR5LWNoZWNraW5nIG1ldGhvZHMgY2FuIG9wdGlvbmFsbHkgdGFrZSBhIFN0cnV0dXJl
KiBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlCisgICAgLy8gU3RydWN0dXJlKiBmcm9tIHRoZSBvYmpl
Y3QuIElmIHlvdSdyZSBpbiB0aGUgY29uY3VycmVudCBKSVQsIHRoZW4geW91IG11c3QgdXNlIHRo
ZSBmb3JtcworICAgIC8vIHRoYXQgdGFrZSBhbiBleHBsaWNpdCBTdHJ1Y3R1cmUqIGJlY2F1c2Ug
eW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZvciB0aGUgc2FtZQorICAgIC8vIHN0
cnVjdHVyZSB0aGF0IHlvdSB2YWxpZGF0ZWQgKGkuZS4gYXZvaWQgYSBUT0NUT1UgcmFjZSkuCisg
ICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xhaW1zIHRoYXQg
dGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLiBWYWxpZGl0eQorICAgIC8vIGRvZXMg
bm90IHJlcXVpcmUgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdC4KKyAgICBib29sIHN0cnVjdHVy
ZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVy
ZSopIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludCB0byBlbnN1cmUgdmFsaWRp
dHkgZXZlbiBpZgorICAgIC8vIGlzU3RpbGxWYWxpZEFjY29yZGluZ1RvU3RydWN0dXJlKCkgcmV0
dXJuZWQgdHJ1ZS4KKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisKKyAgICAvLyBDaGVja3MgaWYgdGhlIGNvbmRp
dGlvbiBzdGlsbCBob2xkcy4gTWF5IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgaWYgdGhl
IG9iamVjdCBhbmQKKyAgICAvLyBzdHJ1Y3R1cmUgYWxvbmUgZG9uJ3QgZ3VhcmFudGVlIHRoZSBj
b25kaXRpb24uIE5vdGUgdGhhdCB0aGlzIG1heSByZXR1cm4gdHJ1ZSBpZiB0aGUKKyAgICAvLyBj
b25kaXRpb24gc3RpbGwgcmVxdWlyZXMgc29tZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0IGlu
IGFkZGl0aW9uIHRvIGNoZWNraW5nIHRoZQorICAgIC8vIHN0cnVjdHVyZS4gSWYgeW91IHdhbnQg
dG8gY2hlY2sgaWYgdGhlIGNvbmRpdGlvbiBob2xkcyBieSB1c2luZyB0aGUgc3RydWN0dXJlIGFs
b25lLAorICAgIC8vIHVzZSBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKS4KKyAgICBib29sIGlz
U3RpbGxWYWxpZChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNv
bnN0OworICAgIAorICAgIC8vIFNob3J0aGFuZCBmb3IgY29uZGl0aW9uKCkuaXNTdGlsbFZhbGlk
KHN0cnVjdHVyZSkuCisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoU3RydWN0dXJl
KikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKSBjb25zdDsKKyAg
ICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQg
ZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9p
bnQgb24gdGhlIHN0cnVjdHVyZSBhbmQgcG9zc2libHkgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNo
cG9pbnQuCisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KAorICAgICAgICBTdHJ1Y3R1cmUqLAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0
Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0
OworICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgK
KyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5
Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKworICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRp
bmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLgorICAg
IGJvb2wgaXNXYXRjaGFibGUoCisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFByb3BlcnR5
Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5v
Q2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgUHJvcGVydHlD
b25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9D
aGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uZGl0
aW9uKCkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCk7Cisg
ICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uZGl0aW9uKCkud2F0Y2hpbmdSZXF1aXJlc1Jl
cGxhY2VtZW50V2F0Y2hwb2ludCgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRo
YXQgdGhlIG9iamVjdHMgaW52b2x2ZWQgaW4gdGhpcyBhcmUgc3RpbGwgbGl2ZS4KKyAgICBib29s
IGlzU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMo
Y29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBKU09iamVj
dCogbV9vYmplY3Q7CisgICAgUHJvcGVydHlDb25kaXRpb24gbV9jb25kaXRpb247Cit9OworCitz
dHJ1Y3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBhLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRz
OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0
aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvck9i
amVjdChKU09iamVjdCogb2JqZWN0KSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRp
b24ub2JqZWN0KCkgPT0gb2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAg
ICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JDb25kaXRpb25L
aW5kKAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQpIGNvbnN0Cit7CisgICAgZm9y
IChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAg
ICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkKKyAgICAgICAgICAgIHJldHVybiBj
b25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOwor
fQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
c2xvdEJhc2VDb25kaXRpb24oKSBjb25zdAoreworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IHJlc3VsdDsKKyAgICB1bnNpZ25lZCBudW1Gb3VuZCA9IDA7CisgICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNv
bmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBjb25kaXRpb247CisgICAgICAgICAgICBudW1Gb3VuZCsrOworICAgICAg
ICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKG51bUZvdW5kID09IDEpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFyZUNvbXBh
dGlibGUoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdAorewor
ICAgIGlmICghaXNWYWxpZCgpIHx8ICFvdGhlci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBhIDogKnRoaXMp
IHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYiA6IG90aGVy
KSB7CisgICAgICAgICAgICBpZiAoIWEuaXNDb21wYXRpYmxlV2l0aChiKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjptZXJnZWRXaXRoKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhl
cikgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSB8fCAhb3RoZXIuaXNWYWxpZCgpKQorICAg
ICAgICByZXR1cm4gaW52YWxpZCgpOworCisgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uPiByZXN1bHQ7CisgICAgCisgICAgaWYgKCFpc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdC5h
cHBlbmRWZWN0b3IobV9kYXRhLT52ZWN0b3IpOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIG5ld0NvbmRpdGlvbiA6IG90aGVyKSB7CisgICAgICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGV4aXN0aW5nQ29uZGl0aW9uIDogKnRoaXMp
IHsKKyAgICAgICAgICAgIGlmICghbmV3Q29uZGl0aW9uLmlzQ29tcGF0aWJsZVdpdGgoZXhpc3Rp
bmdDb25kaXRpb24pKQorICAgICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKG5ld0NvbmRpdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gbm9uRW1wdHkocmVzdWx0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24udmFsaWRpdHlSZXF1cmllc0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6YXJlU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5p
c1N0aWxsTGl2ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgiWyIpOworICAgIGlmICht
X2RhdGEpCisgICAgICAgIG91dC5wcmludChsaXN0RHVtcEluQ29udGV4dChtX2RhdGEtPnZlY3Rv
ciwgY29udGV4dCkpOworICAgIG91dC5wcmludCgiXSIpOworfQorCit2b2lkIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVt
cEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCituYW1lc3BhY2UgeworCitPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29u
ZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+
c3RydWN0dXJlKCk7CisgICAgCisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIFBy
b3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZz
ZXQpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSh2bSwgb3duZXIsIG9i
amVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICBjYXNlIFByb3BlcnR5
Q29uZGl0aW9uOjpBYnNlbmNlOiB7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6YWJzZW5jZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVj
dC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICB9CisgICAgY2FzZSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOiB7CisgICAgICAgIHJldHVybiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKAorICAgICAgICAgICAgdm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkpOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICB9Cit9CisK
K2VudW0gQ29uY3VycmVuY3kgeworICAgIE1haW5UaHJlYWQsCisgICAgQ29uY3VycmVudAorfTsK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLAorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQsCisgICAgQ29uY3VycmVuY3kgY29u
Y3VycmVuY3kgPSBNYWluVGhyZWFkKQoreworICAgIEFTU0VSVCghIXByb3RvdHlwZSA9PSAoY29u
ZGl0aW9uID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkpOworICAgIAorICAgIFZlY3Rv
cjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gY29uZGl0aW9uczsKKyAgICAKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKKyAgICAgICAgICAgIHJldHVy
biBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICAKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9i
amVjdCk7CisgICAgICAgIAorICAgICAgICBpZiAodi5pc051bGwoKSkgeworICAgICAgICAgICAg
aWYgKCFwcm90b3R5cGUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHYpOwor
ICAgICAgICBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAg
ICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgcmVwZWF0ZWRseSwgaXQn
cyBhIGdvb2QgYmV0IHRoYXQgaXQgc2hvdWxkIG5vdCBiZQorICAgICAgICAvLyB0cmVhdGVkIGFz
IGEgZGljdGlvbmFyeS4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsK
KyAgICAgICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBNYWluVGhyZWFkKQorICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIG9iamVjdCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBQ
cm9wZXJ0eUNvbmRpdGlvbjo6S2luZCB0aGlzQ29uZGl0aW9uS2luZDsKKyAgICAgICAgaWYgKGtp
bmQgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlICYmIG9iamVjdCAhPSBwcm90b3R5cGUp
CisgICAgICAgICAgICB0aGlzQ29uZGl0aW9uS2luZCA9IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzQ29uZGl0aW9uS2luZCA9IGtpbmQ7
CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBuZXdDb25kaXRpb24g
PQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwg
dGhpc0NvbmRpdGlvbktpbmQpOworICAgICAgICBpZiAoIW5ld0NvbmRpdGlvbiB8fCAhbmV3Q29u
ZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsK
KyAgICAgICAgCisgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKG5ld0NvbmRpdGlvbik7CisgICAg
ICAgIAorICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAKKyAgICAvLyBWYWxpZGF0ZSB0aGUgcmVzdWx0LgorICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7CisgICAgICAg
IHVuc2lnbmVkIHByZXNlbmNlQ291bnQgPSAwOworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBjb25kaXRpb25zKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUHJvcGVydHlDb25k
aXRpb246OlByZXNlbmNlOgorICAgICAgICAgICAgICAgIHByZXNlbmNlQ291bnQrKzsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFi
c2VuY2U6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJlc2VuY2VDb3VudCA9PSAxKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0aW9ucykKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCk7CisgICAgfSB9
CisgICAgCisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpub25FbXB0eShj
b25kaXRpb25zKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3Ry
dWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNv
bmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBoZWFkU3RydWN0dXJlLCBudWxscHRyLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0s
IG93bmVyLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIG51bGxw
dHIsIHVpZCwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcik7Cit9
CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBvdG90
eXBlUHJvcGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMo
CisgICAgICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3Ry
dWN0dXJlLCBwcm90b3R5cGUsIHVpZCwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OlByZXNl
bmNlKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAg
IHZtLCBudWxscHRyLCBnbG9iYWxPYmplY3QsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwg
UHJvcGVydHlDb25kaXRpb246OkFic2VjZU9mU2V0dGVyLAorICAgICAgICBDb25jdXJyZW50KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldF9oCisjZGVmaW5lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
X2gKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEFuIG9iamVjdCBwcm9wZXJ0eSBj
b25kaXRpb24gc2V0IGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBzZXQgb2YgYWRkaXRpb25hbCBj
b25kaXRpb25zCisvLyB0aGF0IG5lZWQgdG8gYmUgbWV0IGZvciBzb21lIGhlYXAgYWNjZXNzIHRv
IGJlIHZhbGlkLiBUaGUgc2V0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZXN0aW5n
IHN0YXRlczoKKy8vCisvLyBFbXB0eTogVGhlcmUgYXJlIG5vIHNwZWNpYWwgY29uZGl0aW9ucyB0
aGF0IG5lZWQgdG8gYmUgbWV0LgorLy8gSW52YWxpZDogVGhlIGhlYXAgYWNjZXNzIGlzIG5ldmVy
IHZhbGlkLgorLy8gTm9uLWVtcHR5OiBUaGVyZSBhcmUgc29tZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMgdGhhdCBuZWVkIHRvIGJlIHZhbGlkLgorCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSB7IH0K
KyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW52YWxpZCgpCisg
ICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihuZXcgRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG5vbkVtcHR5KGNvbnN0IFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIHZlY3RvcikK
KyAgICB7CisgICAgICAgIGlmICh2ZWN0b3IuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7CisgICAgICAgIAorICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9w
dFJlZihuZXcgRGF0YSgpKTsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YS0+dmVjdG9yID0gdmVjdG9y
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2RhdGEgfHwgIW1fZGF0YS0+dmVjdG9y
LmlzRW1wdHkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhbV9kYXRhOworICAgIH0KKyAgICAKKyAgICB0eXBlZGVmIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKiBpdGVyYXRvcjsKKyAgICAKKyAgICBpdGVyYXRvciBi
ZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRhLT52ZWN0b3IuYmVnaW4oKTsKKyAg
ICB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRh
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX2RhdGEtPnZl
Y3Rvci5lbmQoKTsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9y
T2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIGZvckNvbmRpdGlvbktpbmQoUHJvcGVydHlDb25kaXRpb246OktpbmQpIGNvbnN0OworICAg
IAorICAgIC8vIElmIHRoaXMgaXMgYSBjb25kaXRpb24gc2V0IGZvciBhIHByb3RvdHlwZSBoaXQs
IHRoZW4gdGhpcyBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB0aGUKKyAgICAvLyBjb25kaXRpb24g
b24gdGhlIHByb3RvdHlwZSBpdHNlbGYuIFRoaXMgYWxsb3dzIHlvdSB0byBnZXQgdGhlIG9iamVj
dCwgb2Zmc2V0LCBhbmQKKyAgICAvLyBhdHRyaWJ1dGVzIGZvciB0aGUgcHJvdG90eXBlLiBUaGlz
IHdpbGwgUkVMRUFTRV9BU1NFUlQgdGhhdCB0aGVyZSBpcyBleGFjdGx5IG9uZSBQcmVzZW5jZQor
ICAgIC8vIGluIHRoZSBzZXQsIGFuZCBpdCB3aWxsIHJldHVybiB0aGF0IHByZXNlbmNlLgorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3Q7CisgICAg
CisgICAgLy8gVHdvIGNvbmRpdGlvbiBzZXRzIGFyZSBjb21wYXRpYmxlIGlmIHRoZXkgYXJlIGJv
dGggdmFsaWQgYW5kIGVhY2ggY29uZGl0aW9uIGluICp0aGlzIGlzCisgICAgLy8gY29tcGF0aWJs
ZSB3aXRoIGVhY2ggY29uZGl0aW9uIGluIG90aGVyLgorICAgIGJvb2wgYXJlQ29tcGF0aWJsZVdp
dGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdDsKKyAgICAK
KyAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhIG5ldyBjb25kaXRpb24gc2V0IGJ5IG1lcmdpbmcg
dGhpcyBvbmUgd2l0aCB0aGUgb3RoZXIgb25lLiBUaGlzIHdpbGwKKyAgICAvLyBmYWlsIGlmICF0
aGlzLmFyZUNvbXBhdGlibGVXaXRoKG90aGVyKS4gV2hlbiBpdCBmYWlscywgaXQgcmV0dXJucyBp
bnZhbGlkKCkuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkV2l0aChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0OworICAgIAorICAgIGJv
b2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVz
RW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAg
IGJvb2wgYXJlU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBIZWxwZXJzIGZvciB1c2luZyB0aGlzIGluIGEg
dW5pb24uCisgICAgdm9pZCogcmVsZWFzZVJhd1BvaW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHZvaWQqPihtX2RhdGEubGVha1JlZigpKTsKKyAgICB9CisgICAgc3Rh
dGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGFkb3B0UmF3UG9pbnRlcih2b2lkKiByYXdQ
b2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8RGF0YSo+KHJh
d1BvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgc3RhdGljIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGZyb21SYXdQb2ludGVyKHZvaWQqIHJhd1BvaW50ZXIp
CisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2RhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcik7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBJbnRlcm5h
bGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1c2luZyBhIHBvaW50ZXIgdG8gYSBEYXRhIHRo
YXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBi
ZSBtYWRlIG1vcmUgY29tcGFjdCBieSBoYXZpbmcgaXQgaW50ZXJuYWxseSB1c2UgYSB2ZWN0b3Ig
dGhhdCBqdXN0IGhhcworICAgIC8vIHRoZSBub24tdWlkIHBvcnRpb24gb2YgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24sIGFuZCB0aGVuIHJlcXVpcmluZyB0aGF0IHRoZSBjYWxsZXJzIG9mIGFsbAor
ICAgIC8vIG9mIHRoZSBBUElzIHN1cHBseSB0aGUgdWlkLgorICAgIAorICAgIGNsYXNzIERhdGEg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YT4geworICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEYXRhKTsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
ICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgRGF0YSgpIHsgfQorICAgICAgICAKKyAgICAgICAg
VmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB2ZWN0b3I7CisgICAgfTsKKyAgICAKKyAg
ICBSZWZQdHI8RGF0YT4gbV9kYXRhOworfTsKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5
cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJ
KHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTQgKzM3LDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAogICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCB1bnNpZ25lZCBjaGFpbkNvdW50KQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogICAgIDog
bV90eXBlKHR5cGUpCiAgICAgLCBtX2NoYWluQ291bnQoY2hhaW5Db3VudCkKICAgICAsIG1fc3Ry
dWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQorICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0
aW9uU2V0KQogICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKIHsKLSAgICBpZiAoY2hh
aW4pCi0gICAgICAgIG1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwogfQogCiBHZXRCeUlk
QWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCkBAIC03MSw3ICs3MCw3IEBAIGJvb2wgR2V0QnlJZEFj
Y2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKIHsKICAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhl
YXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKKyAgICBp
ZiAoIW1fY29uZGl0aW9uU2V0LmlzU3RpbGxMaXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2VhayhyZXBhdGNoQnVmZmVyKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODczNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01MywxMyArNTMsMTIgQEAgcHVibGljOgogICAgIAogICAgIEdldEJ5
SWRBY2Nlc3MoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5D
b3VudCgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygKICAgICAgICAg
Vk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiwgU3RydWN0dXJlKiwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qID0gMCwgdW5zaWduZWQgY2hh
aW5Db3VudCA9IDApOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKICAgICAKICAgICB+R2V0QnlJZEFjY2Vz
cygpOwogICAgIApAQCAtNzIsOCArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQogICAgIAot
ICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7
IH0KLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbkNvdW50
OyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgSklUU3R1YlJvdXRp
bmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkBAIC05MSw5ICs4OSw4IEBAIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlw
ZTsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWlu
OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OyAvLyBGSVhN
RSB3aGF0IGFib3V0IGJhcnJpZXJzPwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHVi
Um91dGluZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4NzM0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBQdXRCeUlkQWNj
ZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBU
cmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1Yklu
Zm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHJlc3Vs
dC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0
cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0
QnlJZFRyYW5zaXRpb24uY2hhaW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAorICAgICAgICAgICAg
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwogICAgICAgICBy
ZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAgICBicmVh
azsKICAgICAgICAgCkBAIC02NCw2ICs2NSw5IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vz
czo6ZnJvbVN0cnVjdHUKIAogYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlcikgY29uc3QKIHsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFy
ZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
bV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQpAQCAtNzQsMTUgKzc4LDExIEBAIGJvb2wgUHV0QnlJZEFj
Y2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5n
ZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgU2V0dGVyOgogICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgogICAgICAgICBpZiAoIUhlYXA6Omlz
TWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5o
CShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1
Myw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5
cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAgICAgewogICAg
IH0KICAgICAKQEAgLTYyLDE0ICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3du
ZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAgIFB1
dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsK
ICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0cnVjdHVy
ZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1
Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Cisg
ICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVz
dWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBz
dHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1LDggKzk0LDcgQEAgcHVi
bGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisgICAgICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAgIFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFzc1JlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0LDEwICsxMDIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV9v
bGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1f
dHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewotICAgICAgICAgICAgcmVz
dWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAgICAgICAgcmVzdWx0Lm1f
Y2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIg
PSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRp
bmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJh
bnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBt
X2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAg
ICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAg
IHsKQEAgLTE3OCw4ICsxNjMsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwog
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29u
ZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJl
ZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludChtX2tpbmQsICIg
b2YgIiwgbV91aWQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToK
KyAgICAgICAgb3V0LnByaW50KCIgYXQgIiwgbV9vZmZzZXQsICIgd2l0aCBhdHRyaWJ1dGVzICIs
IG1fYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFic2VuY2U6CisgICAg
Y2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiIHdpdGggcHJvdG90eXBl
ICIsIGluQ29udGV4dChKU09iamVjdChwcm90b3R5cGUoKSksIGNvbnRleHQpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiIHdpdGgg
IiwgaW5Db250ZXh0KEpTVmFsdWU6OmVuY29kZShyZXF1aXJlZFZhbHVlKCkpLCBjb250ZXh0KSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworYm9vbCBQcm9w
ZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlKSBjb25zdAorewor
ICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOiB7
CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCksIGN1
cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0KCkg
fHwgY3VycmVudEF0dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
QWJzZW5jZTogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSh1aWQoKSkgIT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpICE9IHByb3RvdHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGNhc2UgQWJzZW5jZU9mU2V0
dGVyOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJp
YnV0ZXM7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSkgIT0g
aW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRBdHRyaWJ1dGVzICYgKEFj
Y2Vzc29yIHwgQ3VzdG9tQWNjZXNzb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRXF1aXZh
bGVuY2U6IHsKKyAgICAgICAgaWYgKCFiYXNlIHx8IGJhc2UtPnN0cnVjdHVyZSgpICE9IHN0cnVj
dHVyZSkgeworICAgICAgICAgICAgLy8gQ29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBzaW5j
ZSB3ZSBjYW5ub3QgdmVyaWZ5IHRoaXMgb25lIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAg
ICAgLy8gb2JqZWN0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByYWN5LCBhbmQgbWF5YmUg
bW9yZSByaXNreSB0aGFuIHdlIHdhbnQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKKyAgICAgICAgCisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7Cisg
ICAgICAgIEpTVmFsdWUgY3VycmVudFZhbHVlID0gYmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRPZmZz
ZXQpOworICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IHJlcXVpcmVkVmFsdWUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAg
IGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2Ug
RXF1aXZhbGVuY2U6CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlKSBjb25zdAoreworICAgIGlmICghaXNTdGlsbFZhbGlk
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBiYXNlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3VycmVudGx5IHdlIGFzc3VtZSB0aGF0IGFuIGlt
cHVyZSBwcm9wZXJ0eSBjYW4gY2F1c2UgYSBwcm9wZXJ0eSB0byBhcHBlYXIsIGFuZCBjYW4gYWxz
bworICAgIC8vICJzaGFkb3ciIGFuIGV4aXN0aW5nIEpTIHByb3BlcnR5IG9uIHRoZSBzYW1lIG9i
amVjdC4gSGVuY2UgaXQgYWZmZWN0cyBib3RoIHByZXNlbmNlIGFuZAorICAgIC8vIGFic2VuY2Uu
IEl0IGRvZXNuJ3QgYWZmZWN0IEFic2VuY2VPZlNldHRlciBiZWNhdXNlIGltcHVyZSBwcm9wZXJ0
aWVzIGFyZW4ndCBldmVyIHNldHRlcnMuCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNl
IFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAg
ICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xv
dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlV2hlblZhbGlkKAorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAg
IGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgIGNhc2UgRXF1aXZhbGVuY2U6IHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpOworICAgICAgICAKKyAgICAgICAgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gc29tZSB2YXJpYW50IG9mIGlz
VmFsaWQgcmV0dXJuZWQgdHJ1ZSwgd2hpY2gKKyAgICAgICAgLy8gaW1wbGllcyB0aGF0IHdlIGFs
cmVhZHkgY29uZmlybWVkIHRoYXQgdGhlIHN0cnVjdHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHku
IFdlIHNob3VsZAorICAgICAgICAvLyBhbHNvIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGUgU3RydWN0
dXJlIGlzIGEgY2FjaGVhYmxlIGRpY3Rpb25hcnksIHdoaWNoIG1lYW5zIHdlCisgICAgICAgIC8v
IHNob2xkbid0IGhhdmUgYSBUT0NUT1UgcmFjZSBlaXRoZXIuCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIFdhdGNocG9p
bnRTZXQqIHNldDsKKyAgICAgICAgc3dpdGNoIChlZmZvcnQpIHsKKyAgICAgICAgY2FzZSBNYWtl
Tm9DaGFuZ2VzOgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRW5zdXJlV2F0Y2hhYmlsaXR5OgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5wcm9w
ZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCgKKyAgICAgICAgICAgICAgICAqSGVhcDo6aGVh
cChzdHJ1Y3R1cmUpLT52bSgpLCBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICghc2V0LT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09i
amVjdCogYmFzZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJl
LCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9y
dCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9y
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSwgYmFzZSkKKyAg
ICAgICAgJiYgaXNXYXRjaGFibGVXaGVuVmFsaWQoc3RydWN0dXJlLCBlZmZvcnQpOworfQorCiti
b29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKGhh
c1Byb3RvdHlwZSgpICYmICFIZWFwOjppc01hcmtlZChwcm90b3R5cGUoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoaGFzUmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYm
IHJlcXVpcmVkVmFsdWUoKQorICAgICAgICAmJiByZXF1aXJlZFZhbHVlKCkuaXNDZWxsKCkKKyAg
ICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKHJlcXVpcmVkVmFsdWUoKS5hc0NlbGwoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2Vz
JiB0cmFja2VkKSBjb25zdAoreworICAgIGlmIChoYXNQcm90b3R5cGUoKSkKKyAgICAgICAgdHJh
Y2tlZC5jaGVjayhwcm90b3R5cGUoKSk7CisgICAgCisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUo
KSkKKyAgICAgICAgdHJhY2tlZC5jaGVjayhyZXF1aXJlZFZhbHVlKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sK
KyAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmludCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAg
b3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJv
cGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNl
bmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246
OkVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIkVxdWl2YWxlbmNlIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgUHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBQcm9wZXJ0eUNvbmRp
dGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xhc3Mg
UHJvcGVydHlDb25kaXRpb24geworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIFBy
ZXNlbmNlLAorICAgICAgICBBYnNlbmNlLAorICAgICAgICBBYnNlbmNlT2ZTZXR0ZXIsCisgICAg
ICAgIEVxdWl2YWxlbmNlIC8vIEFuIGFkYXB0aXZlIHdhdGNocG9pbnQgb24gdGhpcyB3aWxsIGJl
IGEgcGFpciBvZiB3YXRjaHBvaW50cywgYW5kIHdoZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9u
cywgd2Ugd2lsbCBzZXQgdGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1
Y3R1cmUuCisgICAgfTsKKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDog
bV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tpbmQoUHJlc2VuY2UpCisgICAgeworICAgICAg
ICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5Q29u
ZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3VpZChu
dWxscHRyKQorICAgICAgICAsIG1fa2luZChBYnNlbmNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0
KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25k
aXRpb24gcHJlc2VuY2VXaXRob3V0QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBQ
cm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZXNlbmNlOworICAgICAgICByZXN1bHQudS5wcmVzZW5j
ZS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJpYnV0ZXMg
PSBhdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIo
dWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVy
dHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IEFic2VuY2U7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90
eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJv
cGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdp
dGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFBy
b3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKAorICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBYnNlbmNlT2ZTZXR0ZXI7CisgICAgICAgIHJlc3Vs
dC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0
dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmll
cih1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRp
dGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24g
cmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBFcXVpdmFsZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuZXF1aXZhbGVuY2UudmFsdWUgPSBK
U1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdp
dGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9Owor
ICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJv
b2wgaGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2Vu
Y2U7IH07CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChoYXNPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldDsK
KyAgICB9CisgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAm
JiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJu
IHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5
cGUoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tp
bmQgPT0gQWJzZW5jZU9mU2V0dGVyKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJu
IHUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9
CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChoYXNSZXF1aXJlZFZhbHVlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUu
ZXF1aXZhbGVuY2UudmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQo
UHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46
Omhhc2gobV91aWQpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXN1
bHQgKz0gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5j
ZS5hdHRyaWJ1dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5jZToK
KyAgICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RG
OjpQdHJIYXNoPEpTT2JqZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBFbmNvZGVkSlNWYWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICAgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNl
dCA9PSBvdGhlci51LnByZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2Vu
Y2UuYXR0cmlidXRlcyA9PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNh
c2UgQWJzZW5jZToKKyAgICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICBy
ZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOwor
ICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVu
Y2UudmFsdWUgPT0gb3RoZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRl
bnRpY2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMuIElmCisgICAgLy8gZmFs
c2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29u
ZmxpY3QgLSBmb3IgZXhhbXBsZSBpZiB0aGVyZSBpcworICAgIC8vIGEgUHJlc2VuY2UgYW5kIGFu
IEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBnZW5l
cmFsIG9mIHRoZSB0d28KKyAgICAvLyB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0
aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UK
KyAgICAvLyBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24g
dGhlIHNhbWUgdWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlkCisgICAgLy8gY29uZGl0aW9ucyBh
cmVuJ3QgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0
aChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoISp0aGlzIHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuICp0aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpOworICAgIH0KKyAg
ICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0
aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFz
ZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVk
IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlm
CisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVl
LgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1
Y3R1cmUqKSBjb25zdDsKKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBpcyBz
dGlsbCB2YWxpZCByaWdodCBub3cgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIHN0cnVjdHVyZS4K
KyAgICAvLyBNYXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFu
ZCBzdHJ1Y3R1cmUgYWxvbmUgZG9uJ3QgZ3VhcmFudGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbi4g
VGhpcyBoYXBwZW5zIGZvciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3QgdGhhdCBt
YXkgaGF2ZSBpbXB1cmUKKyAgICAvLyBwcm9wZXJ0aWVzLiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBz
dXBwbGllZCwgdGhlbiBhICJ0cnVlIiByZXR1cm4gaW5kaWNhdGVzIHRoYXQgY2hlY2tpbmcgaWYK
KyAgICAvLyBhbiBvYmplY3QgaGFzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgZ3VhcmFudGVlcyB0aGUg
Y29uZGl0aW9uIHN0aWxsIGhvbGRzLiBJZiBhbiBvYmplY3QgaXMKKyAgICAvLyBzdXBwbGllZCwg
dGhlbiB5b3UgbWF5IG5lZWQgdG8gdXNlIHNvbWUgb3RoZXIgd2F0Y2hwb2ludHMgb24gdGhlIG9i
amVjdCB0byBndWFyYW50ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uIGluIGFkZGl0aW9uIHRvIHRo
ZSBzdHJ1Y3R1cmUgY2hlY2suCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNP
YmplY3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2Vz
LCB0aGUgY29uZGl0aW9uIGlzIG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNo
YWJsZSBieSBlbmFibGluZyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3Ig
ZXhhbXBsZSwgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNv
bWUKKyAgICAvLyBhY2Nlc3MgaXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVj
dHVyZS4gVGhpcyBpcyBtYWlubHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5
IHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBp
dCdzIGFsd2F5cyBzYWZlIHRvCisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0
IHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmls
aXR5RWZmb3J0IHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhh
dCB3ZSBkb24ndCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAg
Ly8gb2JqZWN0LCBhbmQgaW1wbGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0
byBiZSB3YXRjaGFibGUgdGhlbiB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJs
ZS4gVGhpcyBpcyBtYW5kYXRvcnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBp
cyBhbHNvIHNvbWV3aGF0CisgICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGlu
ZyB3aGV0aGVyIHRvIHdhdGNoIGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgor
ICAgICAgICAvLyBub3QgZnJvbSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBz
ZWUgaWYgd2Ugc2hvdWxkIGFkYXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5v
dCBiZWluZyBpbml0aWFsaXplZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRv
bid0IGtub3cgZW5vdWdoCisgICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8g
d2F0Y2ggLS0gYXMgaW4sIHRoZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAg
ICAgICAvLyBzdGFiaWxpemVkIHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBj
b25kaXRpb24gd2lsbCBob2xkIGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhv
bGQgZm9yIGEgd2hpbGUgYWxyZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAg
CisgICAgICAgIC8vIERvIHdoYXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5
IGNhbiBiZSB3YXRjaGVkLCBpZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNl
cnZhYmxlIGVmZmVjdC4gRm9yIG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3Vy
ZSB0aGF0IGEgcHJvcGVydHkKKyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBl
bmFibGVkIGlmIGl0IGhhZG4ndCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlz
CisgICAgICAgIC8vIGZyb20gSklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcg
d2F0Y2hwb2ludHMgaXMgbm90IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxp
dHkKKyAgICB9OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlk
IGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisg
ICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUg
cHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0g
bnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAg
CisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVu
Zm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50
IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0
dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtl
Tm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50
bHksIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAg
cmV0dXJuICEhKnRoaXM7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2Vt
ZW50V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBt
X2tpbmQgPT0gRXF1aXZhbGVuY2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wg
aXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhj
b25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaXNX
YXRjaGFibGVXaGVuVmFsaWQoU3RydWN0dXJlKiwgV2F0Y2hhYmlsaXR5RWZmb3J0KSBjb25zdDsK
KworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKKyAgICBLaW5kIG1fa2luZDsKKyAgICB1
bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQ7CisgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB9IHByZXNlbmNl
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZTsKKyAg
ICAgICAgfSBhYnNlbmNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRW5jb2RlZEpT
VmFsdWUgdmFsdWU7CisgICAgICAgIH0gZXF1aXZhbGVuY2U7CisgICAgfSB1OworfTsKKworc3Ry
dWN0IFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgUHJvcGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29u
c3QgUHJvcGVydHlDb25kaXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOwor
ICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6UHJvcGVydHlDb25kaXRpb246
OktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAg
dHlwZWRlZiBKU0M6OlByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPEpTQzo6UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6
UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05MCwxOSArOTAsMTggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRnJvbQogICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTElu
dDo6Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkp
OwogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gaW5zdHJ1Y3Rpb25bNl0udS5z
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gaW5zdHJ1Y3Rpb25b
N10udS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKLSAgICBBU1NFUlQobmV3U3RydWN0dXJlKTsKLSAg
ICBBU1NFUlQoY2hhaW4pOwogICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAg
IAotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBpbnRlbmRlZENoYWluOwotICAg
IGlmIChjaGFpbikKLSAgICAgICAgaW50ZW5kZWRDaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKTsKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKGluc3RydWN0
aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsKQorICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6
Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkpIHsK
KyAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5U2V0dGVyTWlzc29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICpwcm9maWxl
ZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1
aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CiAgICAgCi0gICAgcmV0
dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBp
bnRlbmRlZENoYWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6
dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQp
OwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsxNjQsMTQgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSAKICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFp
bjsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbikg
ewotICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4oCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLT51LnB1
dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHko
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICAgICAg
ICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5n
ZXQoKSwKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1
Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgY2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTIxOSwxNSArMjE2
LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAg
ICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
ICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAg
ICAgIGlmIChhY2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBjaGFpbiA9IGFk
b3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4oKSkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYWluLT5pc1N0aWxsVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3Mu
Y29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0
dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVj
dHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAg
ICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1
cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjUzLDcgKzI0Niw3IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNh
bGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3Rh
dHVzLmNoYWluKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhH
ZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAg
ICAgICAgICB9IH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2OCwyMiArMzYxLDExIEBA
IFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAotICAgICAgICBSZWZQdHI8SW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgY2hh
aW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hh
aW4gaGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KLSAg
ICAgICAgICAgIGlmIChjaGFpbi0+bWF5SW50ZXJjZXB0U3RvcmVUbyh1aWQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAKLSAg
ICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXpl
ZCAoaS5lLiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJpZXMpCi0gICAgICAgICAgICAv
LyB0aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9uYXJ5IGNhc2Ugd291bGQgb25seSBoYXBwZW4gaWYg
dGhpcyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVuCi0gICAgICAgICAgICAvLyB1c2VkIGluIGFuIG9w
dGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxseSB0aGUgb25seSByZWFzb24g
d2h5IHdlIHdvdWxkCi0gICAgICAgICAgICAvLyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJl
YWxseSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBvcHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgot
ICAgICAgICAgICAgLy8gZGljdGlvbmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2Vz
dCB0aGF0IHRob3NlIG9iamVjdHMgd2VyZSBuZXZlciB1c2VkIGFzCi0gICAgICAgICAgICAvLyBw
cm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJlJ3Mg
YSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKLSAgICAgICAgICAgIC8vIHRoZSBvdGhlciBjaGVj
a3MgYmVsb3cgd2lsbCBmYWlsLgotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgp
IHx8ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkpCisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAg
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
dWlkKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQog
ICAgIApAQCAtMzk0LDcgKzM3Niw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAg
ICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWlu
LmdldCgpLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKICAgICAgICAg
aWYgKCFkaWRBcHBlbmQpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQz
LDggKzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAg
IG1fa2luZCA9IG90aGVyLm1fa2luZDsKICAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xk
U3RydWN0dXJlOwogICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0g
ICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRl
cm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0g
b3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAg
ICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9
IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KTsKQEAgLTY0LDI5ICs2MywyNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CiAgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVy
ZSA9IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAoc3RydWN0dXJlQ2hhaW4pCi0gICAgICAgIHN0cnVj
dHVyZUNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAgIHJl
c3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJ
ZFZhcmlhbnQ6OnNldHRlcigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKIHsKICAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKICAgICByZXN1bHQubV9v
bGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKGNoYWluKSB7Ci0gICAgICAgIGNoYWlu
LT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQu
bV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgfQorICAg
IHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZz
ZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2Fs
bExpbmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzQsMTYgKzEzMCwxMiBAQCBi
b29sIFB1dEJ5SWRWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QKICAgICByZXR1cm4ga2luZCgp
ID09IFNldHRlcjsKIH0KIAotU3RydWN0dXJlU2V0IFB1dEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0
dXJlKCkgY29uc3QKK0pTT2JqZWN0KiBQdXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgIAotICAgIGlmICghbV9h
bHRlcm5hdGVCYXNlKQotICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7Ci0gICAgCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRl
cm5hdGVCYXNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBz
dHJ1Y3R1cmU7CisgICAgUkVMRUFTRV9BU1NFUlQobV9raW5kID09IFNldHRlcik7CisgICAgaWYg
KG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIG1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCk7CiB9CiAK
IGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKQEAgLTE5Niw2ICsxODgsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0
VG9NZXJnZVRyYW5zCiAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwog
ICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwogICAgIEFTU0VSVCghcmVw
bGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKCFyZXBsYWNlLmNvbmRpdGlv
blNldCgpKTsKICAgICAKICAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdo
ZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gK
ICAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3
YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0CkBAIC0yMzIsMTMgKzIyNSwx
MyBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIG91
dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRl
eHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1w
SW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zm
c2V0KCksICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRl
eHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAg
ICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAg
ICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAi
XSIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0i
KTsKICAgICAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKICAgICAgICAgICAgIG91dC5wcmludCgi
LCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwg
Y29udGV4dCkpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIFB1
dEJ5SWRWYXJpYW50X2gKICNkZWZpbmUgUHV0QnlJZFZhcmlhbnRfaAogCi0jaW5jbHVkZSAiSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlU2V0LmgiCiAKQEAgLTQ2LDcgKzQ1LDYgQEAgcHVibGljOgogICAgIFB1
dEJ5SWRWYXJpYW50KCkKICAgICAgICAgOiBtX2tpbmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3
U3RydWN0dXJlKG51bGxwdHIpCi0gICAgICAgICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAg
ICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYg
KzUyLDE1IEBAIHB1YmxpYzoKICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFu
dCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQm
KTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKAotICAgICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9m
ZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAg
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSwKLSAgICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hh
aW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlk
VmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAg
ICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4pOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZDsgfQogICAgIApAQCAtNzYsNiArNzMsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9vbGRTdHJ1Y3R1cmU7CiAgICAgfQogICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUoKTsKKyAg
ICB9CisgICAgCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBS
ZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAtMTAwLDEwICsxMDIsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKICAgICBib29sIG1ha2VzQ2Fs
bHMoKSBjb25zdDsKICAgICAKLSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9y
JiBjb25zdGFudENoZWNrcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jb25zdGFu
dENoZWNrczsKLSAgICB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKICAgICB7CkBAIC0xMTEsMTMgKzExMCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgIH0KICAgICAKLSAgICBKU09i
amVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2FsdGVybmF0ZUJhc2U7Ci0gICAgfQotICAg
IAotICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CisgICAgSlNPYmplY3Qq
IGFsdGVybmF0ZUJhc2UoKSBjb25zdDsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExp
bmtTdGF0dXMoKSBjb25zdAogICAgIHsKQEAgLTEzNiw4ICsxMjksNyBAQCBwcml2YXRlOgogICAg
IEtpbmQgbV9raW5kOwogICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKICAgICBTdHJ1
Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Ig
bV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOworICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zm
c2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxs
TGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3Bw
CShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDI0ICs0
NiwyOSBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBTdHJ1Y3R1CiAKIHZvaWQg
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVE
ZXRhaWwmKQogewotICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1p
c2U6IHN0dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCi0gICAgLy8gVGhhdCB3b3Jr
cywgYmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQn
cyBsaXN0LCBhbmQKLSAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9yIGZpcmluZyBp
cyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgotICAgIG1faG9sZGVyLmNvZGVCbG9j
aygpLT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgIGlmICghbV9rZXkuaXNX
YXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAg
ICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNl
dCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KKyAgICAgICAgLy8gVGhhdCB3b3JrcywgYmVjYXVz
ZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBsaXN0LCBh
bmQKKyAgICAgICAgLy8gdGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9i
dXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2luZy4KKyAgICAgICAgbV9ob2xkZXIuY29kZUJsb2Nr
KCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9u
V2F0Y2hwb2ludCh0aGlzKTsKIH0KIAogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjp+
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKCkKIHsKIH0KIAotU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRj
aHBvaW50KCkKK1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25T
dHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KQogewotICAgIHJldHVybiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
OjpwdXNoKCp0aGlzLCBtX2hlYWQpOworICAgIHJldHVybiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpwdXNoKGtleSwgKnRoaXMsIG1faGVhZCk7CiB9CiAKIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJl
UmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKICAgICBSZWZQdHI8V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVmLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywKLSAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewogICAgIGlmICghaG9sZGVy
UmVmKQogICAgICAgICBob2xkZXJSZWYgPSBhZG9wdFJlZihuZXcgV2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvKGNvZGVCbG9jaywgc3R1YkluZm8pKTsKQEAgLTcyLDcgKzc3LDcgQEAgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwbwogICAgICAgICBBU1NFUlQoaG9s
ZGVyUmVmLT5tX3N0dWJJbmZvID09IHN0dWJJbmZvKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJu
IGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludCgpOworICAgIHJldHVybiBob2xkZXJSZWYtPmFkZFdh
dGNocG9pbnQoa2V5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludF9oCiAjZGVmaW5lIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnRfaAogCisj
aW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50
LmgiCiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNDYsMTUgKzQ3LDExIEBAIGNsYXNzIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQgOiAKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KAotICAgICAgICBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlcikKLSAgICAgICAgOiBtX2hvbGRl
cihob2xkZXIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAog
ICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlciwKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG5leHQpCi0g
ICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQorICAgICAgICA6IG1fa2V5KGtleSkKKyAgICAgICAg
LCBtX2hvbGRlcihob2xkZXIpCiAgICAgICAgICwgbV9uZXh0KFdURjo6bW92ZShuZXh0KSkKICAg
ICB7CiAgICAgfQpAQCAtNjksNiArNjYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Cisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CiAgICAgV2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvJiBtX2hvbGRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludD4gbV9uZXh0OwogfTsKQEAgLTgzLDExICs4MSwxMSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgfldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygpOwogICAgIAot
ICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoKTsKKyAg
ICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpOwogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50KiBlbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAog
ICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVm
LAotICAgICAgICBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyopOworICAgICAgICBDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXkpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2s7IH0KICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8oKSBjb25zdCB7
IHJldHVybiBtX3N0dWJJbmZvOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDkgKzQ4LDEyIEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmRlcmVmKCkKICAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0
aW9uU2V0KTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBu
dWxscHRyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6
CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CiAgICAgY2FzZSBhY2Nlc3NfdW5z
ZXQ6CiAgICAgICAgIC8vIFRoZXNlIGluc3RydWN0aW9ucyBkb24ndCBoYXZlIHRvIHJlbGVhc2Ug
YW55IGFsbG9jYXRlZCBtZW1vcnkKQEAgLTc1LDggKzc4LDEwIEBAIGJvb2wgU3RydWN0dXJlU3R1
YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNp
dGlvbl9ub3JtYWw6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0
OgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlv
dXNTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5wdXRC
eUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICB8fCAhSGVhcDo6aXNN
YXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpCisgICAgICAgICAgICB8fCAh
SGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIU9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcigKKyAgICAgICAgICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCkuYXJlU3RpbGxMaXZlKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5o
IgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgpAQCAtMTEz
LDcgKzExNCw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAgICAvLyBQdXRCeUlk
KgogCi0gICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLCBib29sIGlzRGlyZWN0KQorICAgIHZvaWQgaW5pdFB1dEJ5SWRU
cmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVj
dHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldCwgYm9vbCBpc0RpcmVjdCkKICAgICB7CiAgICAgICAgIGlmIChpc0RpcmVjdCkK
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGly
ZWN0OwpAQCAtMTIyLDcgKzEyMyw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAg
ICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBwcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0
dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRp
b24uY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldC5yZWxlYXNlUmF3UG9pbnRlcigpOwog
ICAgIH0KIAogICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlKQpAQCAtMTc1LDEwICsxNzYsMTEgQEAg
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgfQog
ICAgICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBv
aW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQqIGFkZFdhdGNocG9pbnQoCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgcmV0
dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRk
V2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMpOwor
ICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29uZGl0aW9uKTsKICAg
ICB9CiAgICAgCiAgICAgaW50OF90IGFjY2Vzc1R5cGU7CkBAIC0yMTcsMjMgKzIxOSwxMiBAQCBz
dHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxT
dHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIH0gZ2V0QnlJZFNlbGY7CiAg
ICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
YmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBwcm90b3R5cGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBib29sIGlzRGlyZWN0OwotICAg
ICAgICB9IGdldEJ5SWRQcm90bzsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAgICAgICAgICB1bnNp
Z25lZCBjb3VudCA6IDMxOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA6IDE7Ci0gICAgICAg
IH0gZ2V0QnlJZENoYWluOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBnZXRCeUlkTGlzdDsKICAgICAgICAgc3Ry
dWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcmV2aW91c1N0
cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1
cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsK
KyAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKICAgICAgICAgfSBwdXRCeUlkVHJh
bnNpdGlvbjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc5LDcgKzE3NzksMTAg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAg
ICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8KICAgICAgICAgICAgICAgICBBYnN0cmFjdFZh
bHVlIHJlc3VsdDsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVt
VmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsICFzdGF0dXNbaV0uYWx0ZXJuYXRlQmFzZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyB0aGluZyB3b24ndCBnaXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHBy
b3RvdHlwZXMuIElmIGl0IGRpZCwgd2UnZAorICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1v
cmUgd29yayB0byBkbyBoZXJlLgorICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIHN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHko
dmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
c3RhbnRSZXN1bHQpIHsKQEAgLTIwNjAsMzAgKzIwNjMsMjIgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAg
ICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rl
LT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0
YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IHZhcmlhbnQu
c3RydWN0dXJlU2V0KCk7CisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2Um
IGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gZ2V0Q2FzZS5zZXQoKTsKICAgICAgICAgICAgIHNldC5m
aWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKLSAgICAgICAgICAgIGlmICh2
YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZh
cmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGJhc2VGb3JMb2FkID0gYmFzZS5tX3ZhbHVlOwotICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFu
dFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5
KAotICAgICAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJl
KCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkg
eworICAgICAgICAgICAgaWYgKGdldENhc2UubWV0aG9kKCkua2luZCgpICE9IEdldEJ5T2Zmc2V0
TWV0aG9kOjpDb25zdGFudCkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAg
CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CiAgICAgICAgICAgICB0aGlz
UmVzdWx0LnNldCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAgICAgICAgICAgICAgICpt
X2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCisgICAgICAgICAgICAgICAgKmdldENhc2Uu
bWV0aG9kKCkuY29uc3RhbnQoKSwKICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNs
b2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9rZXkoa2V5KQorICAg
ICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGtleS5raW5k
KCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsKK30KKwordm9pZCBBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1fa2V5Lm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJm1fc3RydWN0dXJlV2F0Y2hw
b2ludCk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbV9rZXktPm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KG1fa2V5LnVpZCgpKTsKKyAgICBXYXRjaHBv
aW50U2V0KiBzZXQgPSBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPnByb3BlcnR5UmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgc2V0LT5hZGRXYXRjaHBvaW50KCZtX3By
b3BlcnR5V2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50OjpmaXJlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICAvLyBP
bmUgb2YgdGhlIHdhdGNocG9pbnRzIGZpcmVkLCBidXQgdGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1h
a2Ugc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlbSBhcmUKKyAgICAvLyBpbiBhbnkgc2V0IGFueW1v
cmUuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgYnkgYWxsb3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRo
ZSB3YXRjaHBvaW50cworICAgIC8vIHdoZXJldmVyIGZyb20gc2NyYXRjaC4KKyAgICBpZiAobV9z
dHJ1Y3R1cmVXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fc3RydWN0dXJlV2F0Y2hw
b2ludC5yZW1vdmUoKTsKKyAgICBpZiAobV9wcm9wZXJ0eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkK
KyAgICAgICAgbV9wcm9wZXJ0eVdhdGNocG9pbnQucmVtb3ZlKCk7CisgICAgCisgICAgaWYgKG1f
a2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7
CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1f
a2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgIH0KKyAgICAKKyAgICBTdHJp
bmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5
LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAgICBTdHJpbmdGaXJlRGV0YWlsIGRldGFp
bChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0dGlz
b24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQs
IENvdW50UmVvcHRpbWl6YXRpb24sICZkZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVy
bmFsKAorICAgIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBwdHJkaWZmX3QgbXlP
ZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoCisgICAgICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludCwgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJp
dHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAg
ICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisg
ICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAg
ICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0g
T0JKRUNUX09GRlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQsIG1fcHJvcGVydHlXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2Fz
dDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAg
IGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50
LT5maXJlKGRldGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVi
bGljOgorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spOworICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAgIAorICAgIHZvaWQgaW5zdGFsbCgpOwor
Citwcml2YXRlOgorICAgIGNsYXNzIFN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hw
b2ludCB7CisgICAgcHVibGljOgorICAgICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9Cisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZp
cmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9OworICAgIGNsYXNzIFByb3BlcnR5V2F0Y2hwb2lu
dCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFByb3BlcnR5V2F0
Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJ
bnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICAKKyAgICB2
b2lkIGZpcmUoY29uc3QgRmlyZURldGFpbCYpOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgU3RydWN0dXJl
V2F0Y2hwb2ludCBtX3N0cnVjdHVyZVdhdGNocG9pbnQ7CisgICAgUHJvcGVydHlXYXRjaHBvaW50
IG1fcHJvcGVydHlXYXRjaHBvaW50OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtl
eSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChr
ZXkud2F0Y2hpbmdSZXF1cmllc1N0cmN1dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2lu
dCgpKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1f
a2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7
Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29u
c3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9w
ZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rp
c2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0
Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29k
ZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0Owor
ICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFp
bCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwob3V0LnRvQ1N0cmluZygpLmRh
dGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxl
cjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9u
LCAmZGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRj
aHBvaW50IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAg
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURl
dGFpbCYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODczNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAzLDcgKzIwMywxNCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rp
b24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQ
dXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNl
dCwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRU
eXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CisgICAg
Tm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zm
c2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSog
YmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJv
cGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdl
dEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCos
IFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAgICAvLyBX
b3JrcyB3aXRoIGJvdGggR2V0QnlJZFZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRC
eUlkVmFyaWFudC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KKyAgICBOb2Rl
KiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCk7CisgICAgICAgIAogICAgIHZvaWQgaGFu
ZGxlR2V0QnlJZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5
cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0
IEdldEJ5SWRTdGF0dXMmKTsKQEAgLTIxMiw3ICsyMTksMzIgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBp
c0RpcmVjdCk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3ImKTsKKyAgICAKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9y
IGVtaXQgYSBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uIFJldHVybnMgZmFsc2UgaWYgdGhlCisg
ICAgLy8gY29uZGl0aW9uIG5vIGxvbmdlciBob2xkcywgYW5kIHRoZXJlZm9yZSBubyByZWFzb25h
YmxlIGNoZWNrIGNhbiBiZSBlbWl0dGVkLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mKTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwcm9tb3RlVG9D
b25zdGFudChHZXRCeU9mZnNldE1ldGhvZCk7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVy
IGEgd2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBJdCBtdXN0
IGJlIGEgUHJlc2VuY2UKKyAgICAvLyBjb25kaXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byBwcm9t
b3RlIGEgUHJlc2VuY2UgY29uZGl0aW9uIHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbi4KKyAg
ICAvLyBFbWl0cyBjb2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNvbmRpdGlvbiBn
dWFyZHMsIGFuZCByZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2
YWx1ZS4gUmV0dXJucyBudWxsIGlmIHRoZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLgorICAg
IEdldEJ5T2Zmc2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
Jik7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsK
KyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNr
KCkgZm9yIGVhY2ggY29uZGl0aW9uIGluIHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVpdGhlciBlbWl0
cyBjaGVja3Mgb3IgcmVnaXN0ZXJzCisgICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEgY29tYmluYXRp
b24gb2YgdGhlIHR3bykgdG8gbWFrZSB0aGUgY29uZGl0aW9ucyBob2xkLiBJZiBhbnkgb2YgdGhv
c2UKKyAgICAvLyBjb25kaXRpb25zIGFyZSBubyBsb25nZXIgY2hlY2thYmxlLCByZXR1cm5zIGZh
bHNlLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsK
KyAgICAKKyAgICAvLyBDYWxscyBjaGVjaygpIGZvciB0aG9zZSBjb25kaXRpb25zIHRoYXQgYXJl
bid0IHRoZSBzbG90IGJhc2UsIGFuZCBjYWxscyBsb2FkKCkgZm9yIHRoZSBzbG90CisgICAgLy8g
YmFzZS4gRG9lcyBhIGNvbWJpbmF0aW9uIG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBj
aGVjayBlbWlzc2lvbiB0byBndWFyZCB0aGUKKyAgICAvLyBjb25kaXRpb25zLCBhbmQgZW1pdHMg
Y29kZSB0byBsb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzbG90IGJhc2UuIFJldHVybnMgYSBub2Rl
IGNvbnRhaW5pbmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgYW55
IG9mIHRoZSBjb25kaXRpb25zIHdlcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAgICBHZXRCeU9m
ZnNldE1ldGhvZCBwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOwor
ICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICB2b2lkIHByZXBhcmVUb1Bh
cnNlQmxvY2soKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiArNzM4LDkgQEAg
cHJpdmF0ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2so
SlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90
aGVyIHdheSBhcm91bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBw
cm9maXQgZnJvbSB1c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFw
dGl2ZWx5IHdhdGNoIHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBh
cyB3ZSBtYWtlIGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUg
PSB3ZWFrSlNDb25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5v
ZGUpOwogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKQEAgLTIyNDAsMTUgKzIyNzUsOCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmVTZXQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
Tm9kZVR5cGUgb3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAgICBpZiAoYmFz
ZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3Jh
cGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0
LCBvZmZzZXQpKSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOwotICAg
ICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0yMjY0LDYg
KzIyOTIsMTggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAg
IHJldHVybiBnZXRCeU9mZnNldDsKIH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdl
dEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQoreworICAgIGlmIChiYXNlLT5oYXNDb25z
dGFudCgpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRD
b25zdGFudFByb3BlcnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQsIG9mZnNldCkp
IHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAgICBy
ZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVy
TnVtYmVyLCBvZmZzZXQsIG9wKTsKK30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgTm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAt
MjI4MSwxMCArMjMyMSwyMDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zm
c2V0KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRD
aGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKQorYm9vbCBC
eXRlQ29kZVBhcnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbikKK3sKKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRp
dGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBhZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3ZWFrSlNDb25z
dGFudChjb25kaXRpb24ub2JqZWN0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlP
ZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0
TWV0aG9kIG1ldGhvZCkKK3sKKyAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1l
dGhvZDo6TG9hZEZyb21Qcm90b3R5cGUKKyAgICAgICAgJiYgbWV0aG9kLnByb3RvdHlwZSgpLT5z
dHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25z
dGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShtZXRob2QucHJvdG90eXBlKCkt
PnZhbHVlKCksIG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCksIG1ldGhvZC5vZmZzZXQo
KSkpCisgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3Jh
cGguZnJlZXplKGNvbnN0YW50KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBtZXRob2Q7Cit9
CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIC8vIFdlIG1pZ2h0IHByb21v
dGUgdGhpcyB0byBFcXVpdmFsZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBk
byBzdWNoIHByb21vdGlvbgorICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGlj
aXR5IHRoaXMgY2Fubm90IGJlIGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9u
LgorICAgIC8vIE5vbmUgb2YgdGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0
IGEgbG9hZCBvZiBhbiBFcXVpdmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBz
dXBwb3J0aW5nIGl0IHdvdWxkIGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAg
UkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJl
c2VuY2UpOworICAgIAorICAgIC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxl
IHRoaXMsIGZyb20gbW9zdCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisg
ICAgLy8gMSkgV2F0Y2hwb2ludCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVy
biBhIGNvbnN0YW50IG5vZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3Ro
ZXIgY29kZSBpcyBlbWl0dGVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3Qg
aXMgbmV2ZXIgcmVnaXN0ZXJlZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVy
byBjb2RlIGFuZCB3ZSB3b24ndCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmpl
Y3QKKyAgICAvLyAgICB0cmFuc2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNo
YWJsZSByaWdodCBub3cuCisgICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBh
bmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNo
ZWQgYnkgdGhlCisgICAgLy8gICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdh
dGNoIHRoZSBzdHJ1Y3R1cmUgYW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAg
IC8vICAgIGNvbmRpdGlvbiwgc2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8g
YSBjb25zdGFudCBpbiBJUiB3aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0
aGUgc3RydWN0dXJlIGFueXdheSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0
aGUgY29uZGl0aW9uLgorICAgIC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5k
IHRoZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBi
eSB0aGUKKyAgICAvLyAgICBERkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxs
VmFsaWQoKSBhbmQgIWRmZ1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAg
ICB0aGUgY29uZGl0aW9uLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVk
IHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlz
IG5vdCB3YXRjaGFibGUuIEVtaXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVt
aXQgYSBsb2FkLgorICAgIC8vCisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xk
LiBHaXZlIHVwIGFuZCByZXR1cm4gbnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWdy
ZWUgb24gd2hhdCB0aGUgc3RydWN0dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGluZyB0
aGVzZSB2YXJpb3VzCisgICAgLy8gY2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5
IHRvIHByb21vdGUgUHJlc2VuY2UgdG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRv
aW5nIGFueXRoaW5nIGVsc2UKKyAgICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJs
ZS4gQWxzbywgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUg
YnV0CisgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFu
IGVxdWl2YWxlbmNlIChzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAo
MiksIGFuZCAoMykgYWJvdmUpLgorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQoY29u
ZGl0aW9uLm9mZnNldCgpKSkgeworICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNhdXNl
IG9ubHkgdGhlIEdDIGNhbiBjYXVzZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdhcmJh
Z2UKKyAgICAgICAgLy8gdmFsdWUuCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRpb24u
b2JqZWN0KCktPmdldERpcmVjdChjb25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAg
ICAgICAgICBjb25kaXRpb24ub2JqZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOworICAg
ICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisg
ICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJl
ZXplKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ2xsIGhh
dmUgdG8gbWF0ZXJpYWxpemUgdGhlIGNvbmRpdGlvbidzIGJhc2UgYXMgYSBjb25zdGFudCBpbiBE
RkcgSVIuIE9uY2UKKyAgICAvLyB3ZSBkbyB0aGlzLCB0aGUgZnJvemVuIHZhbHVlIHdpbGwgaGF2
ZSBpdHMgb3duIGlkZWEgb2Ygd2hhdCB0aGUgc3RydWN0dXJlIGlzLiBVc2UgdGhhdCBmcm9tCisg
ICAgLy8gbm93IG9uIGp1c3QgYmVjYXVzZSBpdCdzIGxlc3MgY29uZnVzaW5nLgorICAgIEZyb3pl
blZhbHVlKiBiYXNlID0gbV9ncmFwaC5mcmVlemUoY29uZGl0aW9uLm9iamVjdCgpKTsKKyAgICBz
dHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiB0aGUg
c3RydWN0dXJlIHRoYXQgd2UndmUgcmVnaXN0ZXJlZCBtYWtlcyB0aGUgY29uZGl0aW9uIGhvbGQu
IElmIG5vdCwganVzdCBnaXZlCisgICAgLy8gdXAuIFRoaXMgaXMgY2FzZSAoNSkgYWJvdmUuCisg
ICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisg
ICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgIAorICAgIC8vIElmIHRoZSBz
dHJ1Y3R1cmUgaXMgd2F0Y2hlZCBieSB0aGUgREZHIGFscmVhZHksIHRoZW4ganVzdCB1c2UgdGhp
cyBmYWN0IHRvIGVtaXQgdGhlIGxvYWQuCisgICAgLy8gVGhpcyBpcyBjYXNlICgyKSBhYm92ZS4K
KyAgICBpZiAoc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICByZXR1cm4gcHJv
bW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2Us
IGNvbmRpdGlvbi5vZmZzZXQoKSkpOworICAgIAorICAgIC8vIElmIHdlIGNhbiB3YXRjaCB0aGUg
Y29uZGl0aW9uIHJpZ2h0IG5vdywgdGhlbiB3ZSBjYW4gZW1pdCB0aGUgbG9hZCBhZnRlciB3YXRj
aGluZyBpdC4gVGhpcworICAgIC8vIGlzIGNhc2UgKDMpIGFib3ZlLgorICAgIGlmIChtX2dyYXBo
LndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25z
dGFudChHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9u
Lm9mZnNldCgpKSk7CisgICAgCisgICAgLy8gV2UgY2FuJ3Qgd2F0Y2ggYW55dGhpbmcgYnV0IHdl
IGtub3cgdGhhdCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgc2F0aXNmaWVzIHRoZSBjb25kaXRpb24u
IFNvLAorICAgIC8vIGNoZWNrIGZvciB0aGF0IHN0cnVjdHVyZSBhbmQgdGhlbiBlbWl0IHRoZSBs
b2FkLgorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLCAKKyAgICAgICAg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICBhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhiYXNlKSkpOworICAgIHJldHVybiBwcm9tb3RlVG9D
b25zdGFudChHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0
aW9uLm9mZnNldCgpKSk7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0
IEdldEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2QsCisgICAgTm9kZVR5cGUgb3ApCiB7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgY2VsbENv
bnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHZlY3RvcltpXS5jb25zdGFudCgpLCB2ZWN0b3JbaV0u
c3RydWN0dXJlKCkpOworICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgIGNhc2UgR2V0
QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICByZXR1cm4gYWRkVG9HcmFw
aChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLmNvbnN0YW50KCkpKTsKKyAgICBjYXNlIEdldEJ5
T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICBOb2RlKiBiYXNlTm9k
ZSA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5wcm90b3R5cGUoKSkpOwor
ICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZU5vZGUsIGlk
ZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOworICAgIH0KKyAgICBjYXNlIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAvLyBXaWxsIG5ldmVyIHNlZSB0aGlzIGZy
b20gcGxhbkxvYWQoKS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIE5vZGVUeXBlIG9wKQoreworICAgIEdldEJ5T2Zm
c2V0TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvbik7CisgICAgcmV0dXJuIGxvYWQo
cHJlZGljdGlvbiwgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25kaXRpb24udWlkKCkp
LCBtZXRob2QsIG9wKTsKK30KKworYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2soY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBmb3IgKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlvblNldCkgeworICAg
ICAgICBpZiAoIWNoZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBh
cnNlcjo6cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCkKK3sKKyAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKKyAgICAg
ICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25k
aXRpb246OlByZXNlbmNlOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7IC8v
IFNob3VsZCBvbmx5IHNlZSBleGFjdGx5IG9uZSBvZiB0aGVzZS4KKyAgICAgICAgICAgIHJlc3Vs
dCA9IHBsYW5Mb2FkKGNvbmRpdGlvbik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCFjaGVjayhjb25kaXRpb24pKQor
ICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgICAgICB9Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKCEhcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBO
b2RlVHlwZSBvcCkKK3sKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZChj
b25kaXRpb25TZXQpOworICAgIHJldHVybiBsb2FkKAorICAgICAgICBwcmVkaWN0aW9uLAorICAg
ICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGNvbmRpdGlvblNldC5zbG90QmFzZUNv
bmRpdGlvbigpLnVpZCgpKSwKKyAgICAgICAgbWV0aG9kLCBvcCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZhcmlhbnRUeXBlPgorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgY29uc3QgVmFyaWFudFR5cGUmIHZhcmlhbnQpCit7CisgICAgYWRkVG9HcmFwaChDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0
dXJlU2V0KCkpKSwgYmFzZSk7CisgICAgCisgICAgU3BlY3VsYXRlZFR5cGUgbG9hZFByZWRpY3Rp
b247CisgICAgTm9kZVR5cGUgbG9hZE9wOworICAgIGlmICh2YXJpYW50LmNhbGxMaW5rU3RhdHVz
KCkpIHsKKyAgICAgICAgbG9hZFByZWRpY3Rpb24gPSBTcGVjQ2VsbE90aGVyOworICAgICAgICBs
b2FkT3AgPSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDsKKyAgICB9IGVsc2UgeworICAgICAgICBs
b2FkUHJlZGljdGlvbiA9IHByZWRpY3Rpb247CisgICAgICAgIGxvYWRPcCA9IEdldEJ5T2Zmc2V0
OworICAgIH0KKyAgICAKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKKyAgICBpZiAoIXZhcmlhbnQu
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKQorICAgICAgICBsb2FkZWRWYWx1ZSA9IGxvYWQobG9h
ZFByZWRpY3Rpb24sIHZhcmlhbnQuY29uZGl0aW9uU2V0KCksIGxvYWRPcCk7CisgICAgZWxzZSB7
CisgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBs
b2FkUHJlZGljdGlvbiwgYmFzZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgIGxvYWRPcCk7CisgICAgfQorCisg
ICAgLy8gTWFrZSBzdXJlIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiBrbm93cyB0aGF0IHdlJ3ZlIHVz
ZWQgYmFzZS4KKyAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOworICAgIAorICAgIHJldHVy
biBsb2FkZWRWYWx1ZTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgK
QEAgLTIzMDcsMTggKzI1NDYsMzYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJ
ZCgKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24o
KS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKLSAgICAKKyAgICAgICAgVmVjdG9yPE11bHRpR2V0
QnlPZmZzZXRDYXNlLCAyPiBjYXNlczsKKyAgICAgICAgCiAgICAgICAgIC8vIDEpIEVtaXQgcHJv
dG90eXBlIHN0cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMuIFRoaXMgY291bGQgc29ydCBv
ZiBtYXliZSBub3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwgaWYgdGhlcmUgaXMgc29tZSBy
YXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCByZXF1aXJlcyBhIGxvdAogICAg
ICAgICAvLyAgICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBhcmUgbm90IHdhdGNocG9pbnRh
YmxlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5SWRTdGF0dXMu
bnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KQotICAgICAgICAgICAgZW1pdENoZWNrcyhn
ZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7Ci0gICAgICAgIAor
ICAgICAgICBmb3IgKGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogZ2V0QnlJZFN0YXR1
cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5jb25kaXRpb25TZXQoKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoCisgICAgICAgICAgICAg
ICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5T2Zmc2V0
TWV0aG9kOjpsb2FkKHZhcmlhbnQub2Zmc2V0KCkpKSk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0
TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpOworICAgICAg
ICAgICAgaWYgKCFtZXRob2QpIHsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGRlc3RpbmF0aW9uT3BlcmFuZCksCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoZ2V0
QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2Up
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNhc2VzLmFwcGVuZChNdWx0aUdldEJ5T2Zmc2V0Q2FzZSh2YXJpYW50LnN0
cnVjdHVyZVNldCgpLCBtZXRob2QpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2dyYXBo
LmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGlj
ZUlubGluZWRHZXRCeUlkKCk7CisgICAgCiAgICAgICAgIC8vIDIpIEVtaXQgYSBNdWx0aUdldEJ5
T2Zmc2V0CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211
bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IGdldEJ5
SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+Y2FzZXMgPSBjYXNlczsKICAgICAg
ICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoTXVsdGlHZXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlvbiks
IGJhc2UpKTsKQEAgLTIzMjgsMzAgKzI1ODUsMTYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlJZCgKICAgICBBU1NFUlQoZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEp
OwogICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBnZXRCeUlkU3RhdHVzWzBdOwogICAgICAg
ICAgICAgICAgIAorICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9hZChwcmVkaWN0aW9uLCBiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50KTsKKyAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Cisg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoZ2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8o
cHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmICht
X2dyYXBoLmNvbXBpbGF0aW9uKCkpCiAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90
aWNlSW5saW5lZEdldEJ5SWQoKTsKICAgICAKLSAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNl
OwotICAgICAgICAgICAgICAgIAotICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSksIGJhc2Up
OwotICAgIAotICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKLQotICAg
IGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0
YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAKLSAgICAvLyBVbmxlc3Mgd2Ugd2Fu
dCBidWdzIGxpa2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4Nzgz
LCB3ZSBuZWVkIHRvCi0gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJhc2Ugb2YgdGhlIG9yaWdpbmFs
IGdldF9ieV9pZCBpcyBrZXB0IGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aAotICAgIC8vIGFs
bCBvZiB0aGUgc3BlY3VsYXRpb25zLiBXZSBvbmx5IGluc2VydCB0aGUgUGhhbnRvbSBpZiB0aGVy
ZSBoYWQgYmVlbiBhIENoZWNrU3RydWN0dXJlCi0gICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRo
YW4gdGhlIGJhc2UgZm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNlLgotICAgIGlm
IChvcmlnaW5hbEJhc2UgIT0gYmFzZSkKLSAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcmln
aW5hbEJhc2UpOwotICAgIAotICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZz
ZXQoCi0gICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBw
cmVkaWN0aW9uLAotICAgICAgICBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRp
Zmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0
YXR1cygpID8gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQgOiBHZXRCeU9mZnNldCk7Ci0gICAgCiAg
ICAgaWYgKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTIzODgsNyArMjYzMSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
SWQoCiAgICAgLy8gICAgc2luY2Ugd2Ugb25seSByZWFsbHkgY2FyZSBhYm91dCAndGhpcycgaW4g
dGhpcyBjYXNlLiBCdXQgd2UncmUgbm90IGdvaW5nIHRvIHRha2UgdGhhdAogICAgIC8vICAgIHNo
b3J0Y3V0LgogICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0
ZXIrKyksIG9yaWdpbmFsQmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAg
CiAgICAgaGFuZGxlQ2FsbCgKICAgICAgICAgZGVzdGluYXRpb25PcGVyYW5kLCBDYWxsLCBJbmxp
bmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKSwKQEAg
LTI0MjIsMTcgKzI2NjUsMjAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1f
Z3JhcGguY29tcGlsYXRpb24oKSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+
bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKLSAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJlY3Qp
IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0YXR1
cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBpZiAo
cHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ZW1pdENoZWNrcyhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uc3RhbnRDaGVja3MoKSk7
CisgICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0u
Y29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2Us
IGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkp
CisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlk
KCk7CisgICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+dmFyaWFudHMg
PSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1i
ZXIgPSBpZGVudGlmaWVyTnVtYmVyOwpAQCAtMjQ1NCw3ICsyNzAwLDEwIEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbjogewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
bV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsK
LSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICBp
ZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICBlbWl0UHV0
QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJl
Y3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHZh
cmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI1MDUsMTkgKzI3NTQsMTEgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBOb2RlKiBvcmlnaW5hbEJhc2Ug
PSBiYXNlOwotICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgIENoZWNr
U3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1
cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25z
dGFudENoZWNrcygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSkKLSAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0
ZUJhc2UoKSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdl
dEJ5T2Zmc2V0KAotICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgdmFyaWFudC5iYXNl
U3RydWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAg
ICAgICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVl
ID0gbG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50KTsK
KyAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgeworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTm9kZSogc2V0
dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZhbHVlKTsKICAgICAgICAgCkBAIC0y
NTQ1LDcgKzI3ODYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7
CiAgICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4
dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5ha2Vk
U2V0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIHZhbHVl
LCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAgICAgICAgIGhhbmRsZUNhbGwoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE4
NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDkgQEAgdm9pZCBDb21tb25EYXRhOjp2YWxpZGF0ZVJl
ZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNrKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7CiAgICAgICAgIH0KICAg
ICB9CisgICAgCisgICAgZm9yIChBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQqIHdhdGNocG9p
bnQgOiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzKQorICAgICAgICB3YXRjaHBvaW50LT5r
ZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorI2luY2x1
ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1
ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5o
IgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTgsNiArMTAwLDggQEAgcHVibGljOgogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7CiAgICAgVmVjdG9yPFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+PiB3ZWFrU3RydWN0dXJlUmVmZXJlbmNlczsKICAgICBCYWc8
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiB3YXRjaHBvaW50czsKKyAgICBCYWc8QWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwor
ICAgIEJhZzxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+IGFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNl
bWVudD4ganVtcFJlcGxhY2VtZW50czsKICAgICAKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBp
bGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODczNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjk0LDIxICsyOTQsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVzaCBDRkEgb3Zl
ciB0aGlzIG5vZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCiAgICAgICAgICAgICAg
ICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25z
dGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBk
YXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNl
dCgpLmZpbHRlcihiYXNlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu
dmFyaWFudHNbaS0tXSA9IGRhdGEudmFyaWFudHMubGFzdCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YS52YXJpYW50cy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOwor
ICAgICAgICAgICAgICAgICAgICBnZXRDYXNlLnNldCgpLmZpbHRlcihiYXNlVmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2V0Q2FzZS5zZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEuY2FzZXNbaS0tXSA9IGRhdGEuY2FzZXMubGFzdCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoZGF0
YS52YXJpYW50cy5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYXNlcy5z
aXplKCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZGF0YS52YXJpYW50c1swXSwgZGF0YS5pZGVu
dGlmaWVyTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJs
b2NrLCBub2RlLCBkYXRhLmNhc2VzWzBdLm1ldGhvZCgpLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIp
OwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQpAQCAtMzc0LDggKzM3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghc3RhdHVzW2ldLmNvbnN0YW50Q2hlY2tzKCkuaXNFbXB0eSgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbaV0uYWx0ZXJuYXRlQmFzZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghc3RhdHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGhhbmRsZSBwcm90b3R5
cGUgY2FzZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzg2CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTM5Miw3ICszOTAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERh
dGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAg
ICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBzdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRz
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+Y2FzZXMuYXBwZW5kKAorICAgICAgICAg
ICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHZXRCeU9mZnNldE1ldGhvZDo6bG9hZCh2YXJpYW50Lm9mZnNldCgpKSkpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRl
bnRpZmllck51bWJlcjsKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9NdWx0aUdldEJ5
T2Zmc2V0KGRhdGEpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwpAQCAtNDMyLDkg
KzQzNSwzMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMo
KTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgYWRkQ2hlY2tzKG9yaWdpbiwgaW5kZXhJbkJs
b2NrLCBzdGF0dXNbaV0uY29uc3RhbnRDaGVja3MoKSk7CisKKyAgICAgICAgICAgICAgICBib29s
IGFsbEdvb2QgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDog
dmFyaWFudC5jb25kaXRpb25TZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVy
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdlYWtKU0NvbnN0YW50KGNvbmRpdGlvbi5vYmplY3QoKSkpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkgewogICAg
ICAgICAgICAgICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNl
VmFsdWUsIHN0YXR1c1swXSwgaWRlbnRpZmllck51bWJlcik7CkBAIC01MjksNyArNTUzLDM1IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CisgICAg
CisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBu
b2RlLCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyKQorICAgIHsKKyAgICAgICAgLy8gV2hlbiB3ZSBnZXQgdG8gaGVyZSB3ZSBoYXZlIGFs
cmVhZHkgZW1pdHRlZCBhbGwgb2YgdGhlIHJlcXVpc2l0ZSBjaGVja3MgZm9yIGV2ZXJ5dGhpbmcu
CisgICAgICAgIC8vIFNvLCB3ZSBqdXN0IG5lZWQgdG8gZW1pdCB3aGF0IHRoZSBtZXRob2Qgb2Jq
ZWN0IHRlbGxzIHVzIHRvIGVtaXQuCiAgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1ldGhvZC5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6
CisgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1ldGhvZC5jb25z
dGFudCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGlu
ZGV4SW5CbG9jaywgbm9kZSwgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhv
ZC5vZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKKyAgICAgICAgICAg
IE5vZGUqIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoaW5kZXhJbkJsb2Nr
LCBvcmlnaW4sIG1ldGhvZC5wcm90b3R5cGUoKSk7CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZz
ZXQoCisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBub2RlLCBFZGdlKGNoaWxkLCBLbm93
bkNlbGxVc2UpLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9IH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVu
c2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFz
ZVZhbHVlLCBjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlcikKICAgICB7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2lu
OwpAQCAtNTM3LDI1ICs1ODksMjQgQEAgcHJpdmF0ZToKIAogICAgICAgICBhZGRCYXNlQ2hlY2so
aW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwog
ICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKLSAgICAgICAgaWYgKHZhcmlh
bnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFs
dGVybmF0ZUJhc2UoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBi
YXNlVmFsdWUubV92YWx1ZTsKLSAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRy
eUdldENvbnN0YW50UHJvcGVydHkoYmFzZUZvckxvYWQsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgp
LCB2YXJpYW50Lm9mZnNldCgpKSkgeworICAgICAgICAvLyBXZSBhcmVuJ3Qgc2V0IHVwIHRvIGhh
bmRsZSBwcm90b3R5cGUgc3R1ZmYuCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOworCisgICAgICAgIGlmIChKU1ZhbHVl
IHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VWYWx1ZS5tX3ZhbHVl
LCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKICAgICAgICAg
ICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFsdWUp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5CbG9jaywgb3JpZ2luLCB2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGlsZEVkZ2UgPSBFZGdlKGNoaWxkLCBL
bm93bkNlbGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRV
c2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxv
Y2ssIG5vZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5C
bG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGNoaWxkRWRnZS5zZXRV
c2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAgICAgICBFZGdlIHByb3BlcnR5U3Rv
cmFnZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNl
dCgpKSkKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNTYz
LDcgKzYxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFN0b3Jh
Z2VBY2Nlc3NEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsK
LSAgICAgICAgZGF0YS5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOworICAgICAgICBkYXRhLm9m
ZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmll
ck51bWJlcjsKICAgICAgICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRh
dGEsIHByb3BlcnR5U3RvcmFnZSk7CkBAIC02NDMsMTUgKzY5NCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDaGVjayhpbmRleEluQmxvY2ssIG5vZGUtPm9y
aWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZENoZWNrcygK
LSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3Qg
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY2hlY2tzKQotICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoZWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5k
ZXhJbkJsb2NrLCBjaGVja3NbaV0uY29uc3RhbnQoKSwgY2hlY2tzW2ldLnN0cnVjdHVyZSgpKTsK
LSAgICAgICAgfQotICAgIH0KLQogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBpZiAobV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUoKSkgPT0gU3RydWN0dXJlUmVnaXN0ZXJlZEFuZFdh
dGNoZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJh
eUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRh
dGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNo
cG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2lu
dCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9p
bnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMjMgQEAgdm9pZCBBcnJh
eUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVB
ZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGlu
ZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikK
IHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29t
bW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4g
SWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJy
ZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24u
d2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAg
IHN3aXRjaCAoa2V5LmtpbmQoKSkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2
YWxlbmNlOgorICAgICAgICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRz
LmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQog
fQogCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQs
NiArODgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAg
IG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBv
aW50czo6YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7Cisg
ICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVz
aXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBp
ZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTg4LDYgKzEwNyw3IEBAIHZvaWQg
RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2lubGluZVNldHMucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFs
bHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFk
ZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJl
YWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBv
aW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC05NSw3ICsxMTUsOCBAQCBib29sIERlc2ly
ZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgcmV0dXJuIG1fc2V0cy5hcmVTdGls
bFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAg
ICAmJiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2J1ZmZl
clZpZXdzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGls
bFZhbGlkKCkKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxp
ZCgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4
NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdDb21tb25E
YXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJWaWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRl
ICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIApAQCAtNDEsMTUgKzQy
LDE1IEBAIGNsYXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdlbmVy
aWNTZXRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgVCBzZXQsIFdh
dGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayogY29k
ZUJsb2NrLCBUIHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHNldC0+YWRkKHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0LT5hZGQoY29tbW9uLndh
dGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFzQmVl
bkludmFsaWRhdGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9
CiB9OwogCiBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2
b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0
YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVl
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRl
ZCgpOwpAQCAtNTcsMTIgKzU4LDE4IEBAIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7CiB9
OwogCiBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRp
YyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsK
KyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21t
b25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZm
ZXJWaWV3KiB2aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3Ro
KCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KK307CisKK3N0cnVjdCBB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQo
Q29kZUJsb2NrKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7
CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1dhdGNoYWJsZSgp
OwogICAgIH0KIH07CiAKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8mIHNl
dCA6IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29t
bW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFk
ZChjb2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRk
ZWQgPSB0cnVlOwogICAgIH0KQEAgLTEyMiw2ICsxMjksMTAgQEAgcHVibGljOgogICAgIHZvaWQg
YWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAgICB2b2lkIGFkZExhemlseShKU0FycmF5QnVm
ZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3Qg
Y2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRv
ZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJv
b2trZWVwaW5nLgorICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJik7CisgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKICAgICB2
b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21tb25EYXRhJik7CkBAIC0xNDQsMTIgKzE1NSwx
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNo
ZWQodmlldyk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVy
ZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBHZW5lcmlj
RGVzaXJlZFdhdGNocG9pbnRzPFdhdGNocG9pbnRTZXQqPiBtX3NldHM7CiAgICAgR2VuZXJpY0Rl
c2lyZWRXYXRjaHBvaW50czxJbmxpbmVXYXRjaHBvaW50U2V0Kj4gbV9pbmxpbmVTZXRzOwogICAg
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVB
ZGFwdG9yPiBtX2luZmVycmVkVmFsdWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8
SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9i
dWZmZXJWaWV3czsKKyAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZl
U3RydWN0dXJlU2V0czsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJl
bmNlcy5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1
MCwxNCBAQCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6On5EZXNpcmVkV2Vha1JlZmVyCiAKIHZvaWQg
RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXppbHkoSlNDZWxsKiBjZWxsKQogewotICAgIG1f
cmVmZXJlbmNlcy5hZGQoY2VsbCk7CisgICAgaWYgKGNlbGwpCisgICAgICAgIG1fcmVmZXJlbmNl
cy5hZGQoY2VsbCk7Cit9CisKK3ZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXppbHko
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFkZExh
emlseSh2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpj
b250YWlucyhKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDE4NzM0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgCiAKIGNsYXNz
IENvZGVCbG9jazsKIGNsYXNzIEpTQ2VsbDsKK2NsYXNzIEpTVmFsdWU7CiBjbGFzcyBTbG90Vmlz
aXRvcjsKIGNsYXNzIFZNOwogCkBAIC00OCw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICB+RGVzaXJl
ZFdlYWtSZWZlcmVuY2VzKCk7CiAKICAgICB2b2lkIGFkZExhemlseShKU0NlbGwqKTsKKyAgICB2
b2lkIGFkZExhemlseShKU1ZhbHVlKTsKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAg
IAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNiAr
ODQ4LDMwIEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVGbGEKICAgICB9
CiB9CiAKK2Jvb2wgR3JhcGg6OndhdGNoQ29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNXYXRjaGFibGUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5
Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5Lmhhc1Byb3RvdHlwZSgpKQorICAgICAgICBtX3BsYW4u
d2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5wcm90b3R5cGUoKSk7CisgICAgaWYgKGtleS5o
YXNSZXF1aXJlZFZhbHVlKCkpCisgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXpp
bHkoa2V5LnJlcXVpcmVkVmFsdWUoKSk7CisgICAgCisgICAgbV9wbGFuLndhdGNocG9pbnRzLmFk
ZExhemlseShrZXkpOworCisgICAgaWYgKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246
OlByZXNlbmNlKQorICAgICAgICBtX3NhZmVUb0xvYWQuYWRkKHN0ZDo6bWFrZV9wYWlyKGtleS5v
YmplY3QoKSwga2V5Lm9mZnNldCgpKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgR3JhcGg6OmlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQoreworICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtlX3BhaXIo
YmFzZSwgb2Zmc2V0KSk7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5l
c3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1f
Ynl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkBAIC0xMDIwLDggKzEwNDQsMTIgQEAg
SlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKUwogSlNWYWx1ZSBHcmFwaDo6
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJhc2UsIGNvbnN0IFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAg
IGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkKKyAgICBp
ZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IElmIHdlIGp1c3QgY29udmVydGVkIHRoZSBvZmZzZXQgdG8gYSB1aWQsIHdl
IGNvdWxkIGRvIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uCisgICAgICAgIC8vIHdhdGNoaW5nIHRv
IGNvbnN0YW50LWZvbGQgdGhlIHByb3BlcnR5LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MjcxCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CisgICAgfQogICAgIAogICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UsIHN0
cnVjdHVyZS5zZXQoKSwgb2Zmc2V0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSwxNSBAQCBwdWJsaWM6CiAg
ICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVu
dGlmaWVyczsgfQogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVy
biBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRo
ZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEgUHJl
c2VuY2UgY29uZGl0aW9uLAorICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBxdWVy
eSBpZiB0aGUgY29uZGl0aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mga25v
d3MKKyAgICAvLyB3aGF0J3MgZ29pbmcgb24uCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25v
d24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0
IGlzIGZpbmUuIFRoaXMgaXMKKyAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25k
aXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4KKyAgICBib29sIGlzU2FmZVRv
TG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOworICAgIAogICAgIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkBAIC04NDQsNiAr
ODUzLDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5s
aW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRy
PEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIEhhc2hNYXA8
Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5dGVjb2RlS2ls
bHM7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9mZnNldD4+IG1f
c2FmZVRvTG9hZDsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVt
YmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9v
cHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRp
R2V0QnlPZmZzZXREYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEdldEJ5T2Zmc2V0TWV0aG9kOjpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAoreworICAgIG91dC5wcmludChtX2tpbmQsICI6Iik7CisgICAgc3dpdGNoIChtX2tpbmQpIHsK
KyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRl
eHQoY29uc3RhbnQoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2Fk
OgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KG9mZnNldCgpLCAiQCIsIHBv
aW50ZXJEdW1wSW5Db250ZXh0KHByb3RvdHlwZSgpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9Cit9CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK3Zv
aWQgTXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGluQ29udGV4dCht
X3NldCwgY29udGV4dCksICI6IiwgaW5Db250ZXh0KG1fbWV0aG9kLCBjb250ZXh0KSk7Cit9CisK
K3ZvaWQgTXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRG
RzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEdldEJ5T2Zmc2V0TWV0
aG9kOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeU9m
ZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAg
IG91dC5wcmludCgiTG9hZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6CisgICAgICAgIG91dC5wcmludCgiTG9hZEZyb21Q
cm90b3R5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011
bHRpR2V0QnlPZmZzZXREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorI2RlZmluZSBERkdN
dWx0aUdldEJ5T2Zmc2V0RGF0YV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkR1bXBDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHZXRCeU9mZnNldE1ldGhvZCB7CitwdWJsaWM6Cisg
ICAgZW51bSBLaW5kIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgQ29uc3RhbnQsCisgICAg
ICAgIExvYWQsCisgICAgICAgIExvYWRGcm9tUHJvdG90eXBlCisgICAgfTsKKyAgICAKKyAgICBH
ZXRCeU9mZnNldE1ldGhvZCgpCisgICAgICAgIDogbV9raW5kKEludmFsaWQpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgR2V0QnlPZmZzZXRNZXRob2QgY29uc3RhbnQoRnJvemVuVmFs
dWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC51LmNvbnN0YW50
ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBHZXRCeU9mZnNldE1ldGhvZCBsb2FkKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IExvYWQ7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0QnlPZmZzZXRNZXRob2Qg
bG9hZEZyb21Qcm90b3R5cGUoRnJvemVuVmFsdWUqIHByb3RvdHlwZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9raW5kID0gTG9hZEZyb21Qcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51Lmxv
YWQucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXN1bHQudS5sb2FkLm9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZDsgfQorICAgIAorICAg
IEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIEZyb3plblZh
bHVlKiBjb25zdGFudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IENv
bnN0YW50KTsKKyAgICAgICAgcmV0dXJuIHUuY29uc3RhbnQ7CisgICAgfQorICAgIAorICAgIEZy
b3plblZhbHVlKiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiB1LmxvYWQucHJvdG90eXBl
OworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkIHx8IGtpbmQoKSA9PSBMb2FkRnJvbVByb3Rv
dHlwZSk7CisgICAgICAgIHJldHVybiB1LmxvYWQub2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB1bmlv
biB7CisgICAgICAgIEZyb3plblZhbHVlKiBjb25zdGFudDsKKyAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGU7CisgICAgICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQ7CisgICAgICAgIH0gbG9hZDsKKyAgICB9IHU7CisgICAgS2luZCBtX2tpbmQ7
Cit9OworCitjbGFzcyBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSB7CitwdWJsaWM6CisgICAgTXVsdGlH
ZXRCeU9mZnNldENhc2UoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTXVsdGlHZXRCeU9mZnNl
dENhc2UoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiBt
ZXRob2QpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgc2V0KCkgeyByZXR1cm4gbV9z
ZXQ7IH0KKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
OyB9CisgICAgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWV0aG9kOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5vbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIFN0cnVjdHVyZVNldCBtX3NldDsKKyAgICBHZXRCeU9mZnNldE1ldGhv
ZCBtX21ldGhvZDsKK307CisKK3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2Us
IDI+IGNhc2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkdldEJ5
T2Zmc2V0TWV0aG9kOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NzM0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXBvY2gu
aCIKICNpbmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9k
ZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwxMSArNjYsNiBAQCBz
dHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7
CiB9OwogCi1zdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgewotICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXI7Ci0gICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKLX07
Ci0KIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlcjsKICAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9u
IDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsMTAgKzMyOCwxOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdl
dEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7
CisKKyAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVy
ZXNBcmVXYXRjaGVkKSB7CisgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9IG5v
ZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAgICAg
ICAgICAgICAgIGlmIChncmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKLSAgICAgICAgaWYgKHZhbHVlLmlz
VG9wKCkpCisgICAgICAgIGlmICh2YWx1ZS5pc1RvcCgpIHx8IHZhbHVlLmlzQ2xvYmJlcmVkKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkub2Zmc2V0OwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSB2YWx1ZS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGlmICghdmFsdWVbaV0t
PmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zNDEsNDIgKzM0OSwyOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogewogICAgICAgICAvLyBX
ZSBjYW4ndCBhbHdheXMgZ3VhcmFudGVlIHRoYXQgdGhlIE11bHRpR2V0QnlPZmZzZXQgaXMgc2Fm
ZSB0byBleGVjdXRlIGlmIGl0Ci0gICAgICAgIC8vIGNvbnRhaW5zIGxvYWRzIGZyb20gcHJvdG90
eXBlcy4gV2Uga25vdyB0aGF0IGl0IHdvbid0IGxvYWQgZnJvbSB0aG9zZSBwcm90b3R5cGVzIGlm
Ci0gICAgICAgIC8vIHdlIHdhdGNoIHRoZSBtdXRhYmlsaXR5IG9mIHRoZSBwcm9wZXJ0aWVzIGJl
aW5nIGxvYWRlZC4gU28sIGhlcmUgd2UgdHJ5IHRvCi0gICAgICAgIC8vIGNvbnN0YW50LWZvbGQg
cHJvdG90eXBlIGxvYWRzLCBhbmQgaWYgdGhhdCBmYWlscywgd2UgY2xhaW0gdGhhdCB3ZSBjYW5u
b3QgaG9pc3QuIFdlCi0gICAgICAgIC8vIGFsc28ga25vdyB0aGF0IGEgbG9hZCBpcyBzYWZlIHRv
IGV4ZWN1dGUgaWYgd2UgYXJlIHdhdGNoaW5nIHRoZSBwcm90b3R5cGUncwotICAgICAgICAvLyBz
dHJ1Y3R1cmUuCi0gICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBu
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAo
IXZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQncyBub3Qg
YSBwcm90b3R5cGUgbG9hZC4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZSBiYXNlID0gdmFyaWFudC5hbHRl
cm5hdGVCYXNlKCk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gZ3JhcGguZnJl
ZXplKGJhc2UpOwotICAgICAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgp
ID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkCi0gICAgICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1
Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKQotICAgICAgICAgICAgICAgICYmIGZyb3plbi0+c3Ry
dWN0dXJlKCktPmlzVmFsaWRPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXZSdyZSBhbHJlYWR5IHdhdGNoaW5nIHRoYXQgaXQncyBzYWZlIHRvIGxvYWQgZnJv
bSB0aGlzLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0gZ3JhcGgudHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAg
ICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewotICAgICAgICAgICAgICAgIC8vIENvdWxkbid0IGNv
bnN0YW50LWZvbGQgYSBwcm90b3R5cGUgbG9hZC4gVGhlcmVmb3JlLCB3ZSBzaG91bGRuJ3QgaG9p
c3QKLSAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBzYWZldHkgb2YgdGhlIGxvYWQgZGVw
ZW5kcyBvbiBzdHJ1Y3R1cmUgY2hlY2tzIG9uIHRoZSBwcm90b3R5cGUsCi0gICAgICAgICAgICAg
ICAgLy8gYW5kIHdlJ3JlIHRvbyBjaGVhcCB0byB2ZXJpZnkgdGhhdCBoZXJlLgotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gY29udGFpbnMgbG9hZHMgZnJvbSBwcm90
b3R5cGVzLiBJZiB0aGUgbG9hZCByZXF1aXJlcyBhIGNoZWNrIGluIElSLCB3aGljaCBpcyByYXJl
LCB0aGVuCisgICAgICAgIC8vIHdlIGN1cnJlbnRseSBjbGFpbSB0aGF0IHdlIGRvbid0IGtub3cg
aWYgaXQncyBzYWZlIHRvIGV4ZWN1dGUgYmVjYXVzZSBmaW5kaW5nIHRoYXQKKyAgICAgICAgLy8g
Y2hlY2sgaW4gdGhlIGFic3RyYWN0IHN0YXRlIHdvdWxkIGJlIGhhcmQuIElmIHRoZSBsb2FkIHJl
cXVpcmVzIHdhdGNocG9pbnRzLCB3ZSBqdXN0CisgICAgICAgIC8vIGNoZWNrIGlmIHdlJ3JlIG5v
dCBpbiBhIGNsb2JiZXJlZCBzdGF0ZSAoaS5lLiBpbiBiZXR3ZWVuIGEgc2lkZSBlZmZlY3QgYW5k
IGFuCisgICAgICAgIC8vIGludmFsaWRhdGlvbiBwb2ludCkuCisgICAgICAgIGZvciAoY29uc3Qg
TXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0
YSgpLmNhc2VzKSB7CisgICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRD
YXNlLm1ldGhvZCgpOworICAgICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAg
ICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDogLy8gT0sgYmVjYXVz
ZSBjb25zdGFudHMgYXJlIGFsd2F5cyBzYWZlIHRvIGV4ZWN1dGUuCisgICAgICAgICAgICBjYXNl
IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOiAvLyBPSyBiZWNhdXNlIHRoZSBNdWx0aUdldEJ5T2Zm
c2V0IGhhcyBpdHMgb3duIGNoZWNrcyBmb3IgbG9hZGluZyBmcm9tIHNlbGYuCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJv
bVByb3RvdHlwZToKKyAgICAgICAgICAgICAgICAvLyBPbmx5IE9LIGlmIHRoZSBzdGF0ZSBpc24n
dCBjbG9iYmVyZWQuIFRoYXQncyBhbG1vc3QgYWx3YXlzIHRoZSBjYXNlLgorICAgICAgICAgICAg
ICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSAhPSBTdHJ1Y3R1cmVzQXJlV2F0
Y2hlZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGlmICghZ3JhcGguaXNTYWZlVG9Mb2FkKG1ldGhvZC5wcm90b3R5cGUoKS0+Y2FzdDxKU09iamVj
dCo+KCksIG1ldGhvZC5vZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3aWxsIGVpdGhlcjoKLSAgICAgICAgICAgIC8v
IC0gTm90IGxvYWQgZnJvbSB0aGUgcHJvdG90eXBlIGJlY2F1c2UgY29uc3RhbnQgZm9sZGluZyB3
aWxsIHN1Y2NlZWQgaW4gdGhlCi0gICAgICAgICAgICAvLyAgIGJhY2tlbmQsIG9yCi0gICAgICAg
ICAgICAvLyAtIEVtaXQgaW52YWxpZCBjb2RlIHRoYXQgZmFpbHMgd2F0Y2hwb2ludCBjaGVja3Mu
IFRoaXMgY291bGQgaGFwcGVuIGlmIHRoZQotICAgICAgICAgICAgLy8gICBwcm9wZXJ0eSBiZWNv
bWVzIG11dGFibGUgYWZ0ZXIgdGhpcyBwb2ludCwgc2luY2Ugd2UgYWxyZWFkeSBzZXQgdGhlIHdh
dGNocG9pbnQKLSAgICAgICAgICAgIC8vICAgYWJvdmUuIFRoaXMgY2FzZSBpcyBPSyBzaW5jZSB0
aGUgY29kZSB3aWxsIGZhaWwgd2F0Y2hwb2ludCBjaGVja3MgYW5kIG5ldmVyCi0gICAgICAgICAg
ICAvLyAgIGdldCBpbnN0YWxsZWQuCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcwLDI0ICszODcwLDI0
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0
YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKIAotICAgICAgICBpZiAoZGF0YS52
YXJpYW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGRhdGEuY2FzZXMuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24g
d2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2UgdGhhdC4KICAgICAgICAgICAgIHRl
cm1pbmF0ZShCYWRDYWNoZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEudmFyaWFudHMu
c2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7
IGktLTspCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07
KQogICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdl
dEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOwogICAgICAgICBMQmFzaWNCbG9jayBleGl0ID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGZhaWwiKSk7CiAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9m
ZnNldCBjb250aW51YXRpb24iKSk7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8U3dpdGNoQ2Fz
ZSwgMj4gY2FzZXM7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpLnNpemUoKTsgai0tOykgewot
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKVtqXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRhLmNh
c2VzW2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZ2V0Q2FzZS5zZXQoKS5zaXpl
KCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlh
bnQuc2V0KClbal07CiAgICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0dXJlKTsKICAg
ICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlSUQoc3Ry
dWN0dXJlKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAgICAgICAgIH0KQEAgLTM4OTgs
MjkgKzM4OTgsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9j
aywgMj4gcmVzdWx0czsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBk
YXRhLmNhc2VzW2ldOworICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0
Q2FzZS5tZXRob2QoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
YmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6
IGV4aXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50
ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgIGJhc2VTZXQubWVyZ2UodmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAg
SlNWYWx1ZSBjb25zdGFudFJlc3VsdDsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0
ZUJhc2UoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0YW50UmVzdWx0ID0gbV9ncmFwaC50cnlH
ZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50LmFsdGVybmF0
ZUJhc2UoKSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbnN0YW50UmVzdWx0KQotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50UmVz
dWx0KSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dp
dGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0Q2FzZTo6
SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldENhc2U6OkNvbnN0YW50OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKG1ldGhvZC5jb25zdGFudCgpLT52YWx1ZSgp
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0Q2FzZTo6TG9hZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXRDYXNlOjpMb2FkRnJvbVByb3RvdHlwZTogewogICAgICAgICAgICAgICAgIExWYWx1ZSBwcm9w
ZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcih2YXJpYW50LmFs
dGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlm
IChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zmc2V0Q2FzZTo6TG9hZCkKICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5l
T2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIobWV0aG9kLnByb3RvdHlwZSgp
LT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0
KG1ldGhvZC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IG1f
b3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5KHByb3BlcnR5QmFzZSwgZGF0YS5p
ZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2
b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRo
RnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVj
dHVyZS0+bmVlZHNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0ucmVnaXN0
ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRX
YXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwpAQCAtMTMyLDQ3ICsxMzIsMzAgQEAgc3RhdGljIHZvaWQgcmVwYXRj
aEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAg
TWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMs
IEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0
cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlk
KCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5m
by5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3Qg
bXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKLSAgICAgICAgICAgIC8v
IHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG9rID0gYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgICAgIGpp
dCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaml0
LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5lZmZlY3RpdmVXYXRjaHBvaW50KTsKLSAgICAgICAg
ICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KKyAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICBjb25kaXRp
b24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5m
by5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNj
cmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGJyYW5jaFN0cnVj
dHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgICAgIGJyYW5jaFN0
cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNyb0Fzc2VtYmxl
ciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNj
cmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAgIAotICAgIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90
b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCi0g
ICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CitzdGF0aWMgdm9pZCBjaGVja09iamVj
dFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBjaGVja09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQogfQogCiBzdGF0aWMg
dm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0
KQpAQCAtMjk2LDExICsyNzksMTIgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25z
dCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwK
LSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgRnVuY3Rpb25QdHIgY3VzdG9t
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxv
Y2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworICAgIAogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBK
U1ZhbHVlUmVncygKQEAgLTM0NiwzMyArMzMwLDI1IEBAIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJ
ZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5Rmly
ZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVy
dHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCiAgICAgaWYgKHdh
dGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChzdHViSW5mby5hZGRXYXRj
aHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3Ry
dWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGlmIChjaGFpbikg
ewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAg
ICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVG
b3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9
IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVy
ZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAg
ICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVy
dHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAg
YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvT2JqZWN0
LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAg
ICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY3VyclN0cnVj
dHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoIXByb3RvT2JqZWN0
IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKLSAgICB9Cisg
ICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgIGNvbmRpdGlvblNldCwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAg
IAorICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICBpZiAoY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBlbHNlCisg
ICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5v
YmplY3QoKS0+c3RydWN0dXJlKCk7CiAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKKyAgICAKICAgICBHUFJSZWcgYmFz
ZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZp
bmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0
Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0
aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCiAgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7CkBAIC02MjcsOSArNjAz
LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNlbGwoVgogICAgICAgICBh
c09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwogICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KLSAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgaWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdl
dE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0
Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIHJldHVybiBBdHRl
bXB0VG9DYWNoZTsKQEAgLTgyNywyMSArODAyLDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlCdWlsZEdldEJ5SUQKICAgICB9CiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
bG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAg
IFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0g
MDsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAg
ICAgCiAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFs
dWUpIHsKICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8
IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKIAogICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICBjb3VudCA9
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoZXhlYywgc3Ry
dWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb3VudCA9
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoCi0gICAgICAgICAgICAgICAg
ZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LCBvZmZzZXQpOwotICAgICAg
ICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoZXhlYywg
c3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0dWJJbmZv
KTsKQEAgLTg1Miw3ICs4MjgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRH
ZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAg
ICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0
b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9mZnNldCwgCiAgICAgICAgIHN0
cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAogICAg
ICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5j
dXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAtODcxLDcg
Kzg0Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAK
ICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0dXJl
LAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAgY29uZGl0aW9uU2V0
KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZv
LCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYgKzk2OSwyOCBAQCBzdGF0aWMg
Ym9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBT
dHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShFeGVjU3Rh
dGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29sIGVtaXRQdXRUcmFu
c2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3Ry
dWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3QgUHV0UHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwK
KyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IHBy
b3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50
LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0
cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0
aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAgIC8v
IGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYgKEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYmIG9s
ZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNraXAgb3B0aW1pemlu
ZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwpA
QCAtMTAyMCwxNCArOTk4LDEzIEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9u
U3R1YkEKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0
IQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQK
ICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVj
LCBzdHJ1Y3R1cmUpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBl
bWl0UHV0VHJhbnNpdGlvblN0dWIKKyAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKKyAg
ICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAg
IENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwog
ICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJv
dXRpbmU7CkBAIC0xMDgzLDE3ICsxMDYwLDggQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRy
YW5zaXRpb25TdHViQQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKICAgICAgICAgb2xkU3RydWN0dXJlKSk7CiAg
ICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICBvbGRTdHJ1Y3R1
cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJK
aXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgCi0g
ICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0g
ICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
KCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0
dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAg
IGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93UGF0aDsKICAgICAKQEAgLTEyMjgsNyArMTE5Niw3IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAg
ICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNl
UmVnaXN0ZXJzKCkpCkBAIC0xMjU2LDggKzEyMjQsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0
UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJF
eGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAgICAgICAgc3RydWN0
dXJlKTsKLQotICAgIHJldHVybiBvbGRTdHJ1Y3R1cmU7CisgICAgCisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTI4MSwxMiArMTI0OSwxMSBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKHNsb3Qu
YmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKICAgICAgICAg
aWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKIAotICAg
ICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJB
bmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kKTsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKQorICAgICAgICAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNp
dGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRL
aW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAg
ICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxv
Y2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTEyOTQsNyArMTI2
MSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmlu
aXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9s
ZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3Qp
OworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEyLDIwICsxMjc5LDIyIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgJiYgc3R1Yklu
Zm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVk
T2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFs
dWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90
eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVu
dCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hh
aW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0g
YmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1
cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4
ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJh
c2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvZmZz
ZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExp
c3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1
dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0
dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNs
b3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LAorICAgICAgICAgICAgZXhlYywg
a2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlv
blNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAg
ICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSwKQEAgLTEzMzYsNyArMTMwNSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQKICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRl
cigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAg
ICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6
IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJv
dG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwor
ICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCks
IHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwg
Q29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTEzODAs
MTcgKzEzNDksMTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAog
ICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCiAKLSAgICAg
ICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25TdHViQW5k
R2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQpOwotCi0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkgCisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICghZW1pdFB1
dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAg
ICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CiAgICAgICAgICAg
ICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNp
dGlvbigKICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90
eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsCiAgICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7CiAKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTE0MjMsMjEgKzEzOTEsMjQgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8
IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3Bp
bGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lOwotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAg
ICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFz
ZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hh
aW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZz
ZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAg
ICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
KyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkg
IT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAg
ICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUuaW1w
bCgpKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIHByb3RvdHlwZUNoYWlu
ID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAgfQorICAgICAgICAg
ICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsK
ICAgICAgICAgCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAg
IGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsK
IAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBl
eGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1Yklu
Zm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xv
dCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0
LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxp
c3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKQEAgLTE0NDgsNyArMTQxOSw3IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAgbGlzdC0+YWRkQWNj
ZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/
IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAg
ICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNl
dHRlcigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKQEAgLTE0ODcsMTEgKzE0NTgsMTUgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgqdm0pOwogICAgIAotICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgSlNWYWx1ZSBmb3VuZFNsb3RCYXNlID0gd2Fz
Rm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCk7Ci0gICAgc2l6ZV90IGNvdW50ID0g
IWZvdW5kU2xvdEJhc2UgfHwgZm91bmRTbG90QmFzZSAhPSBiYXNlID8gCi0gICAgICAgIG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBmb3VuZFNs
b3RCYXNlLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgOiAwOwotICAgIGlmIChjb3VudCA9PSBJbnZh
bGlkUHJvdG90eXBlQ2hhaW4pCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0
aW9uU2V0OworICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgp
ICE9IGJhc2UpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICB9CisgICAgfSBlbHNl
CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlz
cyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKICAgICBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKQEAg
LTE1MTYsNyArMTQ5MSw2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4o
CiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICB9CiAgICAgCi0gICAgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIAogICAgIHsKQEAgLTE1
NDcsMTggKzE1MjEsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAog
ICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50U2V0KCkpCiAgICAgICAgICAgICBzbG90LndhdGNo
cG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKLSAg
ICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAgSlNPYmpl
Y3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1
cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0gcHJvdG90
eXBlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvU3RydWN0dXJlLCBleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFpbHVyZUNhc2Vz
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8o
KS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2
bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQt
PmdldCgpOwotICAgICAgICB9CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25z
KAorICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvaygpLCBzdHViSW5mbywg
c3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVk
U3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAs
IG1fcHJvdG90eXBlKHByb3RvdHlwZSkKLXsKLSAgICBBU1NFUlQobV9wcm90b3R5cGUuaXNOdWxs
KCkgfHwgbV9wcm90b3R5cGUuaXNPYmplY3QoKSk7Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gYXNPYmpl
Y3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5z
dG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJl
bnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZCkKLSAgICA6IG1f
Z2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3Rv
dHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgaWYgKG1fcHJvdG90eXBlLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBh
c09iamVjdChtX3Byb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCi0gICAgICAgIG1fdmVjdG9yLmFwcGVu
ZChjdXJyZW50KTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUq
IHByb3RvdHlwZVN0cnVjdHVyZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAo
bV9nbG9iYWxPYmplY3QpKQotewotICAgIG1fdmVjdG9yLmFwcGVuZChwcm90b3R5cGVTdHJ1Y3R1
cmUpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbikKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0g
ICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3Qp
KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGNoYWluLT5oZWFkKClbaV07ICsraSkKLSAg
ICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQg
Y291bnQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQot
ICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0
KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAg
bV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpCi17Ci19Ci0KLWJvb2wgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKLXsKLSAgICBKU1ZhbHVl
IGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3RvdHlwZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGFzT2JqZWN0KGN1cnJl
bnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAhPSBtX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IG1fdmVjdG9yW2ldLT5zdG9y
ZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pIGNvbnN0Ci17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBjaGFpbi0+aGVhZCgpW2ldLmdldCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoY2hhaW4tPmhlYWQoKVttX3ZlY3Rv
ci5zaXplKCldKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rv
ci5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHVpZCwg
YXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNj
ZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hh
aW46OmlzTm9ybWFsaXplZCgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVj
dG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92ZWN0
b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3Bl
cnR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUpT
T2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rvci5pc0VtcHR5KCkpOwotICAgIGlmIChtX3ZlY3Rvci5z
aXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGFzT2JqZWN0KG1fcHJvdG90eXBlKTsKLSAgICBy
ZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0b3JlZFByb3Rv
dHlwZSgpKTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpvcGVyYXRvcj09KGNv
bnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBt
X2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2dsb2JhbE9iamVjdAotICAgICAgICAmJiBtX3Byb3Rv
dHlwZSA9PSBvdGhlci5tX3Byb3RvdHlwZQotICAgICAgICAmJiBtX3ZlY3RvciA9PSBvdGhlci5t
X3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpnYXRoZXJDaGVja3Mo
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKSBjb25zdAotewotICAgIEpTVmFs
dWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBKU09iamVjdCogY3VycmVudE9iamVjdCA9
IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRT
dHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAgICAgdmVjdG9yLmFwcGVuZChDb25zdGFudFN0cnVjdHVy
ZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRTdHJ1Y3R1cmUpKTsKLSAgICAgICAgY3VycmVu
dFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2Jh
bE9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFsT2JqZWN0KTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkVmFsdWUoJm1fcHJvdG90eXBlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZlY3Rv
ci5zaXplKCk7IGktLTspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVy
KCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKLX0K
LQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAg
ICAgICAgIihnbG9iYWwgPSAiLCBSYXdQb2ludGVyKG1fZ2xvYmFsT2JqZWN0KSwgIiwgaGVhZCA9
ICIsCi0gICAgICAgIGluQ29udGV4dChtX3Byb3RvdHlwZSwgY29udGV4dCksICIsIHZlY3RvciA9
IFsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50
ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9yW2ldLCBjb250ZXh0KSk7Ci0gICAgb3V0LnByaW50KCJd
KSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNp
b24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZpbmUgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCi0KLSNp
bmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgi
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJlQ2hhaW47
Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1wQ29udGV4dDsKLQotY2xhc3MgSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHsKLXB1
YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSopOwotICAgIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0
dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWlu
KTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQpOwotICAg
IH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7Ci0gICAgCi0gICAgYm9vbCBpc1N0aWxsVmFsaWQo
KSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoU3RydWN0dXJlQ2hhaW4qKSBjb25zdDsKLSAgICBi
b29sIG1heUludGVyY2VwdFN0b3JlVG8oVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgYm9v
bCBpc05vcm1hbGl6ZWQoKTsKLSAgICAKLSAgICBib29sIHRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCk7Ci0gICAgCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3RvdHlwZTsgfQotICAgIAotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0gICAgU3RydWN0dXJlKiBhdChzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsgfQotICAgIFN0cnVjdHVyZSogb3BlcmF0b3Jb
XShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgIAotICAgIEpT
T2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVyZSog
bGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmxhc3QoKTsgfQotICAgIAotICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluJikgY29uc3Q7Ci0gICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJikgY29uc3Q7
Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgSlNHbG9iYWxP
YmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotICAgIEpTVmFsdWUgbV9wcm90b3R5cGU7Ci0gICAgVmVj
dG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNl
bmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcg
KzE5NCwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVy
biBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQogICAgIGJvb2wgaXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpID09
IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQ7IH0KICAgCi0gICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2Vz
QXJlQ2FjaGVhYmxlKCkgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rp
b25hcnlLaW5kICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpOyB9Cisg
ICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQKKyAgICAgICAg
ICAgICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCisgICAgICAgICAg
ICAmJiAhKHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJ
bmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpOworICAgIH0KKyAgICAK
KyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQorICAgICAgICAgICAgJiYgdHlw
ZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKQorICAgICAgICAgICAgJiYgdHlw
ZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKTsKKyAgICB9CiAKICAg
ICAvLyBXZSB1c2UgU2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBmb3Igc3RydWN0dXJlcyB0aGF0
IG1heSBnZXQgbmV3IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRvIHByZXZlbnQKICAgICAvLyBE
RkcgZnJvbSBpbmxpbmluZyBwcm9wZXJ0eSBhY2Nlc3NlcyBzaW5jZSBzdHJ1Y3R1cmVzIGRvbid0
IHRyYW5zaXRpb24gd2hlbiBhIG5ldyBpbXB1cmUgcHJvcGVydHkgYXBwZWFycy4KQEAgLTIwMiw3
ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5oYXNJ
bXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKTsKICAgICB9Ci0KKyAgICAKICAgICAvLyBUeXBlIGFj
Y2Vzc29ycy4KICAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVy
ZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0
T2ZMaW5lVHlwZUZsYWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0
eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtNTM2LDYgKzUzNiw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb2RlKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImLCBXYXRjaHBvaW50Kik7
CisgICAgCiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBpdCBnb3QgbWVyZ2Vk
IHdpdGggSWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEltcHVyZVBy
b3BlcnR5KGNvbnN0IFN0cmluZyYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257635</attachid>
            <date>2015-07-27 22:56:37 -0700</date>
            <delta_ts>2015-07-28 15:30:08 -0700</delta_ts>
            <desc>even more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>252285</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODczNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yOTMsOCArMjk1LDYgQEAKIAkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCN0UyQTE5QTExQjgwMDBE
OUJDNTYgLyogQ2FsbFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNw
cCAqLzsgfTsKIAkJMEYzQjdFMkIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNTE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVjay5jcHAgKi87IH07Ci0JCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0Uw
MUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2
MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4OCw2ICs1ODgsMTQgQEAKIAkJMEZEMkM5MjQx
NkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9
OworCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRkQzRTQwMjFCNjE4QUFG
MDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMDFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZEM0U0MDkxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDAzMUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBG
RDNFNDBBMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDQxQjYxOEI2
NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi87IH07CisJCTBGRDNFNDBDMUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5
Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87
IH07CisJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDgxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8q
IERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICov
OyB9OwogCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9
OwpAQCAtNjk0LDYgKzcwMiw4IEBACiAJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdF
ZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjRCNTFCMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdFZGdlLmNwcCAqLzsgfTsKIAkJMEZGMEYxOUYx
NkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjExNkI2Mjc4RDAwM0Y2
OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwICovOyB9OwogCQkwRkYwRjFBMDE2Qjcy
QTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8q
IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcCAqLzsgfTsKKwkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0
QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY0
MjczMTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyog
RGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjcz
MDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZG
NDI3NDAxNThFQkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAv
KiB1ZGlzODZfZGVjb2RlLmMgKi87IH07CkBAIC0xMzg5LDggKzEzOTksNiBAQAogCQlBNzg0QTI2
NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5
bnRheENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFG
NkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYgLyogU3BpbGxSZWdpc3RlcnNNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZGNjQ3
QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0
MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwotCQlBNzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzhBOTc3NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZD
MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovOyB9OwogCQlBNzhB
OTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RDE3OTczOEI4MDA5REY3
NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi87IH07CiAJCUE3OEE5Nzc2MTc5NzM4QjgwMDlE
Rjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5j
cHAgKi87IH07CkBAIC0xODUzLDYgKzE4NjEsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhE
RTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVG
MTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGgu
Y3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
OEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8q
IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9m
aWxlckpldHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
OTBDQUIxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMDM4LDggKzIwNDgsNiBAQAogCQkwRjNCM0EyQTE1NDc0RkY0MDAz
RUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHVmFsaWRhdGUuaDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyog
Q2FsbFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFZhcmlh
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5
Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcv
REZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
M0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRm
Zy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIzNDQsNiArMjM1MiwxNCBAQAogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIw
MTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyog
REZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5o
OyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcv
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDMxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA1MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA2MUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlDb25k
aXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwODFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBh
dGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRG9taW5hdG9ycy5jcHA7IHBhdGgg
PSBkZmcvREZHRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0
b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQ1LDYgKzI0NjEsOCBAQAog
CQkwRkVGQzlBODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJs
ZUFsbG9jYXRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enou
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25G
dXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5
NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHBhdGggPSBkZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc2Fzc2VtYmxlci5oOyBwYXRoID0g
ZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY0MjczMDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHA7
IHBhdGggPSBkaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNv
ZGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdWRpczg2X2RlY29kZS5jOyBw
YXRoID0gZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZGlzODZfZGVjb2RlLmM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMTU1LDggKzMxNzMsNiBAQAogCQlBNzdGMTgyMDE2NDA4OEIyMDA2
NDBBNDcgLyogQ29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
ZGVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgyNDE2NDE5MjU0
MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8q
IE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5
REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVk
RmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRG
aW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDgzLDggKzQ0OTksNiBAQAogCQkJCUE3
QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3
QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCi0JCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0
IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAotCQkJCUE3ODg1M0Y4MTc5NzI2Mjkw
MDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5
NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUx
OTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJQTEyQkJGRjMxQjA0
NEE5ODAwNjY0QjY5IC8qIEludGxPYmplY3QuY3BwICovLApAQCAtNDg2Nyw2ICs0ODgxLDEwIEBA
CiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0
VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFZhbHVlLmggKi8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZEM0U0MDAxQjYx
OEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dC5oICovLAorCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1
MzMgLyogREZHQW5hbHlzaXMuaCAqLywKQEAgLTUwMjYsNiArNTA0NCw4IEBACiAJCQkJMEYyQkRD
M0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAogCQkJCTBGOEYxNDMx
MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLywKIAkJCQkw
RjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oICovLAor
CQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5j
cHAgKi8sCisJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmggKi8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9t
aW5hdG9ycy5jcHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1
cmFsTG9vcHMuY3BwICovLApAQCAtNTI5Nyw4ICs1MzE3LDYgQEAKIAkJCQkwRjBCODNBNTE0QkNG
NTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQw
MkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY2RkM3NEYxOTYxMTBBODAwRTFE
MDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8sCi0JCQkJMEYzRDBCQkIxOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLywKIAkJCQkwRjQyNkE0QTE0
NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAogCQkJCTBGQzcxMkRDMTdDRDg3Nzgw
MDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAogCQkJCTBGQzcx
MkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywK
QEAgLTUzMzEsNiArNTM0OSwxMCBAQAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0RjVDN0Q0
MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJCTE0Q0E5
NThDMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJ
CTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAg
Ki8sCisJCQkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmggKi8sCisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5NjlBMDc5NDBFRDFEM0FFMDBGMUY2
ODEgLyogT3Bjb2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8s
CkBAIC01MzQyLDYgKzUzNjQsOCBAQAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAy
IC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQw
RDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4
MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDgxQjYxOEI2NjAw
QzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1
RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKQEAgLTU4NDEsNiArNTg2NSw3IEBACiAJCQkJQzI5
ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0Rv
bWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAv
KiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JC
OTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MDkzLDYgKzYxMTgsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21i
aW5lZERvbWFpbnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzg4MTg1NjgzMzUwMDJF
RDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIw
MEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQz
OEMxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTAyLDcgKzYxMjgsNiBAQAogCQkJCUE3QThBRjNC
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4
QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyog
SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIy
RiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAtNjExNSw2ICs2MTQwLDcgQEAKIAkJ
CQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI4LDcgKzYzNTQsNiBAQAogCQkJCUJDMThDNDNDMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0Uz
RTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAwOENFNzE4NzYzMUI2
MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIx
M0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5
MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjQxMSw5ICs2NDM2LDExIEBACiAJCQkJMkFBRDk2NEExODU2OTQxNzAwMUY5M0JF
IC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBB
QzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBS
ZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8q
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4
cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDkwLDYgKzY1MTcsNyBAQAog
CQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBDMUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjgxLDYgKzczMDks
NyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNC
MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0
IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcyOTEsNiArNzMyMCw3
IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1
NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTczNDEsNiArNzM3MSw3IEBACiAJCQkJQTVDRUVFMTQxODdG
M0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwMTFCNjE4
QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUY3MzgyQzE4
QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzM1MSw3ICs3MzgyLDYgQEAKIAkJCQlBNTMyNDM4QjE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3Rv
clZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
RjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczNjgsNiArNzM5OCw3IEBACiAJCQkJQkNERDUxRUIw
RkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcx
MjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0QzE3RUUy
NzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkND
ODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDIzLDcgKzc0NTQsNiBAQAogCQkJCUE1MDNGQTFC
MTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAxM0U3
QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0QwQkJDMTk0QTQxNDMwMEZD
OUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
NUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUE3MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2MTUsNiArNzY0NSw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMyRDAw
MTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBFQkI3
QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJG
MEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMg
LyogSlNKb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzYyNCw2ICs3NjU1LDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3
MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4
MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQw
MTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTEx
ODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IDA7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0g
MDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBl
KSB7CkBAIC0zNzAsMTEgKzM2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByb3RvdHlwZVN0
cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
LCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CkBAIC0z
ODIsOSArMzc2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAog
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiKCIpOwogICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJl
KG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGR1bXBDaGFpbihvdXQsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTQ1NiwxMCArNDUwLDggQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAicHJldiIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUu
Z2V0KCksIGlkZW50KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAgICAg
ICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAg
ICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCJsaXN0ID0gWyIpOwpAQCAtNDgzLDEwICs0NzUsOCBAQCB2b2lkIENvZGVCbG9jazo6
cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRl
bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGFjY2Vzcy5jaGFpbigpLCBpZGVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vz
cy5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsICIsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJ1bmtub3duIik7
CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw5ICszOCw2IEBAIHZvaWQgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXIKICAg
ICAgICAgZGF0YUxvZygiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiBv
biAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogCiAgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6
YXRpb24sICZkZXRhaWwpOwotCi0gICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgIHJlbW92ZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzM0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzEsOCArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvbXBsZXhH
ZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAotICAgIHVuc2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0
IHdlIG5ldmVyIHNlZSBhIHN0cnVjdHVyZSB0aGF0CiAgICAgLy8gaGFzSW1wdXJlR2V0T3duUHJv
cGVydHlTbG90KCkgYnV0IGZvciB3aGljaCB3ZSBkb24ndApAQCAtNDAsMzIgKzQwLDI2IEBAIENv
bXBsZXhHZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHUKICAgICAvLyB0aGF0LCB5ZXQu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTgxMAog
ICAgIAorICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNWYWxpZCgpKTsKKyAgICAKICAgICBpZiAo
aGVhZFN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAg
ICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKICAgICBDb21wbGV4R2V0U3RhdHVz
IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gSW5saW5lYWJsZTsKICAgICAKLSAgICBpZiAo
Y2hhaW4gJiYgY2hhaW5Db3VudCkgewotICAgICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVm
KG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywg
aGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWluQ291bnQpKTsKKyAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OwogICAgICAgICAKLSAgICAgICAgaWYgKCFyZXN1bHQubV9jaGFpbi0+aXNTdGlsbFZhbGlk
KCkpCisgICAgICAgIGlmICghcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVW
YWxpZGl0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHNraXAoKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgp
Ci0gICAgICAgICAgICB8fCByZXN1bHQubV9jaGFpbi0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1w
dXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAg
ICAgIAotICAgICAgICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IHJlc3VsdC5tX2NoYWluLT50
ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUg
PSByZXN1bHQubV9jaGFpbi0+bGFzdCgpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gYmFzZSA9IHJlc3VsdC5tX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
OworICAgICAgICBBU1NFUlQoYmFzZS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNl
bmNlKTsKICAgICAgICAgCi0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwotICAgIH0KKyAgICAgICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gYmFzZS5vZmZzZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gaGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgCiAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Ns
b3dQYXRoKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdl
dFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b21wbGV4R2V0U3RhdHVzLmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDggKzI2
LDggQEAKICNpZm5kZWYgQ29tcGxleEdldFN0YXR1c19oCiAjZGVmaW5lIENvbXBsZXhHZXRTdGF0
dXNfaAogCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2lu
Y2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODAsNyArODAs
NiBAQCBwdWJsaWM6CiAgICAgQ29tcGxleEdldFN0YXR1cygpCiAgICAgICAgIDogbV9raW5kKFNo
b3VsZFNraXApCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKLSAgICAgICAgLCBt
X2F0dHJpYnV0ZXMoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTk3LDIxICs5Niwx
NyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBDb21wbGV4R2V0U3RhdHVzIGNv
bXB1dGVGb3IoCi0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBo
ZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNo
YWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKICAgICAK
ICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0gICAgSlNWYWx1ZSBz
cGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7
IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgS2lu
ZCBtX2tpbmQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9h
dHRyaWJ1dGVzOwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwotICAgIFJlZlB0cjxJbnRl
bmRlZFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IG1fY29uZGl0aW9uU2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0
dXJlQ2hlY2suY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
IgotCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihD
aGVjayBpZiAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2NvbnN0YW50KSwgY29udGV4dCksICIgaGFz
IHN0cnVjdHVyZSAiLAotICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwg
Y29udGV4dCksICIpIik7Ci19Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRy
KTsKLX0KLQotU3RydWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYgdmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KQotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IHZlY3Rvci5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHZlY3RvcltpXS5jb25z
dGFudCgpID09IGNvbnN0YW50KQotICAgICAgICAgICAgcmV0dXJuIHZlY3RvcltpXS5zdHJ1Y3R1
cmUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgYXJlQ29tcGF0aWJs
ZShjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBhLCBjb25zdCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrVmVjdG9yJiBiKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IGEuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogb3RoZXJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVG
b3IoYiwgYVtpXS5jb25zdGFudCgpKTsKLSAgICAgICAgaWYgKCFvdGhlclN0cnVjdHVyZSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYVtpXS5zdHJ1Y3R1cmUoKSAhPSBvdGhl
clN0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tW
ZWN0b3ImIHNvdXJjZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KQotewot
ICAgIGZvciAodW5zaWduZWQgaSA9IHNvdXJjZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYg
KHN0cnVjdHVyZUZvcih0YXJnZXQsIHNvdXJjZVtpXS5jb25zdGFudCgpKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB0YXJnZXQuYXBwZW5kKHNvdXJjZVtpXSk7Ci0gICAgfQotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCShyZXZpc2lvbiAxODcz
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrX2gKLSNkZWZpbmUgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KLSNpbmNsdWRlICJEdW1w
Q29udGV4dC5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgot
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvbnN0YW50U3RydWN0dXJlQ2hlY2sgewotcHVibGlj
OgotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2soKQotICAgICAgICA6IG1fY29uc3RhbnQobnVs
bHB0cikKLSAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIGNvbnN0YW50LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICAgICAgOiBtX2NvbnN0YW50KGNvbnN0YW50KQotICAgICAgICAsIG1f
c3RydWN0dXJlKHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghIW1fY29uc3RhbnQg
PT0gISFtX3N0cnVjdHVyZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1fY29uc3RhbnQ7IH0KLSAgICAKLSAgICBKU0NlbGwqIGNvbnN0YW50KCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudDsgfQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KLSAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0NlbGwqIG1fY29uc3RhbnQ7
Ci0gICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPENvbnN0
YW50U3RydWN0dXJlQ2hlY2ssIDI+IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3I7Ci0KLVN0
cnVjdHVyZSogc3RydWN0dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
IHZlY3RvciwgSlNDZWxsKiBjb25zdGFudCk7Ci1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYsIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tW
ZWN0b3ImKTsKLXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0
b3ImIHNvdXJjZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KTsKLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNiw4ICsyMDYs
OCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFu
dCB2YXJpYW50KAotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwg
Y29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAotICAg
ICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0
KCksCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCks
IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNw
cAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsOSArMzQsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtT
dGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBj
YWxsTGlua1N0YXR1cykKICAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKLSAgICAs
IG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQorICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9u
U2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9jYWxsTGlua1N0YXR1cyhXVEY6
Om1vdmUoY2FsbExpbmtTdGF0dXMpKQogewpAQCAtNDQsMTMgKzQ1LDggQEAgR2V0QnlJZFZhcmlh
bnQ6OkdldEJ5SWRWYXJpYW50KAogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGludmFsaWRPZmZz
ZXQpOwogICAgICAgICBBU1NFUlQoIWNoYWluKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKGNoYWlu
ICYmIGNoYWluLT5zaXplKCkpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRl
cm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MobV9jb25zdGFu
dENoZWNrcyk7Ci0gICAgfQogfQotCisgICAgICAgICAgICAgICAgICAgICAKIEdldEJ5SWRWYXJp
YW50Ojp+R2V0QnlJZFZhcmlhbnQoKSB7IH0KIAogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJp
YW50KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKQEAgLTYyLDggKzU4LDcgQEAgR2V0QnlJ
ZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldAogR2V0QnlJZFZhcmlhbnQmIEdldEJ5
SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQogewogICAg
IG1fc3RydWN0dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgbV9jb25zdGFudENo
ZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5hdGVCYXNlID0gb3Ro
ZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRp
b25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3RoZXIubV9j
YWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTcyLDE2ICs2
Nyw2IEBAIEdldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKLVN0cnVjdHVyZVNldCBHZXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVy
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBz
dHJ1Y3R1cmVTZXQoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVy
ZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNT
RVJUKHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKLX0KLQogYm9vbCBHZXRCeUlk
VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQogewog
ICAgIGlmIChtX2FsdGVybmF0ZUJhc2UgIT0gb3RoZXIubV9hbHRlcm5hdGVCYXNlKQpAQCAtOTAs
MTAgKzc1LDEzIEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8IG90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWFyZUNvbXBh
dGlibGUobV9jb25zdGFudENoZWNrcywgb3RoZXIubV9jb25zdGFudENoZWNrcykpCisgICAgCisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0ID0KKyAgICAg
ICAgbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAg
aWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgbWVyZ2VJbnRvKG90aGVyLm1fY29uc3RhbnRDaGVja3MsIG1fY29uc3RhbnRD
aGVja3MpOworICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwogICAgIG1f
c3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKICAgICAKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTExMiw4ICsxMDAsNyBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5D
b250ZXh0KFByaW50CiAgICAgfQogICAgIAogICAgIG91dC5wcmludCgKLSAgICAgICAgIjwiLCBp
bkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLAotICAgICAgICAiWyIsIGxp
c3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3MsIGNvbnRleHQpLCAiXSIpOworICAgICAg
ICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsIGluQ29udGV4
dChtX2NvbmRpdGlvblNldCwgY29udGV4dCkpOwogICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAg
ICAgICAgIG91dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUo
bV9hbHRlcm5hdGVCYXNlKSwgY29udGV4dCkpOwogICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAi
LCBvZmZzZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDggKzI3LDYg
QEAKICNkZWZpbmUgR2V0QnlJZFZhcmlhbnRfaAogCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMu
aCIKLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAiSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQ
cm9wZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNDMsNyArNDEs
NyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiBwdWJsaWM6CiAgICAgR2V0QnlJZFZhcmlhbnQo
CiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJlU2V0
KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsCi0gICAgICAgIGNvbnN0
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwKKyAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQo
KSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1
cyA9IG51bGxwdHIpOwogICAgIAogICAgIH5HZXRCeUlkVmFyaWFudCgpOwpAQCAtNTUsOSArNTMs
MTAgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0
KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7
IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENoZWNr
czsgfQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9hbHRl
cm5hdGVCYXNlOyB9Ci0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsKKwor
ICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBhIGNvbmRpdGlvbiBzZXQgbWVhbnMgdGhhdCB0aGlzIGlz
IGEgcHJvdG90eXBlIGxvYWQuCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCiAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAg
ICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxM
aW5rU3RhdHVzLmdldCgpOyB9CiAgICAgCkBAIC03MCw4ICs2OSw3IEBAIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIEdldEJ5SWRTdGF0dXM7CiAgICAgCiAgICAgU3RydWN0dXJlU2V0IG1fc3Ry
dWN0dXJlU2V0OwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFudENo
ZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOworICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRy
YWNrZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50
KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJp
bnQoaW5Db250ZXh0KEpTVmFsdWUobV9vYmplY3QpLCBjb250ZXh0KSwgIjogIiwgaW5Db250ZXh0
KG1fY29uZGl0aW9uLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91
dCwgbnVsbHB0cik7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVy
ZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0
cnV0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3Rp
bGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSk7Cit9CisK
K2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnV0Y3VyZUVuc3VyZXNWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1
Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVx
dWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB2
YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1
cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNT
dGlsbFZhbGlkKHN0cnVjdHVyZSwgbV9vYmplY3QpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKG1fb2JqZWN0
LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVj
dHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWlkaXR5KCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
b25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1
Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0
Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgUHJvcGVydHlDb25k
aXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhp
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZWZm
b3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dhdGNoYWJs
ZShzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246
OmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gaXNXYXRjaGFibGUobV9vYmplY3QtPnN0cnVjdHVyZSgpLCBlZmZvcnQpOwor
fQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7
CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICgh
SGVhcDo6aXNNYXJrZWQobV9vYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxMaXZlKCk7Cit9CisKK3ZvaWQgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNl
cyYgdHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgdHJhY2tlZC5jaGVjayhtX29iamVjdCk7CisgICAgbV9jb25kaXRpb24udmFsaWRh
dGVSZWZlcmVuY2VzKHRyYWNrZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gKKyNkZWZpbmUgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25faAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNv
bmRpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24geworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkKKyAgICAgICAgOiBt
X29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIHRva2VuKQorICAgICAgICA6
IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV9jb25kaXRpb24odG9rZW4pCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihKU09iamVjdCogb2JqZWN0
LCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQorICAgICAgICA6IG1fb2JqZWN0
KG9iamVjdCkKKyAgICAgICAgLCBtX2NvbmRpdGlvbihjb25kaXRpb24pCisgICAgeworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2VXaXRob3V0
QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9v
YmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29u
ZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsg
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBwcmVzZW5jZVdpdGhv
dXRCYXJyaWVyKG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVy
KAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09i
amVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
cmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3Vs
dC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIo
dWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJp
ZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwg
dWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJv
cGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90
eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBK
U09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIo
b3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2Jq
ZWN0LCB1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVj
dCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5
Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNP
YmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJu
IGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07
CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9
CisgICAgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25k
aXRpb247IH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gY29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9
CisgICAgdW5zaWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigp
Lmhhc0F0dHJpYnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJl
dHVybiBjb25kaXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmpl
Y3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9
CisgICAgYm9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCku
aGFzUmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gY29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCht
X29iamVjdCkgKyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAg
ICYmIG1fY29uZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAg
ICB9CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBh
cmUgaWRlbnRpY2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAv
LyBkaWZmZXJlbnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRl
Y2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlm
IHRoZXJlIGlzIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNl
cyB5b3UnbGwgd2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBp
biBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBU
aGlzCisgICAgLy8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxp
a2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBC
eSBjb252ZW50aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBh
bnl0aGluZy4KKyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3Ro
ZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBv
dGhlciB8fCB1aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3Qo
KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBj
YW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAg
ICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJy
ZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFu
IGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0
aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAo
aS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9i
amVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJj
ZXB0ZWQuIFZhbGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBvbiB0
aGUgb2JqZWN0LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1
cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0
OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0
eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZh
bGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRp
dHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAg
ICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsK
KworICAgIC8vIENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkgY29uc2Vy
dmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0cnVjdHVy
ZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWF5
IHJldHVybiB0cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJlcyBzb21l
IHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhlCisg
ICAgLy8gc3RydWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9uIGhv
bGRzIGJ5IHVzaW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVjdHVyZUVu
c3VyZXNWYWxpZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSopIGNvbnN0
OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hvcnRoYW5k
IGZvciBjb25kaXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29sIHN0cnVj
dHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVy
ZUVuc3VyZXNWYWxpZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBp
dCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcg
YSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3Nz
aWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxl
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosCisg
ICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNv
bmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6
V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNv
bnN0OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNv
dWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRj
aHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAg
U3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9y
dCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlz
V2F0Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0
ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJv
b2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVp
cmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBj
b25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7CisgICAg
fQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0
aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAK
KyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNv
bmRpdGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAg
ICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRl
ZiBKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRz
PEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0
Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDog
KnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAg
ICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25kaXRpb246
OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9
PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9u
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7
CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgIHVuc2lnbmVkIG51bUZv
dW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNv
bmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAg
ICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlQ29tcGF0aWJsZShjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVy
LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGEgOiAqdGhpcykgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBiIDogb3RoZXIpIHsKKyAgICAgICAgICAgIGlmICghYS5pc0Nv
bXBhdGlibGVXaXRoKGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxp
ZCgpIHx8ICFvdGhlci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAg
ICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAo
IWlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7
CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0
aW9uIDogb3RoZXIpIHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgZXhpc3RpbmdDb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICAgICAgaWYgKCFuZXdDb25k
aXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0
aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub25FbXB0eShyZXN1bHQpOwor
fQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1Zh
bGlkaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5z
dXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAg
ICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYg
KGNvbmRpdGlvbi52YWxpZGl0eVJlcXVyaWVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExpdmUoKSBjb25zdAorewor
ICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlz
KSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBD
b250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAg
IG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgb3V0LnByaW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgb3V0LnByaW50KGxp
c3REdW1wSW5Db250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50
KCJdIik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9
CisKK25hbWVzcGFjZSB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0
aW9uKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzd2l0
Y2ggKGNvbmRpdGlvbikgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7
CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAg
ICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb246OnByZXNlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRl
cyk7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6IHsKKyAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKAorICAgICAgICAgICAg
dm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90
eXBlKCkpOworICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0
ZXI6IHsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZT
ZXR0ZXIoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3QtPnN0cnVj
dHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbigpOworICAgIH0KK30KKworZW51bSBDb25jdXJyZW5jeSB7CisgICAgTWFp
blRocmVhZCwKKyAgICBDb25jdXJyZW50Cit9OworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Z2VuZXJhdGVDb25kaXRpb25zKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgSlNPYmplY3Qq
IHByb3RvdHlwZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246Oktp
bmQga2luZCwKKyAgICBDb25jdXJyZW5jeSBjb25jdXJyZW5jeSA9IE1haW5UaHJlYWQpCit7Cisg
ICAgQVNTRVJUKCEhcHJvdG90eXBlID09IChjb25kaXRpb24gPT0gUHJvcGVydHlDb25kaXRpb246
OlByZXNlbmNlKSk7CisgICAgCisgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBj
b25kaXRpb25zOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aXNQcm94eSgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjppbnZhbGlkKCk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIGlm
ICh2LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBpZiAoIXByb3RvdHlwZSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odik7CisgICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+
c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2lu
ZyBhIHByb3RvdHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQg
bm90IGJlCisgICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAo
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYgKGNvbmN1cnJlbmN5
ID09IE1haW5UaHJlYWQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlv
bmFyeVN0cnVjdHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIHRoaXND
b25kaXRpb25LaW5kOworICAgICAgICBpZiAoa2luZCA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJl
c2VuY2UgJiYgb2JqZWN0ICE9IHByb3RvdHlwZSkKKyAgICAgICAgICAgIHRoaXNDb25kaXRpb25L
aW5kID0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRoaXNDb25kaXRpb25LaW5kID0ga2luZDsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIG5ld0NvbmRpdGlvbiA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRp
dGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCB0aGlzQ29uZGl0aW9uS2luZCk7CisgICAgICAg
IGlmICghbmV3Q29uZGl0aW9uIHx8ICFuZXdDb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICAKKyAgICAgICAgY29uZGl0aW9u
cy5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvYmplY3QgPT0g
cHJvdG90eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8vIFZhbGlk
YXRlIHRoZSByZXN1bHQuCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNv
bmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgcHJlc2VuY2VDb3VudCA9IDA7
CisgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6
IGNvbmRpdGlvbnMpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgewor
ICAgICAgICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAg
ICAgICAgcHJlc2VuY2VDb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVChwcmVzZW5jZUNvdW50ID09IDEpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ZGVmYXVsdDogeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBj
b25kaXRpb24gOiBjb25kaXRpb25zKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0
aW9uLmtpbmQoKSA9PSBraW5kKTsKKyAgICB9IH0KKyAgICAKKyAgICByZXR1cm4gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlvbnMpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVy
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVp
ZCwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworfQorCitPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3Mo
CisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2Vu
ZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUG90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJl
LCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlwZSwgdWlkLAorICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJy
ZW50bHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJu
IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG51bGxwdHIsIGdsb2JhbE9iamVjdCwg
aGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZWNlT2ZT
ZXR0ZXIsCisgICAgICAgIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKyNkZWZp
bmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gQW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0byByZXBy
ZXNlbnQgdGhlIHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVlZCB0byBi
ZSBtZXQgZm9yIHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2FuIGhhdmUg
dGhlIGZvbGxvd2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5OiBUaGVy
ZSBhcmUgbm8gc3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisvLyBJbnZh
bGlkOiBUaGUgaGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6IFRoZXJl
IGFyZSBzb21lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdmFsaWQu
CisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5l
dyBEYXRhKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9yPE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQo
KTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICBy
ZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gIW1fZGF0YSB8fCAhbV9kYXRhLT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2RhdGE7Cisg
ICAgfQorICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24qIGl0
ZXJhdG9yOworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBtX2RhdGEtPnZlY3Rvci5iZWdpbigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0KKyAgICAKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29u
c3Q7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQcm9wZXJ0
eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIGNvbmRp
dGlvbiBzZXQgZm9yIGEgcHJvdG90eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8g
cmV0dXJuIHRoZQorICAgIC8vIGNvbmRpdGlvbiBvbiB0aGUgcHJvdG90eXBlIGl0c2VsZi4gVGhp
cyBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAorICAgIC8vIGF0dHJp
YnV0ZXMgZm9yIHRoZSBwcm90b3R5cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRo
ZXJlIGlzIGV4YWN0bHkgb25lIFByZXNlbmNlCisgICAgLy8gaW4gdGhlIHNldCwgYW5kIGl0IHdp
bGwgcmV0dXJuIHRoYXQgcHJlc2VuY2UuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gc2xv
dEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9uIHNldHMg
YXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgYm90aCB2YWxpZCBhbmQgZWFjaCBjb25kaXRpb24g
aW4gKnRoaXMgaXMKKyAgICAvLyBjb21wYXRpYmxlIHdpdGggZWFjaCBjb25kaXRpb24gaW4gb3Ro
ZXIuCisgICAgYm9vbCBhcmVDb21wYXRpYmxlV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgb3RoZXIpIGNvbnN0OworICAgIAorICAgIC8vIEF0dGVtcHQgdG8gY3JlYXRlIGEg
bmV3IGNvbmRpdGlvbiBzZXQgYnkgbWVyZ2luZyB0aGlzIG9uZSB3aXRoIHRoZSBvdGhlciBvbmUu
IFRoaXMgd2lsbAorICAgIC8vIGZhaWwgaWYgIXRoaXMuYXJlQ29tcGF0aWJsZVdpdGgob3RoZXIp
LiBXaGVuIGl0IGZhaWxzLCBpdCByZXR1cm5zIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBtZXJnZWRXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHko
KSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbExpdmUoKSBjb25zdDsK
KyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8v
IEhlbHBlcnMgZm9yIHVzaW5nIHRoaXMgaW4gYSB1bmlvbi4KKyAgICB2b2lkKiByZWxlYXNlUmF3
UG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0
YS5sZWFrUmVmKCkpOworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgYWRvcHRSYXdQb2ludGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBh
ZG9wdFJlZihzdGF0aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcikpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZnJv
bVJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19j
YXN0PERhdGEqPihyYXdQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIC8vIEludGVybmFsbHksIHRoaXMgcmVwcmVzZW50cyBJbnZhbGlk
IHVzaW5nIGEgcG9pbnRlciB0byBhIERhdGEgdGhhdCBoYXMgYW4gZW1wdHkgdmVjdG9yLgorICAg
IAorICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IGhhdmlu
ZyBpdCBpbnRlcm5hbGx5IHVzZSBhIHZlY3RvciB0aGF0IGp1c3QgaGFzCisgICAgLy8gdGhlIG5v
bi11aWQgcG9ydGlvbiBvZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgYW5kIHRoZW4gcmVxdWly
aW5nIHRoYXQgdGhlIGNhbGxlcnMgb2YgYWxsCisgICAgLy8gb2YgdGhlIEFQSXMgc3VwcGx5IHRo
ZSB1aWQuCisgICAgCisgICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxEYXRhPiB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBE
YXRhKCkgeyB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRp
b24+IHZlY3RvcjsKKyAgICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9Owor
CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eU1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
IGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0
dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09i
amVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCitPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3NDb25jdXJyZW50bHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNywxNCArMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nl
c3M6OkdldEJ5SWRBY2Nlc3MoCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
IHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291
bnQpCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fY2hhaW5D
b3VudChjaGFpbkNvdW50KQogICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUp
CisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5l
KHN0dWJSb3V0aW5lKQogewotICAgIGlmIChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0s
IG93bmVyLCBjaGFpbik7CiB9CiAKIEdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAg
LTcxLDcgKzcwLDcgQEAgYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1Zgog
ewogICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6Omlz
TWFya2VkKG1fY2hhaW4uZ2V0KCkpKQorICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNTdGlsbExp
dmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlz
aXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5
SWRMaXN0LmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEzICs1Mywx
MiBAQCBwdWJsaWM6CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBl
KEludmFsaWQpCi0gICAgICAgICwgbV9jaGFpbkNvdW50KDApCiAgICAgewogICAgIH0KICAgICAK
ICAgICBHZXRCeUlkQWNjZXNzKAogICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogPSAwLCB1bnNpZ25lZCBjaGFpbkNvdW50ID0gMCk7CisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
KCkpOwogICAgIAogICAgIH5HZXRCeUlkQWNjZXNzKCk7CiAgICAgCkBAIC03Miw4ICs3MSw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RydWN0dXJlLmdldCgpOyB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGFpbi5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYWluQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX2NoYWluQ291bnQ7IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAg
IHsKQEAgLTkxLDkgKzg5LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2Nr
OwogICAgIAogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3Vu
dDsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLSAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbV9jb25kaXRpb25TZXQ7IC8vIEZJWE1FIHdoYXQgYWJvdXQgYmFycmllcnM/CiAgICAg
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01MSw3ICs1MSw4IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVj
dHUKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5t
X29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZp
b3VzU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0
dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1f
Y2hhaW4uY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7CisgICAg
ICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojph
ZG9wdFJhd1BvaW50ZXIoCisgICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnJhd0NvbmRpdGlvblNldCk7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1Yklu
Zm8uc3R1YlJvdXRpbmU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTY0LDYgKzY1LDkg
QEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogCiBib29sIFB1dEJ5
SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBjb25zdAog
eworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgUmVwbGFjZToK
ICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCkBAIC03
NCwxNSArNzgsMTEgQEAgYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1Zgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1f
bmV3U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgY2FzZSBDdXN0b21T
ZXR0ZXI6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9jaGFpbiAmJiAhSGVh
cDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgIAogICAgIFB1
dEJ5SWRBY2Nlc3MoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hh
aW5Db3VudChVSU5UX01BWCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNjIsMTQgKzYxLDE0IEBA
IHB1YmxpYzoKICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsCiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAg
IHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgb2xkU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2No
YWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0
ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwogICAg
ICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtOTUsOCArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIs
CiAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAgdW5zaWduZWQg
Y2hhaW5Db3VudCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwKICAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9t
U2V0dGVyLAogICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkK
ICAgICB7CkBAIC0xMDQsMTAgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgUHV0QnlJZEFjY2Vz
cyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBz
dHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAg
aWYgKGNoYWluKSB7Ci0gICAgICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBj
aGFpbik7Ci0gICAgICAgICAgICByZXN1bHQubV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKLSAg
ICAgICAgfQorICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAg
ICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKICAgICAgICAgcmVz
dWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTE0NiwxNyArMTQxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1
cmUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNTZXR0ZXIoKSB8fCBp
c0N1c3RvbSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
U2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluQ291bnQ7Ci0g
ICAgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQo
KSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0
aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtMTc4LDggKzE2Myw3IEBAIHByaXZh
dGU6CiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9vbGRTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1
cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOwotICAgIHVuc2ln
bmVkIG1fY2hhaW5Db3VudDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRp
dGlvblNldDsKICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRl
cjsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRp
b24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1By
b3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7Cisg
ICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgb3V0LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoICht
X2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBv
ZmZzZXQoKSwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgYXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAg
ICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTVmFsdWUocHJvdG90
eXBlKCkpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWl2YWxlbmNl
OgorICAgICAgICBvdXQucHJpbnQoIiB3aXRoICIsIGluQ29udGV4dChyZXF1aXJlZFZhbHVlKCks
IGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQor
Citib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2Up
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2Ug
UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVudE9mZnNldCAh
PSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJp
YnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJl
KCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhl
CisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJhY3ks
IGFuZCBtYXliZSBtb3JlIHJpc2t5IHRoYW4gd2Ugd2FudC4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQorICAgICAgICAKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUgPSBiYXNlLT5nZXREaXJlY3Qo
Y3VycmVudE9mZnNldCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gcmVxdWlyZWRWYWx1
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6
CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJh
c2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1l
IHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNhbiBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwg
YW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRvdyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24g
dGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBhZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAg
Ly8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZlY3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1w
dXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIgc2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZh
bGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNv
bnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZh
cmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVz
IHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRo
ZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAgICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0
IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFibGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UK
KyAgICAgICAgLy8gc2hvbGRuJ3QgaGF2ZSBhIFRPQ1RPVSByYWNlIGVpdGhlci4KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICAKKyAgICAg
ICAgV2F0Y2hwb2ludFNldCogc2V0OworICAgICAgICBzd2l0Y2ggKGVmZm9ydCkgeworICAgICAg
ICBjYXNlIE1ha2VOb0NoYW5nZXM6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPnByb3Bl
cnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbnN1cmVXYXRjaGFiaWxpdHk6CisgICAgICAgICAgICBzZXQgPSBzdHJ1
Y3R1cmUtPmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KAorICAgICAgICAg
ICAgICAgICpIZWFwOjpoZWFwKHN0cnVjdHVyZSktPnZtKCksIG9mZnNldCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFzZXQtPmlzU3RpbGxW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246Omlz
V2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBj
b25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlk
KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFi
aWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3Ry
dWN0dXJlLCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUs
IGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29u
c3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlw
ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZh
bHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFs
dWUoKS5pc0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgp
LmFzQ2VsbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3Qg
VHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlw
ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAo
aGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246Oktp
bmQgY29uZGl0aW9uKQoreworICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6
OlByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5j
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpB
YnNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAg
ICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZh
bGVuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVm
aW5lIFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZl
cmVuY2VzOworCitjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBL
aW5kIHsKKyAgICAgICAgUHJlc2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2Vu
Y2VPZlNldHRlciwKKyAgICAgICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2lu
dCBvbiB0aGlzIHdpbGwgYmUgYSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3Ry
dWN0dXJlIHRyYW5zaXRpb25zLCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2lu
dCBvbiB0aGUgbmV3IHN0cnVjdHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0
aW9uKCkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5j
ZSkKKyAgICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAg
CisgICAgUHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQor
ICAgICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAg
eworICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykK
KyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAg
IHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJl
c2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAg
ICAgVk0mLCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcHJlc2Vu
Y2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFBy
b3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAg
ICAgICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5w
cm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5
cGUpCisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAg
IHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJh
cnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5
cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRl
cjsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRp
dGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNl
dHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQ
cm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQudS5lcXVp
dmFsZW5jZS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gZXF1
aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0
dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAgfQorICAgICAg
ICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQg
PT0gUHJlc2VuY2U7IH07CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9r
aW5kOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlk
OyB9CisgICAgCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYm
IG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUu
cHJlc2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7
IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBdHRyaWJ1dGVzKCkp
OworICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAg
ICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgKG1fa2luZCA9
PSBBYnNlbmNlIHx8IG1fa2luZCA9PSBBYnNlbmNlT2ZTZXR0ZXIpOyB9CisgICAgSlNPYmplY3Qq
IHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUHJvdG90eXBlKCkp
OworICAgICAgICByZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQg
PT0gRXF1aXZhbGVuY2U7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGhhc1JlcXVpcmVkVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUodS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8VW5p
cXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9r
aW5kKTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVzZW5jZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAgICAgICAgIHJl
c3VsdCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFic2VuY2UucHJv
dG90eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgor
ICAgICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVxdWl2YWxl
bmNlLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91aWQgIT0gb3Ro
ZXIubV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tpbmQg
IT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0
Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAgICAgcmV0dXJu
IHUucHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0CisgICAgICAgICAg
ICAgICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2VuY2UuYXR0cmli
dXRlczsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRl
cjoKKyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJz
ZW5jZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgICAgICBy
ZXR1cm4gdS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNlLnZhbHVlOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBB
YnNlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJs
ZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlk
cy4gSWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0
byByZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzCisgICAgLy8g
YSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3
YW50IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGluIG90aGVyIGNh
c2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRoaXMgd2lsbCBh
bHNvIHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5j
ZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQKKyAg
ICAvLyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcuCisgICAgYm9v
bCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkgIT0gb3RoZXIu
dWlkKCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0
dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4KKyAgICBi
b29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVy
ZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJl
IHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVy
ZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0
aGUgY29uZGl0aW9uIGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdpdmVuIG9iamVj
dCBhbmQgc3RydWN0dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2Us
IGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlCisg
ICAgLy8gY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29uZGl0aW9uIG9u
IGFuIG9iamVjdCB0aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRpZXMuIElmIHRo
ZSBvYmplY3QgaXMgbm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBpbmRpY2F0ZXMg
dGhhdCBjaGVja2luZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVuIHN0cnVjdHVy
ZSBndWFyYW50ZWVzIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9iamVjdCBpcwor
ICAgIC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBvdGhlciB3YXRj
aHBvaW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBjb25kaXRpb24g
aW4gYWRkaXRpb24gdG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlzU3RpbGxWYWxp
ZChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAg
IC8vIEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJsZSwgYnV0IGNv
dWxkIGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFwcHJvcHJpYXRl
IHdhdGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50cyBhcmUgZW5h
YmxlZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24gdGhlIHByb3Bl
cnR5IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNwYWNlIGZvcgor
ICAgIC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQgbmV2ZXIgZ2V0
IHZlcnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFibGUgd2F0Y2hp
bmcsIHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisg
ICAgZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWZh
dWx0LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2YgYW55IFN0cnVj
dHVyZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYgdGhlIHByb3Bl
cnR5IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1ha2UKKyAgICAg
ICAgLy8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5nIGZyb20gYSBK
SVQgdGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJlZmVyYWJsZSB3
aGVuIGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24gZm9yIHRoZSBm
aXJzdCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2ludCBmaXJlIHRo
YXQgY2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBhCisgICAgICAg
IC8vIHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGluZyBpbXBsaWVz
IHRoYXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0IHRvIG1ha2Ug
aXQgcHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5nIHdhdGNoZWQg
bWF5IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVmZXIgdG8gb25s
eSBhc3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJlZW4KKyAgICAg
ICAgLy8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAgICBNYWtlTm9D
aGFuZ2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0byBlbnN1cmUg
dGhhdCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhhcyBubworICAg
ICAgICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVzdCBtZWFucyB0
aGF0IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyByZXBsYWNlbWVu
dCB3YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxlZCBhbHJlYWR5
LiBEbyBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywgc2luY2UgdGhl
IGFjdCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgICAg
IEVuc3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0
IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGlu
ZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBv
c3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNXYXRjaGFi
bGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0dXJlKiwg
SlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFu
Z2VzKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxp
ZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgor
ICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxl
KAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIsIFdhdGNoYWJp
bGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hp
bmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9mIG91ciBjb25k
aXRpb25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9vbCB3YXRjaGlu
Z1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9CisgICAgCisgICAg
Ly8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxs
IGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFs
aWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBXYXRjaGFiaWxp
dHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIEtp
bmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cisg
ICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBKU09iamVj
dCogcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAg
ICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFsZW5jZTsKKyAg
ICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXku
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0IFByb3BlcnR5
Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAg
IHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvcGVydHlD
b25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24g
MTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwxOCBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3RydWN0aW9uWzBd
LnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9y
bWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBp
bnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCi0gICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9J
bmZvcm1hdGlvbik7Ci0gICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGlu
dGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENoYWluID0gYWRv
cHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywgc3RydWN0dXJl
LCBjaGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
KyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUu
b3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
X291dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzb25jdXJyZW50bHkoCisgICAgICAg
ICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAg
IH0KICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJl
LCBuZXdTdHJ1Y3R1cmUsIGludGVuZGVkQ2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgcmV0dXJu
IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIG9mZnNldCk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0xNjUsMTYgKzE2
NCwxNCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAogICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJ
ZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYg
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT51LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluKSB7Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCks
Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWlu
LmdldCgpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJh
d1BvaW50ZXIoCisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24u
cmF3Q29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVy
ZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnBy
ZXZpb3VzU3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5
SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBjaGFpbi5nZXQo
KSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAg
fQpAQCAtMjE5LDE1ICsyMTYsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENv
bmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0
YXRlKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hh
aW47Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAg
ICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCks
IGFjY2Vzcy5jaGFpbigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2hhaW4tPmlzU3Rp
bGxWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAg
ICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY2hhaW4uZ2V0
KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwg
YWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yNTMsNyAr
MjQ2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpzdHViLT5t
X2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0
KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25k
aXRpb25TZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShjYWxsTGlua1N0
YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MzY4LDIyICszNjEsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQogICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCi0gICAgICAg
IFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAgICBpZiAoIWlzRGlyZWN0KSB7
Ci0gICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYg
dGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFkLW9ubHkgcHJvcGVydGllcywg
dGhlbiBnaXZlIHVwLgotICAgICAgICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNlcHRTdG9yZVRv
KHVpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXNu
J3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9yIGRpY3Rpb25hcmll
cykKLSAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhlIGRpY3Rpb25hcnkgY2FzZSB3b3Vs
ZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbm90IGJlZW4KLSAgICAgICAgICAg
IC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0cmFuc2l0aW9uLiBBbmQgcmVhbGx5
IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKLSAgICAgICAgICAgIC8vIGJhaWwgaGVyZSBp
cyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9wdGltaXppbmcgSklU
IGdvIGFuZCBmbGF0dGVuCi0gICAgICAgICAgICAvLyBkaWN0aW9uYXJpZXMgaWYgd2UgaGF2ZSBl
dmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3ZXJlIG5ldmVyIHVzZWQgYXMK
LSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUgcHJvdG90eXBlIGFjY2Vz
cyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBvZgotICAgICAgICAgICAg
Ly8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwuCi0gICAgICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6ZWQoKSkKKyAgICAgICAgICAg
IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0Nv
bmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwogICAgICAgICB9CiAgICAgCkBAIC0zOTQsNyArMzc2LDcgQEAgUHV0QnlJZFN0YXR1cyBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChv
ZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFy
aWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwg
dHJhbnNpdGlvbiwgY2hhaW4uZ2V0KCksIG9mZnNldCkpOworICAgICAgICAgICAgUHV0QnlJZFZh
cmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9m
ZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTg3MzQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlh
bnQ6Om9wZXJhdG9yCiAgICAgbV9raW5kID0gb3RoZXIubV9raW5kOwogICAgIG1fb2xkU3RydWN0
dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CiAgICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5t
X25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFudENo
ZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7CisgICAg
bV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29mZnNldCA9IG90
aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBt
X2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNjQsMjkgKzYzLDI2IEBAIFB1dEJ5SWRWYXJpYW50IFB1
dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGMKIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6
OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0
cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gVHJhbnNp
dGlvbjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CiAgICAgcmVz
dWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgIGlmIChzdHJ1Y3R1cmVDaGFp
bikKLSAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9jb25zdGFu
dENoZWNrcyk7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAg
IHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQdXRC
eUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtT
dGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQog
ewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gU2V0dGVy
OwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBpZiAoY2hhaW4p
IHsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9jb25zdGFudENoZWNrcyk7
Ci0gICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBjaGFpbi0+dGVybWluYWxQcm90b3R5
cGUoKTsKLSAgICB9CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owog
ICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1
cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEz
NCwxOCArMTMwLDYgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0CiAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKLVN0cnVjdHVyZVNldCBQdXRCeUlkVmFy
aWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0
ZXIpOwotICAgIAotICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQotICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlKCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3Io
bV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChz
dHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KIGJvb2wgUHV0QnlJZFZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAgICBp
ZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCkBAIC0xOTYsNiArMTgwLDcgQEAgYm9vbCBQ
dXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIEFTU0VSVChtX29mZnNldCA9
PSByZXBsYWNlLm1fb2Zmc2V0KTsKICAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJl
cygpKTsKICAgICBBU1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFT
U0VSVCghcmVwbGFjZS5jb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgLy8gVGhpcyBzb3J0IG9m
IG1lcmdpbmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2Ug
YWRkIGEgbmV3IGZpZWxkIHdoaWNoCiAgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMg
d2hpbGUgdGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9l
c24ndApAQCAtMjMyLDE1ICsyMTcsMTMgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29u
dGV4dChQcmludAogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFRyYW5zaXRpb246
ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKICAgICAgICAg
ICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIs
Ci0gICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygpLCBjb250ZXh0
KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVyOgogICAgICAgICBv
dXQucHJpbnQoCiAgICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgp
LCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFu
dENoZWNrcygpLCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkK
LSAgICAgICAgICAgIG91dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpT
VmFsdWUobV9hbHRlcm5hdGVCYXNlKSwgY29udGV4dCkpOworICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKICAgICAgICAgb3V0LnByaW50KCIsIG9m
ZnNldCA9ICIsIG1fb2Zmc2V0KTsKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9j
YWxsTGlua1N0YXR1cyk7CiAgICAgICAgIG91dC5wcmludCgiPiIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4
NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFB1dEJ5SWRWYXJpYW50X2gK
ICNkZWZpbmUgUHV0QnlJZFZhcmlhbnRfaAogCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKIApAQCAtNDYs
NyArNDYsNiBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoKQogICAgICAgICA6IG1fa2lu
ZChOb3RTZXQpCiAgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICAgICAgLCBt
X2FsdGVybmF0ZUJhc2UobnVsbHB0cikKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0
KQogICAgIHsKICAgICB9CkBAIC01NCwxNiArNTMsMTUgQEAgcHVibGljOgogICAgIFB1dEJ5SWRW
YXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJh
dG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50
IHJlcGxhY2UoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpOworICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0
IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJ
ZFZhcmlhbnQgdHJhbnNpdGlvbigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAg
ICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7
CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAgICAgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICAgICAg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMpOworICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CiAgICAgCiAgICAgS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkBAIC03Niw2ICs3NCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKICAgICB9CiAgICAgCisg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgpID09
IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CkBA
IC0xMDAsMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgp
IGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IENv
bnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAog
ICAgIHsKQEAgLTExMSwxNCArMTExLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZz
ZXQ7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1f
YWx0ZXJuYXRlQmFzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1
cmUoKSBjb25zdDsKLSAgICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAtMTM2LDgg
KzEyOCw3IEBAIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJlU2V0IG1f
b2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBt
X2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsMjQgKzQ2LDI5IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQqIFN0cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxp
Y2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBv
aW50cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCBy
ZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0
IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcu
Ci0gICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8o
KSk7CisgICAgaWYgKCFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJl
V2F0Y2hhYmlsaXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBt
eSBvd24gZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAg
ICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0
IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2
ZXJzYWwgZm9yIGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAg
ICAgICBtX2hvbGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKQog
ewogfQogCi1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJu
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFk
KTsKIH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJl
ZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9j
ayogY29kZUJsb2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpCiB7CiAgICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVm
KG5ldyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykp
OwpAQCAtNzIsNyArNzcsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRj
aHBvCiAgICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwog
ICAgIH0KICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAg
cmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg3
MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSAr
NDcsMTEgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9s
ZGVyKQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAg
IDogbV9rZXkoa2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25l
eHQoV1RGOjptb3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02OSw2ICs2Niw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsK
ICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpA
QCAtODMsMTEgKzgxLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCogYWRkV2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQq
IGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAg
CiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVy
ZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvKik7CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgs
MTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNj
ZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Cisg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZToKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25z
IGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgs
MTAgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8
ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAg
ICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdl
dCgpKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAg
ICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg3MzQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5o
IgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCkBAIC0xMTMsNyArMTE0LDcgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJ
bmZvIHsKIAogICAgIC8vIFB1dEJ5SWQqCiAKLSAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlv
bihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGJvb2wgaXNEaXJlY3Qp
CisgICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBT
dHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0LCBib29sIGlzRGlyZWN0KQogICAgIHsK
ICAgICAgICAgaWYgKGlzRGlyZWN0KQogICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7CkBAIC0xMjIsNyArMTIzLDcgQEAgc3RydWN0IFN0
cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3Vz
U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKICAgICAgICAgdS5w
dXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAg
ICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Cisg
ICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0
LnJlbGVhc2VSYXdQb2ludGVyKCk7CiAgICAgfQogCiAgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxh
Y2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUp
CkBAIC0xNzUsMTAgKzE3NiwxMSBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAg
ICBzZWVuID0gdHJ1ZTsKICAgICB9CiAgICAgICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24pCiAgICAgewogICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZv
OjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAgICAgICAgd2F0Y2hwb2lu
dHMsIGNvZGVCbG9jaywgdGhpcyk7CisgICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2Nr
LCB0aGlzLCBjb25kaXRpb24pOwogICAgIH0KICAgICAKICAgICBpbnQ4X3QgYWNjZXNzVHlwZTsK
QEAgLTIxNywyMyArMjE5LDEyIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAg
ICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKICAg
ICAgICAgfSBnZXRCeUlkU2VsZjsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByb3RvdHlwZVN0cnVjdHVyZTsKLSAgICAgICAg
ICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgIH0gZ2V0QnlJZFByb3RvOwotICAgICAgICBzdHJ1
Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RT
dHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBj
aGFpbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50IDogMzE7Ci0gICAgICAgICAgICBib29s
IGlzRGlyZWN0IDogMTsKLSAgICAgICAgfSBnZXRCeUlkQ2hhaW47Ci0gICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICB9IGdl
dEJ5SWRMaXN0OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxTdHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICAgICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0
OwogICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwogICAgICAgICBzdHJ1Y3QgewogICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NzksNyArMTc3OSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3VidGxlPwogICAg
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tpXS5hbHRlcm5hdGVCYXNl
KCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0IGdpdmUgdXMgYSB2
YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3ZSdkCisgICAgICAg
ICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCisgICAgICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNvbmRpdGlvblNldCgp
LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewpAQCAtMjA2MCwzMCArMjA2Mywy
MiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFi
c3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdHJ1
Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBTdHJ1
Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgZm9yIChjb25z
dCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXRE
YXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBnZXRDYXNlLnNl
dCgpOwogICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlmIChzZXQu
aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYmFzZVNl
dC5tZXJnZShzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJhc2VGb3JM
b2FkOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAg
ICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlLm1fdmFsdWU7Ci0gICAg
ICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAgICAgICBtX2dyYXBo
LnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAgIGJhc2VGb3JMb2Fk
LCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoZ2V0Q2FzZS5tZXRob2Qo
KS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jl
c3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKKyAg
ICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAogICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICAgICAgcmVzdWx0
Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KAorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVu
Y2UpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6
aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRjaGFibGUoKSk7Cisg
ICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hw
b2ludCgmbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBtX2tleS0+b2JqZWN0KCktPnN0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkobV9r
ZXkudWlkKCkpOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1fa2V5Lm9iamVjdCgpLT5zdHJ1
Y3R1cmUoKS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICBz
ZXQtPmFkZFdhdGNocG9pbnQoJm1fcHJvcGVydHlXYXRjaHBvaW50KTsKK30KKwordm9pZCBBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmZpcmUoY29uc3QgRmlyZURldGFp
bCYgZGV0YWlsKQoreworICAgIC8vIE9uZSBvZiB0aGUgd2F0Y2hwb2ludHMgZmlyZWQsIGJ1dCB0
aGUgb3RoZXIgb25lIGRpZG4ndC4gTWFrZSBzdXJlIHRoYXQgbmVpdGhlciBvZiB0aGVtIGFyZQor
ICAgIC8vIGluIGFueSBzZXQgYW55bW9yZS4gVGhpcyBzaW1wbGlmaWVzIHRoaW5ncyBieSBhbGxv
d2luZyB1cyB0byByZWluc3RhbGwgdGhlIHdhdGNocG9pbnRzCisgICAgLy8gd2hlcmV2ZXIgZnJv
bSBzY3JhdGNoLgorICAgIGlmIChtX3N0cnVjdHVyZVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAg
ICAgICAgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50LnJlbW92ZSgpOworICAgIGlmIChtX3Byb3BlcnR5
V2F0Y2hwb2ludC5pc09uTGlzdCgpKQorICAgICAgICBtX3Byb3BlcnR5V2F0Y2hwb2ludC5yZW1v
dmUoKTsKKyAgICAKKyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246
OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7
CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3
UG9pbnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7
CisgICAgfQorICAgIAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQo
IkFkYXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAg
IFN0cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAor
ICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVl
VG9VbnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Cit9
CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpTdHJ1Y3R1
cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWls
KQoreworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3N0cnVjdHVyZVdhdGNo
cG9pbnQpOworICAgIAorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dCogcGFyZW50ID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludCo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSAtIG15T2Zmc2V0KTsKKyAgICAKKyAgICBwYXJlbnQtPmZpcmUoZGV0YWlsKTsKK30KKwordm9p
ZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hw
b2ludDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAg
ICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoCisgICAgICAgIEFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9wcm9wZXJ0eVdhdGNocG9pbnQpOwor
ICAgIAorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCogcGFyZW50
ID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIG15T2Zm
c2V0KTsKKyAgICAKKyAgICBwYXJlbnQtPmZpcmUoZGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5o
IgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisgICAg
CisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgU3RydWN0dXJlV2F0
Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0cnVj
dHVyZVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisgICAg
Y2xhc3MgUHJvcGVydHlXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgUHJvcGVydHlXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlk
ZTsKKyAgICB9OworICAgIAorICAgIHZvaWQgZmlyZShjb25zdCBGaXJlRGV0YWlsJik7CisgICAg
CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKKyAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50IG1fc3RydWN0dXJlV2F0Y2hwb2ludDsK
KyAgICBQcm9wZXJ0eVdhdGNocG9pbnQgbV9wcm9wZXJ0eVdhdGNocG9pbnQ7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29k
ZUJsb2NrKQorICAgIDogbV9rZXkoa2V5KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKGtleS53YXRjaGluZ1JlcXVyaWVzU3RyY3V0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWtleS53YXRjaGluZ1JlcXVp
cmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRj
aGFibGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFu
c2l0aW9uV2F0Y2hwb2ludCh0aGlzKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQ6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgaWYg
KG1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkp
KSB7CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIs
IG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgIH0KKyAgICAKKyAgICBT
dHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50KCJBZGFwdGF0aW9uIG9mICIsIG1f
a2V5LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAgICBTdHJpbmdGaXJlRGV0YWlsIGRl
dGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0
dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9p
bnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZkZXRhaWwpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworcHVibGljOgorICAgIEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAg
IAorICAgIHZvaWQgaW5zdGFsbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGZp
cmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyArMjAzLDE0IEBAIHByaXZh
dGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRs
ZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5j
dGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVj
a3MpOwogICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSogaGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNl
dCYsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSBv
cCA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVk
VHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNl
dCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlP
ZmZzZXQpOworICAgIAorICAgIC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeUlkVmFyaWFudCBhbmQg
dGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5SWRWYXJpYW50LgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZhcmlhbnRUeXBlPgorICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJiB2YXJpYW50KTsK
KyAgICAgICAgCiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKAogICAgICAgICBpbnQgZGVzdGluYXRp
b25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwKICAgICAgICAgY29uc3QgR2V0QnlJZFN0YXR1cyYpOwpAQCAtMjEyLDcgKzIxOSwz
MiBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRT
dGF0dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0KTsKLSAgICB2b2lkIGVtaXRDaGVja3MoY29u
c3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYpOworICAgIAorICAgIC8vIEVpdGhlciBy
ZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1pdCBhIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi4g
UmV0dXJucyBmYWxzZSBpZiB0aGUKKyAgICAvLyBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLCBh
bmQgdGhlcmVmb3JlIG5vIHJlYXNvbmFibGUgY2hlY2sgY2FuIGJlIGVtaXR0ZWQuCisgICAgYm9v
bCBjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAorICAgIEdldEJ5
T2Zmc2V0TWV0aG9kIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kKTsKKyAgICAK
KyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3Ig
dGhpcyBjb25kaXRpb24uIEl0IG11c3QgYmUgYSBQcmVzZW5jZQorICAgIC8vIGNvbmRpdGlvbi4g
SXQgd2lsbCBhdHRlbXB0IHRvIHByb21vdGUgYSBQcmVzZW5jZSBjb25kaXRpb24gdG8gYW4gRXF1
aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8vIEVtaXRzIGNvZGUgZm9yIHRoZSBsb2FkZWQgdmFs
dWUgdGhhdCB0aGUgY29uZGl0aW9uIGd1YXJkcywgYW5kIHJldHVybnMgYSBub2RlIGNvbnRhaW5p
bmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgdGhlIGNvbmRpdGlv
biBubyBsb25nZXIgaG9sZHMuCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcGxhbkxvYWQoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBl
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYsIE5v
ZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7Cisg
ICAgCisgICAgLy8gQ2FsbHMgY2hlY2soKSBmb3IgZWFjaCBjb25kaXRpb24gaW4gdGhlIHNldDog
dGhhdCBpcywgaXQgZWl0aGVyIGVtaXRzIGNoZWNrcyBvciByZWdpc3RlcnMKKyAgICAvLyB3YXRj
aHBvaW50cyAob3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvKSB0byBtYWtlIHRoZSBjb25kaXRp
b25zIGhvbGQuIElmIGFueSBvZiB0aG9zZQorICAgIC8vIGNvbmRpdGlvbnMgYXJlIG5vIGxvbmdl
ciBjaGVja2FibGUsIHJldHVybnMgZmFsc2UuCisgICAgYm9vbCBjaGVjayhjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNrKCkgZm9yIHRo
b3NlIGNvbmRpdGlvbnMgdGhhdCBhcmVuJ3QgdGhlIHNsb3QgYmFzZSwgYW5kIGNhbGxzIGxvYWQo
KSBmb3IgdGhlIHNsb3QKKyAgICAvLyBiYXNlLiBEb2VzIGEgY29tYmluYXRpb24gb2Ygd2F0Y2hw
b2ludCByZWdpc3RyYXRpb24gYW5kIGNoZWNrIGVtaXNzaW9uIHRvIGd1YXJkIHRoZQorICAgIC8v
IGNvbmRpdGlvbnMsIGFuZCBlbWl0cyBjb2RlIHRvIGxvYWQgdGhlIHZhbHVlIGZyb20gdGhlIHNs
b3QgYmFzZS4gUmV0dXJucyBhIG5vZGUgY29udGFpbmluZworICAgIC8vIHRoZSBsb2FkZWQgdmFs
dWUuIFJldHVybnMgbnVsbCBpZiBhbnkgb2YgdGhlIGNvbmRpdGlvbnMgd2VyZSBubyBsb25nZXIg
Y2hlY2thYmxlLgorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Jik7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsK
IAogICAgIHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJDYWNoZXMo
KTsKQEAgLTcwNiw2ICs3MzgsOSBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGUqIGNlbGxDb25z
dGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcm91dGUgdG8gZW1pdFBy
b3BlcnR5Q2hlY2ssIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gQnV0IGN1cnJlbnRseSwKKyAg
ICAgICAgLy8gdGhpcyBnZXRzIG5vIHByb2ZpdCBmcm9tIHVzaW5nIGVtaXRQcm9wZXJ0eUNoZWNr
KCkgc2luY2Ugd2UnbGwgbm9uLWFkYXB0aXZlbHkgd2F0Y2ggdGhlCisgICAgICAgIC8vIG9iamVj
dCdzIHN0cnVjdHVyZSBhcyBzb29uIGFzIHdlIG1ha2UgaXQgYSB3ZWFrSlNDb3NudGFudC4KICAg
ICAgICAgTm9kZSogb2JqZWN0Tm9kZSA9IHdlYWtKU0NvbnN0YW50KG9iamVjdCk7CiAgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChzdHJ1Y3R1cmUpKSwgb2JqZWN0Tm9kZSk7CiAgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwpA
QCAtMjI0MCwxNSArMjI3NSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50
SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK05vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVU
eXBlIG9wKQogewotICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgIGlmIChK
U1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UtPmFz
SlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQsIG9mZnNldCkpIHsKLSAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgYmFzZSk7Ci0gICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29u
c3RhbnQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFn
ZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9y
YWdlID0gYmFzZTsKQEAgLTIyNjQsNiArMjI5MiwxOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCitOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCit7
CisgICAgaWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgY29u
c3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1ZhbHVlKCks
IHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkgeworICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9t
LCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRp
Y3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNldCwgb3ApOworfQorCiBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKIHsKICAgICBOb2Rl
KiBwcm9wZXJ0eVN0b3JhZ2U7CkBAIC0yMjgxLDEwICsyMzIxLDIwOSBAQCBOb2RlKiBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdENoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiB2ZWN0b3IpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpjaGVjayhjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmIChtX2dyYXBoLndhdGNoQ29u
ZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICBp
ZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoc3RydWN0dXJlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIENoZWNrU3Ry
dWN0dXJlLAorICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJl
KSksCisgICAgICAgIHdlYWtKU0NvbnN0YW50KGNvbmRpdGlvbi5vYmplY3QoKSkpOworICAgIHJl
dHVybiB0cnVlOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cHJvbW90
ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kKQoreworICAgIGlmIChtZXRob2Qu
a2luZCgpID09IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZQorICAgICAgICAm
JiBtZXRob2QucHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpKSB7Cisg
ICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3Bl
cnR5KG1ldGhvZC5wcm90b3R5cGUoKS0+dmFsdWUoKSwgbWV0aG9kLnByb3RvdHlwZSgpLT5zdHJ1
Y3R1cmUoKSwgbWV0aG9kLm9mZnNldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNl
dE1ldGhvZDo6Y29uc3RhbnQobV9ncmFwaC5mcmVlemUoY29uc3RhbnQpKTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIG1ldGhvZDsKK30KKworR2V0QnlPZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJz
ZXI6OnBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCit7
CisgICAgLy8gV2UgbWlnaHQgcHJvbW90ZSB0aGlzIHRvIEVxdWl2YWxlbmNlLCBhbmQgYSBsYXRl
ciBERkcgcGFzcyBtaWdodCBhbHNvIGRvIHN1Y2ggcHJvbW90aW9uCisgICAgLy8gZXZlbiBpZiB3
ZSBmYWlsLCBidXQgZm9yIHNpbXBsaWNpdHkgdGhpcyBjYW5ub3QgYmUgYXNrZWQgdG8gbG9hZCBh
biBlcXVpdmFsZW5jZSBjb25kaXRpb24uCisgICAgLy8gTm9uZSBvZiB0aGUgY2xpZW50cyBvZiB0
aGlzIG1ldGhvZCB3aWxsIHJlcXVlc3QgYSBsb2FkIG9mIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlv
biBhbnl3YXksCisgICAgLy8gYW5kIHN1cHBvcnRpbmcgaXQgd291bGQgY29tcGxpY2F0ZSB0aGUg
aGV1cmlzdGljcyBiZWxvdy4KKyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09
IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgCisgICAgLy8gSGVyZSdzIHRoZSBy
YW5raW5nIG9mIGhvdyB0byBoYW5kbGUgdGhpcywgZnJvbSBtb3N0IHByZWZlcnJlZCB0byBsZWFz
dCBwcmVmZXJyZWQ6CisgICAgLy8KKyAgICAvLyAxKSBXYXRjaHBvaW50IG9uIGFuIGVxdWl2YWxl
bmNlIGNvbmRpdGlvbiBhbmQgcmV0dXJuIGEgY29uc3RhbnQgbm9kZSBmb3IgdGhlIGxvYWRlZCB2
YWx1ZS4KKyAgICAvLyAgICBObyBvdGhlciBjb2RlIGlzIGVtaXR0ZWQsIGFuZCB0aGUgc3RydWN0
dXJlIG9mIHRoZSBiYXNlIG9iamVjdCBpcyBuZXZlciByZWdpc3RlcmVkLgorICAgIC8vICAgIEhl
bmNlIHRoaXMgcmVzdWx0cyBpbiB6ZXJvIGNvZGUgYW5kIHdlIHdvbid0IGpldHRpc29uIHRoaXMg
Y29tcGlsYXRpb24gaWYgdGhlIG9iamVjdAorICAgIC8vICAgIHRyYW5zaXRpb25zLCBldmVuIGlm
IHRoZSBzdHJ1Y3R1cmUgaXMgd2F0Y2hhYmxlIHJpZ2h0IG5vdy4KKyAgICAvLworICAgIC8vIDIp
IE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJh
c2UgaXMgZ29pbmcgdG8gYmUgd2F0Y2hlZCBieSB0aGUKKyAgICAvLyAgICBERkcgYW55d2F5IChp
LmUuIGRmZ1Nob3VsZFdhdGNoKS4gV2F0Y2ggdGhlIHN0cnVjdHVyZSBhbmQgZW1pdCB0aGUgbG9h
ZC4gRG9uJ3Qgd2F0Y2ggdGhlCisgICAgLy8gICAgY29uZGl0aW9uLCBzaW5jZSB0aGUgYWN0IG9m
IHR1cm5pbmcgdGhlIGJhc2UgaW50byBhIGNvbnN0YW50IGluIElSIHdpbGwgY2F1c2UgdGhlIERG
RyB0bworICAgIC8vICAgIHdhdGNoIHRoZSBzdHJ1Y3R1cmUgYW55d2F5IGFuZCBkb2luZyBzbyB3
b3VsZCBzdWJzdW1lIHdhdGNoaW5nIHRoZSBjb25kaXRpb24uCisgICAgLy8KKyAgICAvLyAzKSBO
ZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNl
IGlzIHdhdGNoYWJsZSBidXQgbm90IGJ5IHRoZQorICAgIC8vICAgIERGRyAoaS5lLiB0cmFuc2l0
aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpIGFuZCAhZGZnU2hvdWxkV2F0Y2hJZlBvc3Np
YmxlKCkpLiBXYXRjaAorICAgIC8vICAgIHRoZSBjb25kaXRpb24sIGFuZCBlbWl0IGEgbG9hZC4K
KyAgICAvLworICAgIC8vIDQpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBz
dHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgbm90IHdhdGNoYWJsZS4gRW1pdCBhCisgICAgLy8gICAg
c3RydWN0dXJlIGNoZWNrLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA1KSBUaGUg
Y29uZGl0aW9uIGRvZXMgbm90IGhvbGQuIEdpdmUgdXAgYW5kIHJldHVybiBudWxsLgorICAgIAor
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBhZ3JlZSBvbiB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZm9yIHRo
ZSBwdXJwb3NlIG9mIGVtaXR0aW5nIHRoZXNlIHZhcmlvdXMKKyAgICAvLyBjaGVja3MuCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOwor
ICAgIAorICAgIC8vIEZpcnN0LCB0cnkgdG8gcHJvbW90ZSBQcmVzZW5jZSB0byBFcXVpdmFsZW5j
ZS4gV2UgZG8gdGhpcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZQorICAgIC8vIGJlY2F1c2Ug
aXQncyB0aGUgbW9zdCBwcm9maXRhYmxlLiBBbHNvLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhl
IHByZXNlbmNlIGlzIHdhdGNoYWJsZSBidXQKKyAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHdhdGNo
IGl0IHVubGVzcyBpdCBiZWNhbWUgYW4gZXF1aXZhbGVuY2UgKHNlZSB0aGUgcmVsYXRpb25zaGlw
IGJldHdlZW4KKyAgICAvLyAoMSksICgyKSwgYW5kICgzKSBhYm92ZSkuCisgICAgaWYgKHN0cnVj
dHVyZS0+aXNWYWxpZE9mZnNldChjb25kaXRpb24ub2Zmc2V0KCkpKSB7CisgICAgICAgIC8vIFRo
aXMgbG9hZCBpcyBmaW5lIGJlY2F1c2Ugb25seSB0aGUgR0MgY2FuIGNhdXNlIGEgZGVsZXRlZCBw
cm9wZXJ0eSB0byBoYXZlIGEgZ2FyYmFnZQorICAgICAgICAvLyB2YWx1ZS4KKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+Z2V0RGlyZWN0KGNvbmRpdGlvbi5vZmZz
ZXQoKSk7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlQ29uZGl0
aW9uID0KKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdp
dGhvdXRCYXJyaWVyKAorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5vYmplY3QoKSwgY29uZGl0
aW9uLnVpZCgpLCB2YWx1ZSk7CisgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGVx
dWl2YWxlbmNlQ29uZGl0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhv
ZDo6Y29uc3RhbnQobV9ncmFwaC5mcmVlemUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgLy8g
QXQgdGhpcyBwb2ludCwgd2UnbGwgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgY29uZGl0aW9uJ3Mg
YmFzZSBhcyBhIGNvbnN0YW50IGluIERGRyBJUi4gT25jZQorICAgIC8vIHdlIGRvIHRoaXMsIHRo
ZSBmcm96ZW4gdmFsdWUgd2lsbCBoYXZlIGl0cyBvd24gaWRlYSBvZiB3aGF0IHRoZSBzdHJ1Y3R1
cmUgaXMuIFVzZSB0aGF0IGZyb20KKyAgICAvLyBub3cgb24ganVzdCBiZWNhdXNlIGl0J3MgbGVz
cyBjb25mdXNpbmcuCisgICAgRnJvemVuVmFsdWUqIGJhc2UgPSBtX2dyYXBoLmZyZWV6ZShjb25k
aXRpb24ub2JqZWN0KCkpOworICAgIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOworICAg
IAorICAgIC8vIENoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSd2ZSByZWdpc3RlcmVkIG1h
a2VzIHRoZSBjb25kaXRpb24gaG9sZC4gSWYgbm90LCBqdXN0IGdpdmUKKyAgICAvLyB1cC4gVGhp
cyBpcyBjYXNlICg1KSBhYm92ZS4KKyAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7
CisgICAgCisgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRjaGVkIGJ5IHRoZSBERkcgYWxy
ZWFkeSwgdGhlbiBqdXN0IHVzZSB0aGlzIGZhY3QgdG8gZW1pdCB0aGUgbG9hZC4KKyAgICAvLyBU
aGlzIGlzIGNhc2UgKDIpIGFib3ZlLgorICAgIGlmIChzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNo
KCkpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZDo6
bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7CisgICAgCisgICAg
Ly8gSWYgd2UgY2FuIHdhdGNoIHRoZSBjb25kaXRpb24gcmlnaHQgbm93LCB0aGVuIHdlIGNhbiBl
bWl0IHRoZSBsb2FkIGFmdGVyIHdhdGNoaW5nIGl0LiBUaGlzCisgICAgLy8gaXMgY2FzZSAoMykg
YWJvdmUuCisgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVBy
b3RvdHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBXZSBjYW4n
dCB3YXRjaCBhbnl0aGluZyBidXQgd2Uga25vdyB0aGF0IHRoZSBjdXJyZW50IHN0cnVjdHVyZSBz
YXRpc2ZpZXMgdGhlIGNvbmRpdGlvbi4gU28sCisgICAgLy8gY2hlY2sgZm9yIHRoYXQgc3RydWN0
dXJlIGFuZCB0aGVuIGVtaXQgdGhlIGxvYWQuCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hl
Y2tTdHJ1Y3R1cmUsIAorICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3Ry
dWN0dXJlKSksCisgICAgICAgIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGJhc2UpKSk7
CisgICAgcmV0dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJv
bVByb3RvdHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKK30KKworTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCwKKyAgICBO
b2RlVHlwZSBvcCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUo
KTsgKytpKQotICAgICAgICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sodmVjdG9yW2ld
LmNvbnN0YW50KCksIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKSk7CisgICAgc3dpdGNoIChtZXRob2Qu
a2luZCgpKSB7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6Cisg
ICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QuY29uc3Rh
bnQoKSkpOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7
CisgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8o
bWV0aG9kLnByb3RvdHlwZSgpKSk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChw
cmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBv
cCk7CisgICAgfQorICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgIC8v
IFdpbGwgbmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgTm9kZVR5
cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQoY29uZGl0
aW9uKTsKKyAgICByZXR1cm4gbG9hZChwcmVkaWN0aW9uLCBtX2dyYXBoLmlkZW50aWZpZXJzKCku
ZW5zdXJlKGNvbmRpdGlvbi51aWQoKSksIG1ldGhvZCwgb3ApOworfQorCitib29sIEJ5dGVDb2Rl
UGFyc2VyOjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9u
IDogY29uZGl0aW9uU2V0KSB7CisgICAgICAgIGlmICghY2hlY2soY29uZGl0aW9uKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dldEJ5
T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJl
c3VsdDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6
IGNvbmRpdGlvblNldCkgeworICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcmVzdWx0KTsgLy8gU2hvdWxkIG9ubHkgc2VlIGV4YWN0bHkgb25lIG9mIHRo
ZXNlLgorICAgICAgICAgICAgcmVzdWx0ID0gcGxhbkxvYWQoY29uZGl0aW9uKTsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhv
ZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBp
ZiAoIWNoZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0
TWV0aG9kKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoISFyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAor
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIE5vZGVUeXBlIG9wKQoreworICAgIEdldEJ5T2Zmc2V0TWV0
aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvblNldCk7CisgICAgcmV0dXJuIGxvYWQoCisg
ICAgICAgIHByZWRpY3Rpb24sCisgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUo
Y29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkudWlkKCkpLAorICAgICAgICBtZXRob2Qs
IG9wKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CitOb2RlKiBCeXRlQ29k
ZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkK
K3sKKyAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKKyAgICAKKyAgICBTcGVj
dWxhdGVkVHlwZSBsb2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlwZSBsb2FkT3A7CisgICAgaWYg
KHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgeworICAgICAgICBsb2FkUHJlZGljdGlvbiA9IFNw
ZWNDZWxsT3RoZXI7CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRlclNldHRlckJ5T2Zmc2V0Owor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gcHJlZGljdGlvbjsKKyAgICAg
ICAgbG9hZE9wID0gR2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE5vZGUqIGxvYWRlZFZh
bHVlOworICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAg
IGxvYWRlZFZhbHVlID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFyaWFudC5jb25kaXRpb25TZXQo
KSwgbG9hZE9wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRC
eU9mZnNldCgKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCB2YXJpYW50LnN0cnVj
dHVyZVNldCgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAorICAgICAgICAg
ICAgbG9hZE9wKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgYmFja3dhcmRzIHByb3BhZ2F0
aW9uIGtub3dzIHRoYXQgd2UndmUgdXNlZCBiYXNlLgorICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
YmFzZSk7CisgICAgCisgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCiB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMwNywxOCArMjU0NiwzNiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAg
ICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwotICAgIAor
ICAgICAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2VzOworICAgICAgICAK
ICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNo
YWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAgICAgICAvLyAgICBvcHRp
bWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0
aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hl
Y2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFu
dEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspCi0g
ICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFu
dENoZWNrcygpKTsKLSAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2
YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGNhc2Vz
LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoCisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQodmFyaWFudC5j
b25kaXRpb25TZXQoKSk7CisgICAgICAgICAgICBpZiAoIW1ldGhvZCkgeworICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKE11bHRpR2V0
QnlPZmZzZXRDYXNlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIG1ldGhvZCkpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3Jh
cGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKKyAgICAKICAgICAgICAg
Ly8gMikgRW1pdCBhIE11bHRpR2V0QnlPZmZzZXQKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERh
dGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAg
IGRhdGEtPnZhcmlhbnRzID0gZ2V0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRh
LT5jYXNlcyA9IGNhc2VzOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRp
Zmllck51bWJlcjsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJh
bmQpLAogICAgICAgICAgICAgYWRkVG9HcmFwaChNdWx0aUdldEJ5T2Zmc2V0LCBPcEluZm8oZGF0
YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwpAQCAtMjMyOCwzMCArMjU4NSwxNiBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIEFTU0VSVChnZXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CiAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGdl
dEJ5SWRTdGF0dXNbMF07CiAgICAgICAgICAgICAgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWUg
PSBsb2FkKHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAg
IGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5h
dGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRl
bnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgbV9n
cmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwogICAgIAotICAgIE5v
ZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgYWRkVG9HcmFw
aChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7Ci0gICAgCi0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNv
bnN0YW50Q2hlY2tzKCkpOwotCi0gICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAg
ICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwotICAg
IAotICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQgdG8KLSAgICAvLyBlbnN1cmUgdGhhdCB0
aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50aWwgd2Un
cmUgZG9uZSB3aXRoCi0gICAgLy8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5z
ZXJ0IHRoZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAv
LyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3Ry
dWN0dXJlIG9uIGJhc2UuCi0gICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQotICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZSk7Ci0gICAgCi0gICAgTm9kZSogbG9hZGVk
VmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1
cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0gICAgICAgIGJhc2UsIHZhcmlhbnQu
YmFzZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAg
ICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6
IEdldEJ5T2Zmc2V0KTsKLSAgICAKICAgICBpZiAoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkg
ewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGxvYWRl
ZFZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4OCw3ICsyNjMxLDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyAgICBzaW5jZSB3ZSBvbmx5IHJlYWxs
eSBjYXJlIGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8g
dGFrZSB0aGF0CiAgICAgLy8gICAgc2hvcnRjdXQuCiAgICAgaW50IG5leHRSZWdpc3RlciA9IHJl
Z2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVOYWtl
ZFNldCk7CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIElt
bWVkaWF0ZU5ha2VkU2V0KTsKICAgICAKICAgICBoYW5kbGVDYWxsKAogICAgICAgICBkZXN0aW5h
dGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbCwgT1BDT0RFX0xF
TkdUSChvcF9nZXRfYnlfaWQpLApAQCAtMjQyMiwxNyArMjY2NSwyMCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAg
bV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwotICAgICAgICAK
ICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJp
YW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykg
ewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgp
ICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudElu
ZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5
SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRT
dGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24o
KS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlP
ZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwog
ICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKICAgICAg
ICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CkBAIC0yNDU0LDcg
KzI3MDAsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAKICAg
ICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3Rh
bnRDaGVja3MoKSk7CisgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkp
IHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVl
LCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgIApAQCAt
MjUwNSwxOSArMjc1NCwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVyOiB7Ci0gICAg
ICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgIAotICAgICAgICBhZGRUb0dy
YXBoKAotICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAKLSAgICAgICAg
ZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotICAgICAgICAKLSAgICAgICAg
aWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgYmFzZSA9IHdlYWtKU0Nv
bnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAgCi0gICAgICAgIE5vZGUq
IGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICBTcGVjQ2VsbE90
aGVyLCBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51bWJlciwgdmFy
aWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIEdldEdldHRlclNldHRlckJ5T2Zmc2V0KTsKKyAg
ICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7CisgICAg
ICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRUb0dyYXBoKEdldFNldHRlciwgbG9hZGVk
VmFsdWUpOwogICAgICAgICAKQEAgLTI1NDUsNyArMjc4Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lz
dGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKICAgICAKICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9
IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIG9yaWdpbmFsQmFzZSwgSW1tZWRp
YXRlTmFrZWRTZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3Rlcisr
KSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KG5leHRSZWdpc3RlcisrKSwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAKICAgICAg
ICAgaGFuZGxlQ2FsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksOSBAQCB2b2lk
IENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAgICAgICAgICAgdHJh
Y2tlZFJlZmVyZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25z
dGFudCgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBmb3IgKEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMp
CisgICAgICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVm
ZXJlbmNlcyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxODczNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50LmgiCiAjaW5jbHVk
ZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05OCw2ICsx
MDAsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiB3ZWFrUmVm
ZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1
cmVSZWZlcmVuY2VzOwogICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IHdh
dGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IGFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsK
ICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRzOwogICAgIAogICAg
IFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMjEgKzI5NCwyMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleElu
QmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRl
IGJlZm9yZS4KICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0
IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4K
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYW50LnN0cnVjdHVyZVNldCgpLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJpYW50cy5sYXN0
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxhc3QoKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0
Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGdldENhc2Uuc2V0KCku
ZmlsdGVyKGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZXRDYXNlLnNldCgp
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5jYXNlc1tpLS1dID0g
ZGF0YS5jYXNlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLnJl
bW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAxKQorICAgICAgICAg
ICAgICAgIGlmIChkYXRhLmNhc2VzLnNpemUoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQo
Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBkYXRh
LnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIGVt
aXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGRhdGEuY2FzZXNbMF0ubWV0aG9kKCks
IGRhdGEuaWRlbnRpZmllck51bWJlcik7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNzQsOCArMzczLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7
IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uY29uc3RhbnRDaGVj
a3MoKS5pc0VtcHR5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1tpXS5hbHRl
cm5hdGVCYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uY29uZGl0
aW9uU2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
V2UgY291bGQgaGFuZGxlIHByb3RvdHlwZSBjYXNlcy4KICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzODYKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzkyLDcgKzM5MCwxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zm
c2V0RGF0YS5hZGQoKTsKLSAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cyA9IHN0YXR1cy52
YXJpYW50cygpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZh
cmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhLT5j
YXNlcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNldCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkKHZhcmlh
bnQub2Zmc2V0KCkpKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRhdGEt
PmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb011bHRpR2V0QnlPZmZzZXQoZGF0YSk7CiAgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CkBAIC00MzIsOSArNDM1LDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBhZGRD
aGVja3Mob3JpZ2luLCBpbmRleEluQmxvY2ssIHN0YXR1c1tpXS5jb25zdGFudENoZWNrcygpKTsK
KworICAgICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlvblNldCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0
dXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVF
bnN1cmVzVmFsaWRpdHkoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgbm9kZS0+b3JpZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRD
b25zdGFudEZvclVzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBub2RlLT5vcmlnaW4sIGNvbmRpdGlvbi5vYmplY3QoKSwgS25vd25DZWxsVXNlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGJh
c2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKQEAgLTUyOSw0MSArNTU0LDY4
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9Cisg
ICAgCisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2Rl
KiBub2RlLCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyKQorICAgIHsKKyAgICAgICAgLy8gV2hlbiB3ZSBnZXQgdG8gaGVyZSB3ZSBoYXZl
IGFscmVhZHkgZW1pdHRlZCBhbGwgb2YgdGhlIHJlcXVpc2l0ZSBjaGVja3MgZm9yIGV2ZXJ5dGhp
bmcuCisgICAgICAgIC8vIFNvLCB3ZSBqdXN0IG5lZWQgdG8gZW1pdCB3aGF0IHRoZSBtZXRob2Qg
b2JqZWN0IHRlbGxzIHVzIHRvIGVtaXQuCiAgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1ldGhv
ZC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3Rh
bnQ6CisgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1ldGhvZC5j
b25zdGFudCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0
KGluZGV4SW5CbG9jaywgbm9kZSwgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1iZXIsIG1l
dGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKKyAgICAgICAg
ICAgIE5vZGUqIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBub2RlLT5vcmlnaW4sIG1ldGhvZC5wcm90b3R5cGUoKSk7
CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoCisgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBub2RlLCBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpLCBpZGVudGlmaWVyTnVtYmVyLCBt
ZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IH0KKyAgICAg
ICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAog
ICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9k
ZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBHZXRCeUlkVmFyaWFudCYg
dmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKICAgICB7Ci0gICAgICAgIE5vZGVP
cmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5v
ZGUtPmNoaWxkMSgpOwogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUs
IGJhc2VWYWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAgICAgICBK
U1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
Ci0gICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2VWYWx1ZS5tX3ZhbHVlOwot
ICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eShiYXNlRm9yTG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkp
KSB7CisgICAgICAgIC8vIFdlIGFyZW4ndCBzZXQgdXAgdG8gaGFuZGxlIHByb3RvdHlwZSBzdHVm
Zi4KKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50LmNvbmRpdGlvblNl
dCgpLmlzRW1wdHkoKSk7CisKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRy
eUdldENvbnN0YW50UHJvcGVydHkoYmFzZVZhbHVlLm1fdmFsdWUsIHZhcmlhbnQuc3RydWN0dXJl
U2V0KCksIHZhcmlhbnQub2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRU
b0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSkgewotICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2luc2VydGlvblNldC5pbnNlcnRD
b25zdGFudChpbmRleEluQmxvY2ssIG9yaWdpbiwgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwot
ICAgICAgICAgICAgY2hpbGRFZGdlID0gRWRnZShjaGlsZCwgS25vd25DZWxsVXNlKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2Up
OworICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBjaGlsZEVkZ2Us
IGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIEVk
Z2UgY2hpbGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCisgICAgeworICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2Up
OwogICAgICAgICAKICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgIAotICAg
ICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hp
bGRFZGdlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVk
Z2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hpbGRFZGdlKSk7CisgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBub2RlLT5vcmln
aW4sIGNoaWxkRWRnZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7Ci0gICAg
ICAgIGRhdGEub2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsKKyAgICAgICAgZGF0YS5vZmZzZXQg
PSBvZmZzZXQ7CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1i
ZXI7CiAgICAgICAgIAogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBw
cm9wZXJ0eVN0b3JhZ2UpOwpAQCAtNjQzLDE1ICs2OTUsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLT5vcmlnaW4s
IG5vZGUtPmNoaWxkMSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRDaGVja3MoCi0gICAg
ICAgIE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNoZWNrcykKLSAgICB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjaGVja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5C
bG9jaywgY2hlY2tzW2ldLmNvbnN0YW50KCksIGNoZWNrc1tpXS5zdHJ1Y3R1cmUoKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhOb2Rl
T3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1
Y3R1cmUoY2VsbC0+c3RydWN0dXJlKCkpID09IFN0cnVjdHVyZVJlZ2lzdGVyZWRBbmRXYXRjaGVk
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICsz
NSw5IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgQXJyYXlCdWZm
ZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBDb21tb25EYXRhJiBj
b21tb24pCiB7CisgICAgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50
cy5hZGQoY29kZUJsb2NrKTsKICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQqIG5l
dXRlcmluZ1dhdGNocG9pbnQgPQogICAgICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9p
bnQ6OmNyZWF0ZSgqY29kZUJsb2NrLT52bSgpKTsKICAgICBuZXV0ZXJpbmdXYXRjaHBvaW50LT5z
ZXQoKS0+YWRkKHdhdGNocG9pbnQpOwpAQCAtNDUsMTAgKzQ2LDIzIEBAIHZvaWQgQXJyYXlCdWZm
ZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmEKIH0KIAogdm9pZCBJbmZlcnJlZFZhbHVlQWRhcHRv
cjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJl
ZFZhbHVlLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBDb21tb25EYXRhJiBjb21tb24pCiB7CiAg
ICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChpbmZlcnJlZFZhbHVlKTsgLy8gRm9yIGNvbW1vbiB1
c2VycywgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBvciBub3QuIElmIHJl
ZmVyZW5jZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgotICAgIGluZmVycmVkVmFs
dWUtPmFkZCh3YXRjaHBvaW50KTsKKyAgICBpbmZlcnJlZFZhbHVlLT5hZGQoY29tbW9uLndhdGNo
cG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnRBZGFwdG9yOjphZGQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3sKKyAgICBzd2l0
Y2ggKGtleS5raW5kKCkpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5j
ZToKKyAgICAgICAgY29tbW9uLmFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dHMuYWRkKGtleSwgY29kZUJsb2NrKS0+aW5zdGFsbCgpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBjb21tb24uYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cy5hZGQo
a2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAog
RGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KQEAgLTc0LDYgKzg4
LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSlNBcnIKICAgICBtX2J1
ZmZlclZpZXdzLmFkZExhemlseSh2aWV3KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERlc2lyZWRX
YXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYgKCFz
dHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC04OCw2ICsxMDcsNyBAQCB2b2lkIERlc2ly
ZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmxpbmVTZXRzLnJlYWxseUFk
ZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRk
KGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29k
ZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtOTUsNyArMTE1LDggQEAgYm9vbCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgIHJldHVybiBtX3NldHMuYXJlU3RpbGxWYWxp
ZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYg
bV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9idWZmZXJWaWV3
cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxp
ZCgpCisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODczNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5o
IgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmll
dy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0
Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKQEAgLTQxLDE1ICs0MiwxNSBA
QCBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0cnVjdCBHZW5lcmljU2V0
QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIFQgc2V0LCBXYXRjaHBv
aW50KiB3YXRjaHBvaW50KQorICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgVCBzZXQsIENvbW1vbkRhdGEmIGNvbW1vbikKICAgICB7Ci0gICAgICAgIHJldHVybiBzZXQt
PmFkZCh3YXRjaHBvaW50KTsKKyAgICAgICAgcmV0dXJuIHNldC0+YWRkKGNvbW1vbi53YXRjaHBv
aW50cy5hZGQoY29kZUJsb2NrKSk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZh
bGlkYXRlZChUIHNldCkgeyByZXR1cm4gc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsgfQogfTsK
IAogc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29k
ZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBh
ZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIENvbW1vbkRhdGEmKTsKICAgICBzdGF0aWMg
Ym9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBpbmZlcnJlZFZhbHVlLT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsK
QEAgLTU3LDEyICs1OCwxOCBAQCBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewogfTsKIAog
c3RydWN0IEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9p
ZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBXYXRjaHBvaW50Kik7CisgICAg
c3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgQ29tbW9uRGF0
YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChKU0FycmF5QnVmZmVyVmll
dyogdmlldykKICAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gIXZpZXctPmxlbmd0aCgpOwot
ICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuICF2aWV3LT5sZW5ndGgoKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVC
bG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgQ29tbW9uRGF0YSYpOworICAg
IHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFrZXkuaXNXYXRjaGFibGUoKTsKICAg
ICB9CiB9OwogCkBAIC04Nyw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fcmVhbGx5QWRkZWQpOwogICAgICAgICAKICAgICAgICAgZm9yIChhdXRvJiBzZXQgOiBt
X3NldHMpCi0gICAgICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbi53
YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CisgICAgICAgICAgICBBZGFwdG9yOjphZGQoY29k
ZUJsb2NrLCBzZXQsIGNvbW1vbik7CiAgICAgICAgIAogICAgICAgICBtX3JlYWxseUFkZGVkID0g
dHJ1ZTsKICAgICB9CkBAIC0xMjIsNiArMTI5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExh
emlseShJbmZlcnJlZFZhbHVlKik7CiAgICAgdm9pZCBhZGRMYXppbHkoSlNBcnJheUJ1ZmZlclZp
ZXcqKTsKICAgICAKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwg
dGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjp3YXRjaENvbmRpdGlvbigpLCB3aGljaCBkb2VzCisg
ICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwgYXMgc29tZSBvdGhlciBib29ra2Vl
cGluZy4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYp
OworICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCiAgICAgdm9pZCBy
ZWFsbHlBZGQoQ29kZUJsb2NrKiwgQ29tbW9uRGF0YSYpOwpAQCAtMTQ0LDEyICsxNTUsMTcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNXYXRjaGVkKHZp
ZXcpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRz
LmlzV2F0Y2hlZChrZXkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2ly
ZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAgIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5lU2V0czsKICAgICBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRv
cj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJy
YXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVy
Vmlld3M7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVj
dHVyZVNldHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
Y3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsMTQg
QEAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp+RGVzaXJlZFdlYWtSZWZlcgogCiB2b2lkIERlc2ly
ZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBtX3JlZmVy
ZW5jZXMuYWRkKGNlbGwpOworICAgIGlmIChjZWxsKQorICAgICAgICBtX3JlZmVyZW5jZXMuYWRk
KGNlbGwpOworfQorCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTVmFs
dWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhZGRMYXppbHko
dmFsdWUuYXNDZWxsKCkpOwogfQogCiBib29sIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6Y29udGFp
bnMoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IAogCiBjbGFzcyBDb2Rl
QmxvY2s7CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7
CiBjbGFzcyBWTTsKIApAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6CiAgICAgfkRlc2lyZWRXZWFr
UmVmZXJlbmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXppbHkoSlNDZWxsKik7CisgICAgdm9pZCBh
ZGRMYXppbHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsKICAgICAKICAg
ICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDggKzI1Nyw4
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBpZiAobm9k
ZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0
RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJz
KClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250ZXh0KSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNlc1tpXSwgY29udGV4dCkp
OwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKSkgewogICAg
ICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCk7CkBAIC04NDgsNiArODQ4LDMwIEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5v
ZGVzKE5vZGVGbGEKICAgICB9CiB9CiAKK2Jvb2wgR3JhcGg6OndhdGNoQ29uZGl0aW9uKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNXYXRjaGFi
bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFrUmVmZXJl
bmNlcy5hZGRMYXppbHkoa2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5Lmhhc1Byb3RvdHlwZSgp
KQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5wcm90b3R5cGUo
KSk7CisgICAgaWYgKGtleS5oYXNSZXF1aXJlZFZhbHVlKCkpCisgICAgICAgIG1fcGxhbi53ZWFr
UmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5LnJlcXVpcmVkVmFsdWUoKSk7CisgICAgCisgICAgbV9w
bGFuLndhdGNocG9pbnRzLmFkZExhemlseShrZXkpOworCisgICAgaWYgKGtleS5raW5kKCkgPT0g
UHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKQorICAgICAgICBtX3NhZmVUb0xvYWQuYWRkKHN0
ZDo6bWFrZV9wYWlyKGtleS5vYmplY3QoKSwga2V5Lm9mZnNldCgpKSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGg6OmlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFp
bnMoc3RkOjptYWtlX3BhaXIoYmFzZSwgb2Zmc2V0KSk7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVu
ZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFz
aE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6
aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkBAIC0x
MDIwLDggKzEwNDQsMTIgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShK
UwogSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJh
c2UsIGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewotICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXND
bG9iYmVyZWQoKSkKKyAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xv
YmJlcmVkKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IElmIHdlIGp1c3QgY29udmVydGVkIHRoZSBv
ZmZzZXQgdG8gYSB1aWQsIHdlIGNvdWxkIGRvIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uCisgICAg
ICAgIC8vIHdhdGNoaW5nIHRvIGNvbnN0YW50LWZvbGQgdGhlIHByb3BlcnR5LgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MjcxCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAgIAogICAgIHJldHVybiB0cnlHZXRDb25zdGFu
dFByb3BlcnR5KGJhc2UsIHN0cnVjdHVyZS5zZXQoKSwgb2Zmc2V0KTsKIH0KQEAgLTExNjcsMTcg
KzExOTUsOSBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIE11
bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+
bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IHNldC5zaXplKCk7IGotLTspCi0gICAgICAgICAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHNldFtqXSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBtYXJrIGFueXRoaW5nIGluIHRo
ZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxkCi0gICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVl
ZCB0byBtYXJrIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNh
dXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCi0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNlIDogbm9kZS0+bXVsdGlHZXRCeU9m
ZnNldERhdGEoKS5jYXNlcykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSog
c3RydWN0dXJlIDogZ2V0Q2FzZS5zZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc3RydWN0dXJlKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg3MzQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NjUsNiArNjY1LDE1IEBAIHB1YmxpYzoKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50
aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CiAgICAgRGVzaXJlZFdhdGNo
cG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQogICAg
IAorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGludmFsaWQgb3Ig
dW53YXRjaGFibGUuIElmIHRoaXMgaXMgYSBQcmVzZW5jZSBjb25kaXRpb24sCisgICAgLy8gdGhp
cyBhbHNvIG1ha2VzIGl0IGNoZWFwIHRvIHF1ZXJ5IGlmIHRoZSBjb25kaXRpb24gaG9sZHMuIEFs
c28gbWFrZXMgc3VyZSB0aGF0IHRoZSBHQyBrbm93cworICAgIC8vIHdoYXQncyBnb2luZyBvbi4K
KyAgICBib29sIHdhdGNoQ29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7
CisKKyAgICAvLyBDaGVja3MgaWYgaXQncyBrbm93biB0aGF0IGxvYWRpbmcgZnJvbSB0aGUgZ2l2
ZW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgZmluZS4gVGhpcyBpcworICAgIC8vIGNv
bXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENv
bmRpdGlvbigpLgorICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0
eU9mZnNldCk7CisgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENv
ZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVD
YWxsRnJhbWUqKTsKICAgICAKQEAgLTg0NCw2ICs4NTMsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9y
PElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1h
cDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5
dGVjb2RlTGl2ZW5lc3M7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVLaWxscz4+IG1fYnl0ZWNvZGVLaWxsczsKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxK
U09iamVjdCosIFByb3BlcnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOwogICAgIERvbWluYXRvcnMg
bV9kb21pbmF0b3JzOwogICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQb3N0TnVtYmVyaW5nOwog
ICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwg
IjoiKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAg
IG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChjb25zdGFudCgpLCBjb250ZXh0KSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludChvZmZzZXQo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBlOgorICAgICAg
ICBvdXQucHJpbnQob2Zmc2V0KCksICJAIiwgcG9pbnRlckR1bXBJbkNvbnRleHQocHJvdG90eXBl
KCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBHZXRCeU9m
ZnNldE1ldGhvZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNv
bnRleHQob3V0LCBudWxscHRyKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSwgIjoiLCBpbkNvbnRl
eHQobV9tZXRob2QsIGNvbnRleHQpKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBu
dWxscHRyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgR2V0QnlPZmZzZXRNZXRob2Q6OktpbmQga2luZCkKK3sKKyAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAg
ICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZToK
KyAgICAgICAgb3V0LnByaW50KCJMb2FkRnJvbVByb3RvdHlwZSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRh
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0
QnlPZmZzZXREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YV9oCisjZGVmaW5lIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdl
dEJ5T2Zmc2V0TWV0aG9kIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBJbnZh
bGlkLAorICAgICAgICBDb25zdGFudCwKKyAgICAgICAgTG9hZCwKKyAgICAgICAgTG9hZEZyb21Q
cm90b3R5cGUKKyAgICB9OworICAgIAorICAgIEdldEJ5T2Zmc2V0TWV0aG9kKCkKKyAgICAgICAg
OiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9m
ZnNldE1ldGhvZCBjb25zdGFudChGcm96ZW5WYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBH
ZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFu
dDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3RhbnQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWQoUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZDsKKyAgICAgICAgcmVzdWx0LnUubG9h
ZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBsb2FkRnJvbVByb3RvdHlwZShGcm96ZW5WYWx1
ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBHZXRC
eU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBMb2FkRnJvbVBy
b3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5wcm90b3R5cGUgPSBwcm90b3R5cGU7Cisg
ICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZCA9PSBJbnZhbGlkOyB9CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9CisgICAgCisgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gdS5j
b25zdGFudDsKKyAgICB9CisgICAgCisgICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAg
ICAgICAgcmV0dXJuIHUubG9hZC5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IExv
YWQgfHwga2luZCgpID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9h
ZC5vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIHVuaW9uIHsKKyAgICAgICAgRnJvemVuVmFsdWUqIGNv
bnN0YW50OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHByb3Rv
dHlwZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBsb2Fk
OworICAgIH0gdTsKKyAgICBLaW5kIG1fa2luZDsKK307CisKK2NsYXNzIE11bHRpR2V0QnlPZmZz
ZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNl
dCwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCkKKyAgICAgICAgOiBtX3NldChzZXQp
CisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3Ry
dWN0dXJlU2V0JiBzZXQoKSB7IHJldHVybiBtX3NldDsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25zdCBHZXRCeU9mZnNldE1l
dGhvZCYgbWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRob2Q7IH0KKyAgICAKKyAgICB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cnVjdHVyZVNl
dCBtX3NldDsKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBtX21ldGhvZDsKK307CisKK3N0cnVjdCBN
dWx0aUdldEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAg
ICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2VzOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpLaW5kKTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiREZH
Q29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXBvY2guaCIKICNpbmNsdWRlICJERkdMYXp5SlNWYWx1
ZS5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgiCiAjaW5jbHVkZSAiREZH
Tm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05v
ZGVUeXBlLmgiCkBAIC02NSwxMSArNjYsNiBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewog
ICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiB9OwogCi1zdHJ1Y3QgTXVsdGlHZXRCeU9m
ZnNldERhdGEgewotICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgVmVjdG9yPEdl
dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKLX07Ci0KIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0
RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKICAgICBWZWN0b3I8UHV0QnlJ
ZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsMTAg
KzMyOCwxOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAg
Y2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAg
IGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9k
ZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CisKKyAgICAgICAgaWYgKHN0YXRlLnN0cnVj
dHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkKSB7CisgICAgICAgICAg
ICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENv
bnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAgICAgICAgICAgICAgIGlmIChncmFwaC5pc1NhZmVU
b0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0
cnVjdHVyZTsKLSAgICAgICAgaWYgKHZhbHVlLmlzVG9wKCkpCisgICAgICAgIGlmICh2YWx1ZS5p
c1RvcCgpIHx8IHZhbHVlLmlzQ2xvYmJlcmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
KCkub2Zmc2V0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgIGlmICghdmFsdWVbaV0tPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDEsNDIgKzM0OSwyOCBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIAogICAgIGNhc2UgTXVs
dGlHZXRCeU9mZnNldDogewogICAgICAgICAvLyBXZSBjYW4ndCBhbHdheXMgZ3VhcmFudGVlIHRo
YXQgdGhlIE11bHRpR2V0QnlPZmZzZXQgaXMgc2FmZSB0byBleGVjdXRlIGlmIGl0Ci0gICAgICAg
IC8vIGNvbnRhaW5zIGxvYWRzIGZyb20gcHJvdG90eXBlcy4gV2Uga25vdyB0aGF0IGl0IHdvbid0
IGxvYWQgZnJvbSB0aG9zZSBwcm90b3R5cGVzIGlmCi0gICAgICAgIC8vIHdlIHdhdGNoIHRoZSBt
dXRhYmlsaXR5IG9mIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGxvYWRlZC4gU28sIGhlcmUgd2UgdHJ5
IHRvCi0gICAgICAgIC8vIGNvbnN0YW50LWZvbGQgcHJvdG90eXBlIGxvYWRzLCBhbmQgaWYgdGhh
dCBmYWlscywgd2UgY2xhaW0gdGhhdCB3ZSBjYW5ub3QgaG9pc3QuIFdlCi0gICAgICAgIC8vIGFs
c28ga25vdyB0aGF0IGEgbG9hZCBpcyBzYWZlIHRvIGV4ZWN1dGUgaWYgd2UgYXJlIHdhdGNoaW5n
IHRoZSBwcm90b3R5cGUncwotICAgICAgICAvLyBzdHJ1Y3R1cmUuCi0gICAgICAgIGZvciAoY29u
c3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIXZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBwcm90b3R5cGUgbG9hZC4KLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgSlNWYWx1ZSBiYXNlID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgICAgICBG
cm96ZW5WYWx1ZSogZnJvemVuID0gZ3JhcGguZnJlZXplKGJhc2UpOwotICAgICAgICAgICAgaWYg
KHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkCi0g
ICAgICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKQot
ICAgICAgICAgICAgICAgICYmIGZyb3plbi0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQodmFy
aWFudC5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHdhdGNo
aW5nIHRoYXQgaXQncyBzYWZlIHRvIGxvYWQgZnJvbSB0aGlzLgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVl
IGNvbnN0YW50UmVzdWx0ID0gZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAg
ICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCks
IHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewot
ICAgICAgICAgICAgICAgIC8vIENvdWxkbid0IGNvbnN0YW50LWZvbGQgYSBwcm90b3R5cGUgbG9h
ZC4gVGhlcmVmb3JlLCB3ZSBzaG91bGRuJ3QgaG9pc3QKLSAgICAgICAgICAgICAgICAvLyBiZWNh
dXNlIHRoZSBzYWZldHkgb2YgdGhlIGxvYWQgZGVwZW5kcyBvbiBzdHJ1Y3R1cmUgY2hlY2tzIG9u
IHRoZSBwcm90b3R5cGUsCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlJ3JlIHRvbyBjaGVhcCB0
byB2ZXJpZnkgdGhhdCBoZXJlLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgLy8gY29udGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5cGVzLiBJZiB0aGUgbG9hZCByZXF1aXJl
cyBhIGNoZWNrIGluIElSLCB3aGljaCBpcyByYXJlLCB0aGVuCisgICAgICAgIC8vIHdlIGN1cnJl
bnRseSBjbGFpbSB0aGF0IHdlIGRvbid0IGtub3cgaWYgaXQncyBzYWZlIHRvIGV4ZWN1dGUgYmVj
YXVzZSBmaW5kaW5nIHRoYXQKKyAgICAgICAgLy8gY2hlY2sgaW4gdGhlIGFic3RyYWN0IHN0YXRl
IHdvdWxkIGJlIGhhcmQuIElmIHRoZSBsb2FkIHJlcXVpcmVzIHdhdGNocG9pbnRzLCB3ZSBqdXN0
CisgICAgICAgIC8vIGNoZWNrIGlmIHdlJ3JlIG5vdCBpbiBhIGNsb2JiZXJlZCBzdGF0ZSAoaS5l
LiBpbiBiZXR3ZWVuIGEgc2lkZSBlZmZlY3QgYW5kIGFuCisgICAgICAgIC8vIGludmFsaWRhdGlv
biBwb2ludCkuCisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENh
c2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAgICAgICBH
ZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhvZCgpOworICAgICAgICAgICAg
c3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpDb25zdGFudDogLy8gT0sgYmVjYXVzZSBjb25zdGFudHMgYXJlIGFsd2F5cyBzYWZl
IHRvIGV4ZWN1dGUuCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOiAv
LyBPSyBiZWNhdXNlIHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGhhcyBpdHMgb3duIGNoZWNrcyBmb3Ig
bG9hZGluZyBmcm9tIHNlbGYuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgICAgICAg
ICAvLyBPbmx5IE9LIGlmIHRoZSBzdGF0ZSBpc24ndCBjbG9iYmVyZWQuIFRoYXQncyBhbG1vc3Qg
YWx3YXlzIHRoZSBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUoKSAhPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghZ3JhcGguaXNTYWZlVG9Mb2FkKG1l
dGhvZC5wcm90b3R5cGUoKS0+Y2FzdDxKU09iamVjdCo+KCksIG1ldGhvZC5vZmZzZXQoKSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3
ZSB3aWxsIGVpdGhlcjoKLSAgICAgICAgICAgIC8vIC0gTm90IGxvYWQgZnJvbSB0aGUgcHJvdG90
eXBlIGJlY2F1c2UgY29uc3RhbnQgZm9sZGluZyB3aWxsIHN1Y2NlZWQgaW4gdGhlCi0gICAgICAg
ICAgICAvLyAgIGJhY2tlbmQsIG9yCi0gICAgICAgICAgICAvLyAtIEVtaXQgaW52YWxpZCBjb2Rl
IHRoYXQgZmFpbHMgd2F0Y2hwb2ludCBjaGVja3MuIFRoaXMgY291bGQgaGFwcGVuIGlmIHRoZQot
ICAgICAgICAgICAgLy8gICBwcm9wZXJ0eSBiZWNvbWVzIG11dGFibGUgYWZ0ZXIgdGhpcyBwb2lu
dCwgc2luY2Ugd2UgYWxyZWFkeSBzZXQgdGhlIHdhdGNocG9pbnQKLSAgICAgICAgICAgIC8vICAg
YWJvdmUuIFRoaXMgY2FzZSBpcyBPSyBzaW5jZSB0aGUgY29kZSB3aWxsIGZhaWwgd2F0Y2hwb2lu
dCBjaGVja3MgYW5kIG5ldmVyCi0gICAgICAgICAgICAvLyAgIGdldCBpbnN0YWxsZWQuCiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNSAr
ODYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZXModmFyaWFu
dC5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVk
IHRvIHdhdGNoIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdv
dWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRv
IENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gd2F0Y2ggdGhlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0
aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZh
cmlhbnRzIGRpZCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50
LmNhbGxMaW5rU3RhdHVzKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVn
aXN0ZXJTdHJ1Y3R1cmVzKGdldENhc2Uuc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5
T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE4NzM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcwLDI0ICszODcw
LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYg
ZGF0YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKIAotICAgICAgICBpZiAoZGF0
YS52YXJpYW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGRhdGEuY2FzZXMuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rp
b24gd2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2UgdGhhdC4KICAgICAgICAgICAg
IHRlcm1pbmF0ZShCYWRDYWNoZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEudmFyaWFu
dHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXpl
KCk7IGktLTspCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBp
LS07KQogICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0
aUdldEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOwogICAgICAgICBMQmFzaWNCbG9jayBleGl0ID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGZhaWwiKSk7CiAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRC
eU9mZnNldCBjb250aW51YXRpb24iKSk7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8U3dpdGNo
Q2FzZSwgMj4gY2FzZXM7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpLnNpemUoKTsgai0tOykg
ewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFyaWFudC5zdHJ1Y3R1
cmVTZXQoKVtqXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRh
LmNhc2VzW2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZ2V0Q2FzZS5zZXQoKS5z
aXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZh
cmlhbnQuc2V0KClbal07CiAgICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0dXJlKTsK
ICAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlSUQo
c3RydWN0dXJlKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAgICAgICAgIH0KQEAgLTM4
OTgsMjkgKzM4OTgsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21C
bG9jaywgMj4gcmVzdWx0czsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2Ug
PSBkYXRhLmNhc2VzW2ldOworICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0g
Z2V0Q2FzZS5tZXRob2QoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAx
XSA6IGV4aXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgIGJhc2VTZXQubWVyZ2UodmFyaWFu
dC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAg
ICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdDsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0YW50UmVzdWx0ID0gbV9ncmFwaC50
cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbnN0YW50UmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50
UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0Q2Fz
ZTo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldENhc2U6OkNvbnN0YW50OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKG1ldGhvZC5jb25zdGFudCgpLT52YWx1
ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0Q2FzZTo6TG9hZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlP
ZmZzZXRDYXNlOjpMb2FkRnJvbVByb3RvdHlwZTogewogICAgICAgICAgICAgICAgIExWYWx1ZSBw
cm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcih2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zmc2V0Q2FzZTo6TG9hZCkKICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzSW5s
aW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIobWV0aG9kLnByb3RvdHlw
ZSgpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zm
c2V0KG1ldGhvZC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9
IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5KHByb3BlcnR5QmFzZSwgZGF0
YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRp
YyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQ
YXRoRnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0
cnVjdHVyZS0+bmVlZHNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0ucmVn
aXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwpAQCAtMTMyLDQ3ICsxMzIsMzAgQEAgc3RhdGljIHZvaWQgcmVw
YXRjaEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0g
ICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAg
IE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2Fz
ZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09
IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHVi
SW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmpl
Y3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKLSAgICAgICAgICAg
IC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgICAg
IGppdCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
aml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5lZmZlY3RpdmVXYXRjaHBvaW50KTsKLSAgICAg
ICAgICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KKyAgICBpZiAoY29uZGl0aW9uLmlzV2F0
Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICBjb25k
aXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHVi
SW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCks
IHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGJyYW5jaFN0
cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgICAgIGJyYW5j
aFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNyb0Fzc2Vt
YmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVn
IHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAgIAotICAgIGFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBw
cm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQs
Ci0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CitzdGF0aWMgdm9pZCBjaGVja09i
amVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGZvciAoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBjaGVja09iamVj
dFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQogfQogCiBzdGF0
aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFy
Z2V0KQpAQCAtMjk2LDExICsyNzksMTIgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihj
b25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIEV4ZWNTdGF0
ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
U3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgRnVuY3Rpb25QdHIgY3Vz
dG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0
KiB3YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29k
ZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1
YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVW
YWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworICAgIAogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3Mg
PSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzMyArMzMwLDI1IEBAIHN0YXRpYyBib29sIGdlbmVyYXRl
QnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5
RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJv
cGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCiAgICAgaWYg
KHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChzdHViSW5mby5hZGRX
YXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0g
c3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGlmIChjaGFp
bikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewot
ICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVy
ZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVj
dHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAg
ICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJv
cGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAg
ICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvT2Jq
ZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAg
ICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY3VyclN0
cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoIXByb3RvT2Jq
ZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKLSAgICB9
CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgIGNvbmRpdGlvblNl
dCwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwog
ICAgIAorICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICBpZiAoY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSkKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBlbHNl
CisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24o
KS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CiAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKKyAgICAKICAgICBHUFJSZWcg
YmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKGtpbmQgIT0gR2V0VW5k
ZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNj
cmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdl
dCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCiAgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7CkBAIC02MjcsOSAr
NjAzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNlbGwoVgogICAgICAg
ICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwogICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KLSAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgaWYgKHR5cGVJbmZvLmhhc0ltcHVy
ZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVz
V2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIHJldHVybiBB
dHRlbXB0VG9DYWNoZTsKQEAgLTgyNywyMSArODAyLDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICB9CiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwot
ICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgc2l6ZV90IGNvdW50
ID0gMDsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
CiAgICAgCiAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNl
VmFsdWUpIHsKICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
IHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKIAogICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICBjb3Vu
dCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoZXhlYywg
c3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb3Vu
dCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoCi0gICAgICAgICAgICAg
ICAgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LCBvZmZzZXQpOwotICAg
ICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoZXhl
Yywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgIAor
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0
LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0dWJJ
bmZvKTsKQEAgLTg1Miw3ICs4MjgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVp
bGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsK
ICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtpbmRG
b3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFp
biwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBj
dXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9mZnNldCwgCiAgICAgICAg
IHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAog
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0
LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAtODcx
LDcgKzg0Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAg
ICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0
dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAgY29uZGl0aW9u
U2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYgKzk2OSwyOCBAQCBzdGF0
aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShFeGVj
U3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29sIGVtaXRQdXRU
cmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYg
c3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2lu
ZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5T2Zmc2V0
IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwg
IXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFz
dHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAgb3B0aW1pemlu
ZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAg
IC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYgKEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYm
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNraXAgb3B0aW1p
emluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhh
cwpAQCAtMTAyMCwxNCArOTk4LDEzIEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0
aW9uU3R1YkEKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50
IGl0IQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5
MTQKICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihl
eGVjLCBzdHJ1Y3R1cmUpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1
cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAv
LyBlbWl0UHV0VHJhbnNpdGlvblN0dWIKKyAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsK
KyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0
ZXJNaXNzKGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAog
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
OwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1
YlJvdXRpbmU7CkBAIC0xMDgzLDE3ICsxMDYwLDggQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1
dFRyYW5zaXRpb25TdHViQQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKICAgICAgICAgb2xkU3RydWN0dXJlKSk7
CiAgICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICBvbGRTdHJ1
Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0
dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAg
Ci0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7
Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8s
IHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAg
ICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBm
YWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93UGF0aDsKICAgICAKQEAgLTEyMjgsNyArMTE5Niw3IEBAIHN0YXRpYyBTdHJ1Y3R1cmUq
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIu
bGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJl
dXNlUmVnaXN0ZXJzKCkpCkBAIC0xMjU2LDggKzEyMjQsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBl
bWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3du
ZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAgICAgICAgc3Ry
dWN0dXJlKTsKLQotICAgIHJldHVybiBvbGRTdHJ1Y3R1cmU7CisgICAgCisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTI4MSwxMiArMTI0OSwx
MSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKICAgICAg
ICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKIAot
ICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0
dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0
dWJJbmZvLCBwdXRLaW5kKTsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKQorICAgICAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJh
bnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBw
dXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0g
ICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTEyOTQsNyAr
MTI2MSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZv
LmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJl
Y3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEyLDIwICsxMjc5LDIyIEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgJiYgc3R1
YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90
b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNl
VmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJv
dG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBp
ZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBl
Q2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
KyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkg
IT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICBleGVjLCBzdHJ1
Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWlu
KGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBv
ZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJ
ZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9y
KHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LAorICAgICAgICAgICAgZXhl
Yywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRp
dGlvblNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwK
ICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKSwKQEAgLTEzMzYsNyArMTMwNSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNl
dHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAg
ICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRl
ciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwg
cHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkp
OworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVy
KCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1w
KSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTEz
ODAsMTcgKzEzNDksMTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJ
ZAogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCiAKLSAg
ICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25TdHVi
QW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xv
dCwgc3R1YkluZm8sIHB1dEtpbmQpOwotCi0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkg
CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICghZW1p
dFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xv
dCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICAgICAgU3RydWN0dXJl
Q2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsK
ICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CiAgICAgICAg
ICAgICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJh
bnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJv
dG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJl
LCBjb25kaXRpb25TZXQsCiAgICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7CiAKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTE0MjMsMjEgKzEzOTEsMjQgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
IHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2gu
c3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lOwotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAw
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwot
ICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3Qu
YmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9y
Q2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgcHJvcGVydHlOYW1lLCBv
ZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikK
KyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNl
KCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAg
ICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAg
ICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUu
aW1wbCgpKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIHByb3RvdHlwZUNo
YWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAgfQorICAgICAg
ICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQo
KTsKICAgICAgICAgCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAg
ICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZv
KTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAg
ICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1
YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9u
U2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKQEAgLTE0NDgsNyArMTQxOSw3IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAgbGlzdC0+YWRk
QWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIo
KSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwK
LSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3Rv
bVNldHRlcigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRp
b25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKQEAgLTE0ODcsMTEgKzE0NTgsMTUgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgqdm0pOwogICAgIAotICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgSlNWYWx1ZSBmb3VuZFNsb3RCYXNlID0g
d2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCk7Ci0gICAgc2l6ZV90IGNvdW50
ID0gIWZvdW5kU2xvdEJhc2UgfHwgZm91bmRTbG90QmFzZSAhPSBiYXNlID8gCi0gICAgICAgIG5v
cm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBmb3Vu
ZFNsb3RCYXNlLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgOiAwOwotICAgIGlmIChjb3VudCA9PSBJ
bnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0OworICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICBpZiAoc2xvdC5zbG90QmFz
ZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVj
dHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICB9CisgICAgfSBl
bHNlCisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
TWlzcyhleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgaWYgKCFjb25kaXRpb25T
ZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKICAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsK
QEAgLTE1MTYsNyArMTQ5MSw2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNo
SW4oCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICB9CiAgICAgCi0gICAg
U3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsK
ICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIAogICAgIHsKQEAg
LTE1NDcsMTggKzE1MjEsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaElu
KAogICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50U2V0KCkpCiAgICAgICAgICAgICBzbG90Lndh
dGNocG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAK
LSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAgSlNP
YmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxv
b2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0gcHJv
dG90eXBlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvU3RydWN0dXJlLCBleGVjLT5j
b2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFpbHVyZUNh
c2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUlu
Zm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAg
ICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0dWJJbmZv
LmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0g
aXQtPmdldCgpOwotICAgICAgICB9CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRp
b25zKAorICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvaygpLCBzdHViSW5m
bywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hh
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSlND
SW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCi0jaW5jbHVkZSA8d3RmL0Nv
bW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAg
ICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKLXsKLSAgICBBU1NFUlQobV9wcm90b3R5cGUuaXNO
dWxsKCkgfHwgbV9wcm90b3R5cGUuaXNPYmplY3QoKSk7Ci0gICAgaWYgKHByb3RvdHlwZS5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gYXNP
YmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1
cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZCkKLSAgICA6
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnBy
b3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgaWYgKG1fcHJvdG90eXBl
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQg
PSBhc09iamVjdChtX3Byb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCi0gICAgICAgIG1fdmVjdG9yLmFw
cGVuZChjdXJyZW50KTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1
cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29r
dXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIG1fdmVjdG9yLmFwcGVuZChwcm90b3R5cGVTdHJ1
Y3R1cmUpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbikKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
Ci0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmpl
Y3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGNoYWluLT5oZWFkKClbaV07ICsraSkK
LSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1J
bnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWdu
ZWQgY291bnQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2Jq
ZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAg
ICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpCi17Ci19Ci0KLWJvb2wg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKLXsKLSAgICBKU1Zh
bHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3RvdHlwZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGFzT2JqZWN0KGN1
cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAhPSBtX3ZlY3RvcltpXSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IG1fdmVjdG9yW2ldLT5z
dG9yZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pIGNvbnN0
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBjaGFpbi0+aGVhZCgpW2ldLmdldCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoY2hhaW4tPmhlYWQoKVttX3Zl
Y3Rvci5zaXplKCldKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Zl
Y3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHVp
ZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwg
QWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJl
Q2hhaW46OmlzTm9ybWFsaXplZCgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
dmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92
ZWN0b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVBy
b3BlcnR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LUpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW5hbFByb3RvdHlwZSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rvci5pc0VtcHR5KCkpOwotICAgIGlmIChtX3ZlY3Rv
ci5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGFzT2JqZWN0KG1fcHJvdG90eXBlKTsKLSAg
ICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0b3JlZFBy
b3RvdHlwZSgpKTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpvcGVyYXRvcj09
KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotewotICAgIHJldHVy
biBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2dsb2JhbE9iamVjdAotICAgICAgICAmJiBtX3By
b3RvdHlwZSA9PSBvdGhlci5tX3Byb3RvdHlwZQotICAgICAgICAmJiBtX3ZlY3RvciA9PSBvdGhl
ci5tX3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpnYXRoZXJDaGVj
a3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKSBjb25zdAotewotICAgIEpT
VmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBKU09iamVjdCogY3VycmVudE9iamVj
dCA9IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJl
bnRTdHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAgICAgdmVjdG9yLmFwcGVuZChDb25zdGFudFN0cnVj
dHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRTdHJ1Y3R1cmUpKTsKLSAgICAgICAgY3Vy
cmVudFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2ds
b2JhbE9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFsT2JqZWN0KTsKLSAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkVmFsdWUoJm1fcHJvdG90eXBlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Zl
Y3Rvci5zaXplKCk7IGktLTspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2lu
dGVyKCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsK
LX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgK
LSAgICAgICAgIihnbG9iYWwgPSAiLCBSYXdQb2ludGVyKG1fZ2xvYmFsT2JqZWN0KSwgIiwgaGVh
ZCA9ICIsCi0gICAgICAgIGluQ29udGV4dChtX3Byb3RvdHlwZSwgY29udGV4dCksICIsIHZlY3Rv
ciA9IFsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBv
aW50ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9yW2ldLCBjb250ZXh0KSk7Ci0gICAgb3V0LnByaW50
KCJdKSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2
aXNpb24gMTg3MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZpbmUgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCi0K
LSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
LmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJlQ2hh
aW47Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1wQ29udGV4dDsKLQotY2xhc3MgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHsK
LXB1YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSopOwotICAgIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3Ry
dWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4o
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQpOwot
ICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7Ci0gICAgCi0gICAgYm9vbCBpc1N0aWxsVmFs
aWQoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoU3RydWN0dXJlQ2hhaW4qKSBjb25zdDsKLSAg
ICBib29sIG1heUludGVyY2VwdFN0b3JlVG8oVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAg
Ym9vbCBpc05vcm1hbGl6ZWQoKTsKLSAgICAKLSAgICBib29sIHRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCk7Ci0gICAgCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdCB7
IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAgIAotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0gICAgU3RydWN0dXJlKiBhdChzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsgfQotICAgIFN0cnVjdHVyZSogb3BlcmF0
b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgIAotICAg
IEpTT2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVy
ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmxhc3QoKTsgfQotICAgIAotICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluJikgY29uc3Q7Ci0gICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJikgY29u
c3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgSlNHbG9i
YWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotICAgIEpTVmFsdWUgbV9wcm90b3R5cGU7Ci0gICAg
VmVjdG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxODczNDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTQsNyArMTk0LDE5IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0g
Tm9uZURpY3Rpb25hcnlLaW5kOyB9CiAgICAgYm9vbCBpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
IGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgPT0gVW5jYWNoZWREaWN0aW9uYXJ5S2lu
ZDsgfQogICAKLSAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB7IHJldHVy
biBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQgJiYgIXR5cGVJbmZv
KCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCk7IH0KKyAgICBib29sIHByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkg
IT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZAorICAgICAgICAgICAgJiYgIXR5cGVJbmZvKCkucHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nKCkKKyAgICAgICAgICAgICYmICEodHlwZUluZm8oKS5oYXNJ
bXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0
eUZpcmVzV2F0Y2hwb2ludHMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpCisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpCisgICAgICAgICAgICAmJiB0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93
blByb3BlcnR5U2xvdCgpCisgICAgICAgICAgICAmJiB0eXBlSW5mbygpLm5ld0ltcHVyZVByb3Bl
cnR5RmlyZXNXYXRjaHBvaW50cygpOworICAgIH0KIAogICAgIC8vIFdlIHVzZSBTbG93UGF0aCBp
biBHZXRCeUlkU3RhdHVzIGZvciBzdHJ1Y3R1cmVzIHRoYXQgbWF5IGdldCBuZXcgaW1wdXJlIHBy
b3BlcnRpZXMgbGF0ZXIgdG8gcHJldmVudAogICAgIC8vIERGRyBmcm9tIGlubGluaW5nIHByb3Bl
cnR5IGFjY2Vzc2VzIHNpbmNlIHN0cnVjdHVyZXMgZG9uJ3QgdHJhbnNpdGlvbiB3aGVuIGEgbmV3
IGltcHVyZSBwcm9wZXJ0eSBhcHBlYXJzLgpAQCAtMjAyLDcgKzIxNCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiB0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xv
dCgpOwogICAgIH0KLQorICAgIAogICAgIC8vIFR5cGUgYWNjZXNzb3JzLgogICAgIFR5cGVJbmZv
IHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGlu
Zm8oKSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAg
ICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODczNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MzYsNiArNTM2LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2Fy
ZEFsbENvZGUoKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVy
dHkoY29uc3QgSWRlbnRpZmllciYsIFdhdGNocG9pbnQqKTsKKyAgICAKICAgICAvLyBGSVhNRTog
VXNlIEF0b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlmaWVyLgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgU3RyaW5nJik7
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257694</attachid>
            <date>2015-07-28 15:30:08 -0700</date>
            <delta_ts>2015-07-28 17:32:42 -0700</delta_ts>
            <desc>OMG it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>255953</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yOTMsOCArMjk1LDYgQEAKIAkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCN0UyQTE5QTExQjgwMDBE
OUJDNTYgLyogQ2FsbFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNw
cCAqLzsgfTsKIAkJMEYzQjdFMkIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNTE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVjay5jcHAgKi87IH07Ci0JCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0Uw
MUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2
MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4OCw2ICs1ODgsMTQgQEAKIAkJMEZEMkM5MjQx
NkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9
OworCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRkQzRTQwMjFCNjE4QUFG
MDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMDFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZEM0U0MDkxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDAzMUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBG
RDNFNDBBMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDQxQjYxOEI2
NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi87IH07CisJCTBGRDNFNDBDMUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5
Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87
IH07CisJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDgxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8q
IERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICov
OyB9OwogCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9
OwpAQCAtNjk0LDYgKzcwMiw4IEBACiAJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdF
ZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjRCNTFCMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdFZGdlLmNwcCAqLzsgfTsKIAkJMEZGMEYxOUYx
NkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjExNkI2Mjc4RDAwM0Y2
OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwICovOyB9OwogCQkwRkYwRjFBMDE2Qjcy
QTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8q
IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcCAqLzsgfTsKKwkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0
QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY0
MjczMTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyog
RGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjcz
MDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZG
NDI3NDAxNThFQkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAv
KiB1ZGlzODZfZGVjb2RlLmMgKi87IH07CkBAIC0xMzg5LDggKzEzOTksNiBAQAogCQlBNzg0QTI2
NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5
bnRheENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFG
NkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYgLyogU3BpbGxSZWdpc3RlcnNNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZGNjQ3
QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0
MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwotCQlBNzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzhBOTc3NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZD
MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovOyB9OwogCQlBNzhB
OTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RDE3OTczOEI4MDA5REY3
NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi87IH07CiAJCUE3OEE5Nzc2MTc5NzM4QjgwMDlE
Rjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5j
cHAgKi87IH07CkBAIC0xODU3LDYgKzE4NjUsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhE
RTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVG
MTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGgu
Y3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
OEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8q
IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9m
aWxlckpldHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
OTBDQUIxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMDQyLDggKzIwNTIsNiBAQAogCQkwRjNCM0EyQTE1NDc0RkY0MDAz
RUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHVmFsaWRhdGUuaDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyog
Q2FsbFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFZhcmlh
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5
Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcv
REZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
M0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRm
Zy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIzNDgsNiArMjM1NiwxNCBAQAogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIw
MTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyog
REZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5o
OyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcv
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDMxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA1MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA2MUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlDb25k
aXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwODFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBh
dGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRG9taW5hdG9ycy5jcHA7IHBhdGgg
PSBkZmcvREZHRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0
b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQ5LDYgKzI0NjUsOCBAQAog
CQkwRkVGQzlBODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJs
ZUFsbG9jYXRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enou
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25G
dXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5
NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHBhdGggPSBkZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc2Fzc2VtYmxlci5oOyBwYXRoID0g
ZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY0MjczMDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHA7
IHBhdGggPSBkaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNv
ZGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdWRpczg2X2RlY29kZS5jOyBw
YXRoID0gZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZGlzODZfZGVjb2RlLmM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMTY5LDggKzMxODcsNiBAQAogCQlBNzdGMTgyMDE2NDA4OEIyMDA2
NDBBNDcgLyogQ29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
ZGVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgyNDE2NDE5MjU0
MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8q
IE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5
REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVk
RmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRG
aW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTAxLDggKzQ1MTcsNiBAQAogCQkJCUE3
QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3
QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCi0JCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0
IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAotCQkJCUE3ODg1M0Y4MTc5NzI2Mjkw
MDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5
NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUx
OTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJQTEyQkJGRjMxQjA0
NEE5ODAwNjY0QjY5IC8qIEludGxPYmplY3QuY3BwICovLApAQCAtNDg4OSw2ICs0OTAzLDEwIEBA
CiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0
VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFZhbHVlLmggKi8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZEM0U0MDAxQjYx
OEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dC5oICovLAorCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1
MzMgLyogREZHQW5hbHlzaXMuaCAqLywKQEAgLTUwNDgsNiArNTA2Niw4IEBACiAJCQkJMEYyQkRD
M0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAogCQkJCTBGOEYxNDMx
MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLywKIAkJCQkw
RjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oICovLAor
CQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5j
cHAgKi8sCisJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmggKi8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9t
aW5hdG9ycy5jcHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1
cmFsTG9vcHMuY3BwICovLApAQCAtNTMxOSw4ICs1MzM5LDYgQEAKIAkJCQkwRjBCODNBNTE0QkNG
NTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQw
MkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY2RkM3NEYxOTYxMTBBODAwRTFE
MDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8sCi0JCQkJMEYzRDBCQkIxOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLywKIAkJCQkwRjQyNkE0QTE0
NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAogCQkJCTBGQzcxMkRDMTdDRDg3Nzgw
MDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAogCQkJCTBGQzcx
MkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywK
QEAgLTUzNTMsNiArNTM3MSwxMCBAQAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0RjVDN0Q0
MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJCTE0Q0E5
NThDMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJ
CTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAg
Ki8sCisJCQkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmggKi8sCisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5NjlBMDc5NDBFRDFEM0FFMDBGMUY2
ODEgLyogT3Bjb2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8s
CkBAIC01MzY0LDYgKzUzODYsOCBAQAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAy
IC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQw
RDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4
MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDgxQjYxOEI2NjAw
QzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1
RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKQEAgLTU4NzQsNiArNTg5OCw3IEBACiAJCQkJQzI5
ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0Rv
bWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAv
KiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JC
OTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MTI2LDYgKzYxNTEsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21i
aW5lZERvbWFpbnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzg4MTg1NjgzMzUwMDJF
RDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIw
MEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQz
OEMxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTM1LDcgKzYxNjEsNiBAQAogCQkJCUE3QThBRjNC
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4
QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyog
SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIy
RiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0OCw2ICs2MTczLDcgQEAKIAkJ
CQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzYyLDcgKzYzODgsNiBAQAogCQkJCUJDMThDNDNDMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0Uz
RTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAwOENFNzE4NzYzMUI2
MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIx
M0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5
MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjQ0NSw5ICs2NDcwLDExIEBACiAJCQkJMkFBRDk2NEExODU2OTQxNzAwMUY5M0JF
IC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBB
QzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBS
ZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8q
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4
cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTI0LDYgKzY1NTEsNyBAQAog
CQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBDMUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzE1LDYgKzczNDMs
NyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNC
MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0
IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMjUsNiArNzM1NCw3
IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1
NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTczNzYsNiArNzQwNiw3IEBACiAJCQkJQTVDRUVFMTQxODdG
M0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwMTFCNjE4
QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUY3MzgyQzE4
QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzM4Niw3ICs3NDE3LDYgQEAKIAkJCQlBNTMyNDM4QjE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3Rv
clZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
RjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0MDMsNiArNzQzMyw3IEBACiAJCQkJQkNERDUxRUIw
RkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcx
MjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0QzE3RUUy
NzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkND
ODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDU4LDcgKzc0ODksNiBAQAogCQkJCUE1MDNGQTFC
MTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAxM0U3
QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0QwQkJDMTk0QTQxNDMwMEZD
OUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
NUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUE3MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2NTEsNiArNzY4MSw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMyRDAw
MTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBFQkI3
QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJG
MEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMg
LyogSlNKb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzY2MCw2ICs3NjkxLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3
MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4
MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQw
MTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTEx
ODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IDA7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0g
MDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBl
KSB7CkBAIC0zNzAsMTEgKzM2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByb3RvdHlwZVN0
cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
LCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CkBAIC0z
ODIsOSArMzc2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAog
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiKCIpOwogICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJl
KG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGR1bXBDaGFpbihvdXQsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTQ1NiwxMCArNDUwLDggQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAicHJldiIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUu
Z2V0KCksIGlkZW50KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAgICAg
ICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAg
ICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCJsaXN0ID0gWyIpOwpAQCAtNDgzLDEwICs0NzUsOCBAQCB2b2lkIENvZGVCbG9jazo6
cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRl
bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGFjY2Vzcy5jaGFpbigpLCBpZGVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vz
cy5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsICIsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJ1bmtub3duIik7
CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw5ICszOCw2IEBAIHZvaWQgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXIKICAg
ICAgICAgZGF0YUxvZygiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiBv
biAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogCiAgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6
YXRpb24sICZkZXRhaWwpOwotCi0gICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgIHJlbW92ZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzQ4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvbXBsZXhH
ZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAotICAgIHVuc2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisg
ICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQK
ICAgICAvLyBoYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRv
bid0CkBAIC00MCwzMiArMzksMjYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdQogICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpOworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5E
RkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwog
ICAgIAogICAgIENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJ
bmxpbmVhYmxlOwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAg
IHJlc3VsdC5tX2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0g
ICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3Vu
dCkpOworICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQu
bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJl
c3VsdC5tX2NoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25k
aXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
c2tpcCgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWlu
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIHRha2VzU2xvd1BhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50
T2JqZWN0ID0gcmVzdWx0Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0
cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAg
ICAgIAotICAgICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3Qp
OworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0
aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0
Lm1fYXR0cmlidXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
aGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7
Ci0gICAgfQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0g
ZWxzZQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3
NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVz
X2gKICNkZWZpbmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3Rh
dHVzKCkKICAgICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChp
bnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAg
ICAgfQogICAgIApAQCAtOTcsMjEgKzk2LDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
c3RhdGljIENvbXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CisgICAgICAgIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0gICAgSlNWYWx1ZSBzcGVjaWZpY1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7
CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVz
OwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2su
Y3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihDaGVjayBpZiAi
LCBpbkNvbnRleHQoSlNWYWx1ZShtX2NvbnN0YW50KSwgY29udGV4dCksICIgaGFzIHN0cnVjdHVy
ZSAiLAotICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCks
ICIpIik7Ci19Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQot
U3RydWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgdmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IHZl
Y3Rvci5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHZlY3RvcltpXS5jb25zdGFudCgpID09
IGNvbnN0YW50KQotICAgICAgICAgICAgcmV0dXJuIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgYXJlQ29tcGF0aWJsZShjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBhLCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrVmVjdG9yJiBiKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IGEuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogb3RoZXJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IoYiwgYVtp
XS5jb25zdGFudCgpKTsKLSAgICAgICAgaWYgKCFvdGhlclN0cnVjdHVyZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYVtpXS5zdHJ1Y3R1cmUoKSAhPSBvdGhlclN0cnVjdHVy
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNv
dXJjZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KQotewotICAgIGZvciAo
dW5zaWduZWQgaSA9IHNvdXJjZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZUZvcih0YXJnZXQsIHNvdXJjZVtpXS5jb25zdGFudCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB0YXJnZXQuYXBwZW5kKHNvdXJjZVtpXSk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0
YW50U3RydWN0dXJlQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLSNk
ZWZpbmUgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KLSNpbmNsdWRlICJEdW1wQ29udGV4dC5o
IgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIENvbnN0YW50U3RydWN0dXJlQ2hlY2sgewotcHVibGljOgotICAgIENv
bnN0YW50U3RydWN0dXJlQ2hlY2soKQotICAgICAgICA6IG1fY29uc3RhbnQobnVsbHB0cikKLSAg
ICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIGNvbnN0YW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICAgICAgOiBtX2NvbnN0YW50KGNvbnN0YW50KQotICAgICAgICAsIG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghIW1fY29uc3RhbnQgPT0gISFtX3N0
cnVjdHVyZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fY29uc3RhbnQ7IH0KLSAgICAKLSAgICBKU0NlbGwqIGNvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudDsgfQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KLSAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0NlbGwqIG1fY29uc3RhbnQ7Ci0gICAgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPENvbnN0YW50U3RydWN0
dXJlQ2hlY2ssIDI+IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3I7Ci0KLVN0cnVjdHVyZSog
c3RydWN0dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3Rvciwg
SlNDZWxsKiBjb25zdGFudCk7Ci1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVja1ZlY3RvciYsIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsK
LXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNvdXJj
ZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OSw4ICsxNjksNyBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0KGxpc3RJbmRleCkuc3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENv
bXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0gICAgICAgICAgICAg
ICAgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbkNvdW50KCksIHVpZCk7CisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQo
KSkgewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAt
MjA2LDggKzIwNSw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdl
dEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCi0gICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwor
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25k
aXRpb25TZXQoKSwgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRy
dWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw5ICszNCwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KAogICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
Ci0gICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQogICAgIDogbV9zdHJ1Y3R1cmVTZXQoc3RydWN0dXJl
U2V0KQotICAgICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCisgICAgLCBtX2NvbmRpdGlvblNl
dChjb25kaXRpb25TZXQpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5r
U3RhdHVzKFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpCiB7CkBAIC00NCwxMyArNDUsOCBAQCBH
ZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgICAgIEFTU0VSVChvZmZzZXQgPT0g
aW52YWxpZE9mZnNldCk7CiAgICAgICAgIEFTU0VSVCghY2hhaW4pOwogICAgIH0KLSAgICAKLSAg
ICBpZiAoY2hhaW4gJiYgY2hhaW4tPnNpemUoKSkgewotICAgICAgICBtX2FsdGVybmF0ZUJhc2Ug
PSBjaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNr
cyhtX2NvbnN0YW50Q2hlY2tzKTsKLSAgICB9CiB9Ci0KKyAgICAgICAgICAgICAgICAgICAgIAog
R2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlkVmFyaWFudCgpIHsgfQogCiBHZXRCeUlkVmFyaWFudDo6
R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQpAQCAtNjIsOCArNTgs
NyBAQCBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0CiBHZXRCeUlkVmFy
aWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3Ro
ZXIpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQgPSBvdGhlci5tX3N0cnVjdHVyZVNldDsKLSAgICBt
X2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFudENoZWNrczsKLSAgICBtX2FsdGVybmF0
ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhl
ci5tX2NvbmRpdGlvblNldDsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlm
IChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3Rk
OjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpA
QCAtNzIsMjggKzY3LDE5IEBAIEdldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0
b3IKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVN0cnVjdHVyZVNldCBHZXRCeUlkVmFyaWFudDo6
YmFzZVN0cnVjdHVyZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAg
IFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKLX0KLQog
Ym9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZhcmlhbnQm
IG90aGVyKQogewotICAgIGlmIChtX2FsdGVybmF0ZUJhc2UgIT0gb3RoZXIubV9hbHRlcm5hdGVC
YXNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1f
b2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMg
fHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghYXJlQ29tcGF0aWJsZShtX2NvbnN0YW50Q2hlY2tzLCBvdGhlci5tX2NvbnN0YW50Q2hlY2tz
KSkKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25T
ZXQgPQorICAgICAgICBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9u
U2V0KTsKKyAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKLSAgICBtZXJnZUludG8ob3RoZXIubV9jb25zdGFudENoZWNrcywg
bV9jb25zdGFudENoZWNrcyk7CisgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25T
ZXQ7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOwogICAg
IAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEyLDEwICs5OCw3IEBAIHZvaWQgR2V0QnlJZFZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KAotICAg
ICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsCi0gICAg
ICAgICJbIiwgbGlzdER1bXBJbkNvbnRleHQobV9jb25zdGFudENoZWNrcywgY29udGV4dCksICJd
Iik7Ci0gICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgb3V0LnByaW50KCIsIGFsdGVy
bmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0
KSk7CisgICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwg
IiwgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSk7CiAgICAgb3V0LnByaW50KCIs
IG9mZnNldCA9ICIsIG9mZnNldCgpKTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKICAgICAg
ICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNp
b24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDkgKzI3LDggQEAKICNkZWZpbmUgR2V0QnlJZFZhcmlh
bnRfaAogCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0
LmgiCiAKQEAgLTQzLDcgKzQyLDcgQEAgY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogcHVibGljOgog
ICAgIEdldEJ5SWRWYXJpYW50KAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zm
c2V0LAotICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxw
dHIsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAKICAgICB+R2V0QnlJZFZhcmlh
bnQoKTsKQEAgLTU1LDkgKzU0LDEwIEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQogICAgIFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KLSAgICBjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRDaGVja3M7IH0KLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRlQmFzZTsgfQotICAgIFN0cnVjdHVyZVNldCBiYXNlU3Ry
dWN0dXJlKCkgY29uc3Q7CisKKyAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgYSBjb25kaXRpb24gc2V0
IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3RvdHlwZSBsb2FkLgorICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRp
dGlvblNldDsgfQorICAgIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29u
c3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAtNzAsOCArNzAs
NyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHZXRCeUlkU3RhdHVzOwogICAgIAogICAg
IFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9w
ZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
Kwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7
CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgb3V0LnByaW50KGluQ29udGV4dChKU1ZhbHVlKG1fb2JqZWN0KSwgY29udGV4
dCksICI6ICIsIGluQ29udGV4dChtX2NvbmRpdGlvbiwgY29udGV4dCkpOworfQorCit2b2lkIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0
dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25z
dAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24udmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgcmV0dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJl
dHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBtX29iamVjdCk7Cit9CisK
K2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBp
c1N0aWxsVmFsaWQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSogc3RydWN0
dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0
dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShtX29iamVjdC0+
c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNo
YWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIG1fb2JqZWN0LCBlZmZvcnQpOworfQorCitib29s
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQg
ZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludChtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
cm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGUoc3RydWN0dXJlLCBtX29iamVjdCwgZWZm
b3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoUHJv
cGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAg
aWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dh
dGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCht
X29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9jb25k
aXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkKSBjb25z
dAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0cmFja2Vk
LmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52YWxpZGF0ZVJlZmVyZW5jZXModHJh
Y2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRS
ZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6Cisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0
cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAgICB7CisgICAgfQorICAgIAorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5
Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAg
ICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAg
ICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsK
KyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OnByZXNlbmNl
V2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOyAKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmpl
Y3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJy
aWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0
LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0g
UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90
b3R5cGUpCisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAg
ICAgIHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNl
T2ZTZXR0ZXJXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0g
b2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6
YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpT
T2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5
cGUpCisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAg
IHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgcHJvdG90
eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVx
dWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVj
dDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmVxdWl2
YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFs
ZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRo
b3V0QmFycmllcihvYmplY3QsIHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbmRpdGlvbjsgfTsKKyAgICAKKyAgICBKU09i
amVjdCogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBQcm9wZXJ0eUNv
bmRpdGlvbiBjb25kaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvbjsgfQorICAgIAor
ICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBjb25kaXRp
b24oKS5raW5kKCk7IH0KKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1
cm4gY29uZGl0aW9uKCkudWlkKCk7IH0KKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIGNvbmRpdGlvbigpLmhhc09mZnNldCgpOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkub2Zmc2V0KCk7IH0KKyAgICB1bnNpZ25lZCBo
YXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzQXR0cmlidXRlcygp
OyB9CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigp
LmF0dHJpYnV0ZXMoKTsgfQorICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkuaGFzUHJvdG90eXBlKCk7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkg
Y29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkucHJvdG90eXBlKCk7IH0KKyAgICBib29sIGhhc1Jl
cXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNSZXF1aXJlZFZhbHVl
KCk7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBjb25kaXRp
b24oKS5yZXF1aXJlZFZhbHVlKCk7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFdURjo6UHRySGFzaDxKU09iamVjdCo+OjpoYXNoKG1fb2JqZWN0KSArIG1fY29u
ZGl0aW9uLmhhc2goKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX29iamVjdCA9PSBvdGhlci5tX29iamVjdAorICAgICAgICAgICAgJiYgbV9jb25kaXRpb24g
PT0gb3RoZXIubV9jb25kaXRpb247CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBt
X2NvbmRpdGlvbi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICAv
LyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3Ig
aWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcyBvcgorICAgIC8vIGRpZmZlcmVudCBvYmpl
Y3RzLiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0byByZXNv
bHZlIHRoZSBjb25mbGljdCAtCisgICAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlcmUgaXMgYSBQcmVz
ZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3YW50IHRo
ZQorICAgIC8vIG1vcmUgZ2VuZXJhbCBvZiB0aGUgdHdvIHdoaWxlIGluIG90aGVyIGNhc2VzIHlv
dSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRoaXMKKyAgICAvLyB3aWxs
IGFsc28gcmV0dXJuIGZhbHNlIGZvciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5jZSBhbmQg
QWJzZW5jZSBvbiB0aGUgc2FtZQorICAgIC8vIG9iamVjdC91aWQuIEJ5IGNvbnZlbnRpb24sIGlu
dmFsaWQgY29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nLgorICAgIGJv
b2wgaXNDb21wYXRpYmxlV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzIHx8ICFvdGhlcikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IG90aGVyIHx8IHVpZCgpICE9
IG90aGVyLnVpZCgpIHx8IG9iamVjdCgpICE9IG90aGVyLm9iamVjdCgpOworICAgIH0KKyAgICAK
KyAgICAvLyBUaGVzZSB2YWxpZGl0eS1jaGVja2luZyBtZXRob2RzIGNhbiBvcHRpb25hbGx5IHRh
a2UgYSBTdHJ1dHVyZSogaW5zdGVhZCBvZiBsb2FkaW5nIHRoZQorICAgIC8vIFN0cnVjdHVyZSog
ZnJvbSB0aGUgb2JqZWN0LiBJZiB5b3UncmUgaW4gdGhlIGNvbmN1cnJlbnQgSklULCB0aGVuIHlv
dSBtdXN0IHVzZSB0aGUgZm9ybXMKKyAgICAvLyB0aGF0IHRha2UgYW4gZXhwbGljaXQgU3RydWN0
dXJlKiBiZWNhdXNlIHlvdSB3YW50IHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBmb3IgdGhlIHNh
bWUKKyAgICAvLyBzdHJ1Y3R1cmUgdGhhdCB5b3UgdmFsaWRhdGVkIChpLmUuIGF2b2lkIGEgVE9D
VE9VIHJhY2UpLgorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJl
IGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4gVmFsaWRpdHkK
KyAgICAvLyBkb2VzIG5vdCByZXF1aXJlIHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QuCisgICAg
Ym9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8g
ZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0
cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgdmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworCisgICAgLy8gQ2hlY2tz
IGlmIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kCisgICAgLy8gc3RydWN0dXJlIGFsb25lIGRvbid0IGd1
YXJhbnRlZSB0aGUgY29uZGl0aW9uLiBOb3RlIHRoYXQgdGhpcyBtYXkgcmV0dXJuIHRydWUgaWYg
dGhlCisgICAgLy8gY29uZGl0aW9uIHN0aWxsIHJlcXVpcmVzIHNvbWUgd2F0Y2hwb2ludHMgb24g
dGhlIG9iamVjdCBpbiBhZGRpdGlvbiB0byBjaGVja2luZyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUu
IElmIHlvdSB3YW50IHRvIGNoZWNrIGlmIHRoZSBjb25kaXRpb24gaG9sZHMgYnkgdXNpbmcgdGhl
IHN0cnVjdHVyZSBhbG9uZSwKKyAgICAvLyB1c2Ugc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCku
CisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBpc1N0
aWxsVmFsaWQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBTaG9ydGhhbmQgZm9yIGNvbmRpdGlvbigp
LmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpLgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlk
aXR5KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5
KCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQg
YW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAg
ICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBw
cm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlD
b25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9D
aGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZv
cnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisKKyAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxp
ZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLAorICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25k
aXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIGJvb2wgaXNXYXRjaGFibGUoCisgICAg
ICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRp
dGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgYm9vbCB3YXRjaGluZ1JlcXVp
cmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbmRpdGlvbigpLndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludCgpOworICAgIH0KKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdh
dGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbigpLndhdGNo
aW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKTsKKyAgICB9CisgICAgCisgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxp
dmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRh
dGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgSlNPYmplY3QqIG1fb2JqZWN0OworICAgIFByb3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0
aW9uOworfTsKKworc3RydWN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkgeyBy
ZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKAorICAgICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKworI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0Ojpmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3QKK3sKKyAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAg
ICBpZiAoY29uZGl0aW9uLm9iamVjdCgpID09IG9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBj
b25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOwor
fQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
Zm9yQ29uZGl0aW9uS2luZCgKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKSBjb25z
dAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6
ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IGtpbmQpCisgICAgICAg
ICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlD
b25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWduZWQgbnVtRm91bmQgPSAwOworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7Cisg
ICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOworICAgICAgICAgICAgbnVtRm91
bmQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChudW1Gb3VuZCA9PSAx
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjphcmVDb21wYXRpYmxlV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
b3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGEgOiAqdGhpcykgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBiIDogb3RoZXIpIHsKKyAgICAgICAgICAgIGlmICghYS5pc0NvbXBhdGlibGVXaXRo
KGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFvdGhl
ci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHkoKSkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3RoZXIp
IHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3RpbmdD
b25kaXRpb24gOiAqdGhpcykgeworICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXNDb21w
YXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGlu
dmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBub25FbXB0eShyZXN1bHQpOworfQorCitib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25z
dAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMp
IHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNv
bmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi52
YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExpdmUoKSBjb25zdAoreworICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAg
IGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludCgi
PGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50
KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgb3V0LnByaW50KGxpc3REdW1wSW5Db250
ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCJdIik7Cit9CisK
K3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK25hbWVzcGFj
ZSB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0aW9uKAorICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQgY29uZGl0aW9uS2luZCkKK3sKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKCk7CisgICAgCisgICAgc3dpdGNo
IChjb25kaXRpb25LaW5kKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6
IHsKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAg
ICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6cHJlc2VuY2Uodm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1
dGVzKTsKKyAgICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAg
ICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAgICAg
ICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90
b3R5cGVPYmplY3QoKSk7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2Vu
Y2VPZlNldHRlcjogeworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFi
c2VuY2VPZlNldHRlcigKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVj
dC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpKTsKKyAgICB9CisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgfQorfQorCitlbnVtIENvbmN1cnJl
bmN5IHsKKyAgICBNYWluVGhyZWFkLAorICAgIENvbmN1cnJlbnQKK307CitPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
KyAgICBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0
eUNvbmRpdGlvbjo6S2luZCBraW5kLAorICAgIENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5ID0gTWFp
blRocmVhZCkKK3sKKyAgICBBU1NFUlQoISFwcm90b3R5cGUgPT0gKGNvbmRpdGlvbiA9PSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpKTsKKyAgICAKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVy
dHlDb25kaXRpb24+IGNvbmRpdGlvbnM7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICBp
ZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOworICAgICAg
ICAKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBpZiAoIXByb3Rv
dHlwZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgICAg
ICBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICAv
LyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgcmVwZWF0ZWRseSwgaXQncyBhIGdv
b2QgYmV0IHRoYXQgaXQgc2hvdWxkIG5vdCBiZQorICAgICAgICAvLyB0cmVhdGVkIGFzIGEgZGlj
dGlvbmFyeS4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAg
ICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBNYWluVGhyZWFkKQorICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIG9iamVjdCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBQcm9wZXJ0
eUNvbmRpdGlvbjo6S2luZCB0aGlzQ29uZGl0aW9uS2luZDsKKyAgICAgICAgaWYgKGtpbmQgPT0g
UHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlICYmIG9iamVjdCAhPSBwcm90b3R5cGUpCisgICAg
ICAgICAgICB0aGlzQ29uZGl0aW9uS2luZCA9IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzQ29uZGl0aW9uS2luZCA9IGtpbmQ7CisgICAg
ICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBuZXdDb25kaXRpb24gPQorICAg
ICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgdGhpc0Nv
bmRpdGlvbktpbmQpOworICAgICAgICBpZiAoIW5ld0NvbmRpdGlvbiB8fCAhbmV3Q29uZGl0aW9u
LnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFs
aWQoKTsKKyAgICAgICAgCisgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKG5ld0NvbmRpdGlvbik7
CisgICAgICAgIAorICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAKKyAgICAvLyBWYWxpZGF0ZSB0aGUgcmVzdWx0LgorICAgIHN3
aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7Cisg
ICAgICAgIHVuc2lnbmVkIHByZXNlbmNlQ291bnQgPSAwOworICAgICAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBjb25kaXRpb25zKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUHJvcGVy
dHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICAgICAgICAgIHByZXNlbmNlQ291bnQrKzsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRp
b246OkFic2VuY2U6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJlc2VuY2VDb3VudCA9
PSAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgZm9y
IChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0aW9ucykK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCk7Cisg
ICAgfSB9CisgICAgCisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpub25F
bXB0eShjb25kaXRpb25zKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK09iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygK
KyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBo
ZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5l
cmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBoZWFkU3RydWN0dXJlLCBudWxscHRyLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29u
ZGl0aW9uOjpBYnNlbmNlKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAg
ICAgdm0sIG93bmVyLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUs
IG51bGxwdHIsIHVpZCwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRl
cik7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUs
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25k
aXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9u
OjpQcmVzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAor
ICAgICAgICB2bSwgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0LCBoZWFkU3RydWN0dXJlLCBudWxscHRy
LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXIsCisgICAgICAgIENvbmN1
cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQW4gb2JqZWN0IHBy
b3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIHNldCBvZiBhZGRp
dGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVlZCB0byBiZSBtZXQgZm9yIHNvbWUgaGVhcCBh
Y2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZworLy8gaW50
ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5OiBUaGVyZSBhcmUgbm8gc3BlY2lhbCBjb25k
aXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisvLyBJbnZhbGlkOiBUaGUgaGVhcCBhY2Nlc3Mg
aXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6IFRoZXJlIGFyZSBzb21lIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdmFsaWQuCisKK2NsYXNzIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnZh
bGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYg
dmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAgICAgICAgCisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0
YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICByZXN1bHQubV9kYXRhLT52ZWN0b3Ig
PSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRh
LT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2RhdGE7CisgICAgfQorICAgIAorICAgIHR5cGVk
ZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdp
bigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29u
c3Q7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90
eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNv
bmRpdGlvbiBvbiB0aGUgcHJvdG90eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0
aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5
cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFBy
ZXNlbmNlCisgICAgLy8gaW4gdGhlIHNldCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2Vu
Y2UuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9uIHNldHMgYXJlIGNvbXBhdGlibGUgaWYgdGhl
eSBhcmUgYm90aCB2YWxpZCBhbmQgZWFjaCBjb25kaXRpb24gaW4gKnRoaXMgaXMKKyAgICAvLyBj
b21wYXRpYmxlIHdpdGggZWFjaCBjb25kaXRpb24gaW4gb3RoZXIuCisgICAgYm9vbCBhcmVDb21w
YXRpYmxlV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0
OworICAgIAorICAgIC8vIEF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3IGNvbmRpdGlvbiBzZXQgYnkg
bWVyZ2luZyB0aGlzIG9uZSB3aXRoIHRoZSBvdGhlciBvbmUuIFRoaXMgd2lsbAorICAgIC8vIGZh
aWwgaWYgIXRoaXMuYXJlQ29tcGF0aWJsZVdpdGgob3RoZXIpLiBXaGVuIGl0IGZhaWxzLCBpdCBy
ZXR1cm5zIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRX
aXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29uc3Q7CisgICAg
CisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdDsKKyAgICBib29sIHN0
cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkg
Y29uc3Q7CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29u
c3Q7CisgICAgYm9vbCBhcmVTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIEhlbHBlcnMgZm9yIHVzaW5nIHRo
aXMgaW4gYSB1bmlvbi4KKyAgICB2b2lkKiByZWxlYXNlUmF3UG9pbnRlcigpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkpOworICAgIH0K
KyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgYWRvcHRSYXdQb2ludGVyKHZv
aWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxE
YXRhKj4ocmF3UG9pbnRlcikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBz
dGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZnJvbVJhd1BvaW50ZXIodm9pZCogcmF3
UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVy
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8v
IEludGVybmFsbHksIHRoaXMgcmVwcmVzZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9pbnRlciB0byBh
IERhdGEgdGhhdCBoYXMgYW4gZW1wdHkgdmVjdG9yLgorICAgIAorICAgIC8vIEZJWE1FOiBUaGlz
IGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IGhhdmluZyBpdCBpbnRlcm5hbGx5IHVzZSBh
IHZlY3RvciB0aGF0IGp1c3QgaGFzCisgICAgLy8gdGhlIG5vbi11aWQgcG9ydGlvbiBvZiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiwgYW5kIHRoZW4gcmVxdWlyaW5nIHRoYXQgdGhlIGNhbGxlcnMg
b2YgYWxsCisgICAgLy8gb2YgdGhlIEFQSXMgc3VwcGx5IHRoZSB1aWQuCisgICAgCisgICAgY2xh
c3MgRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7CisgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9CisgICAgICAgIAor
ICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsKKyAgICB9Owor
ICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAg
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxNCArMzcs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCiAg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQpCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQp
CiAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fY2hhaW5Db3VudChjaGFpbkNvdW50KQogICAg
ICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRpdGlvblNl
dChjb25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQogewotICAg
IGlmIChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7CiB9CiAK
IEdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcxLDcgKzY5LDcgQEAgYm9vbCBH
ZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogewogICAgIGlmIChtX3N0cnVjdHVy
ZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkp
KQorICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2VhayhyZXBhdGNoQnVmZmVy
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShyZXZpc2lvbiAx
ODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTUzLDEzICs1NCwxMiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBlKEludmFs
aWQpCi0gICAgICAgICwgbV9jaGFpbkNvdW50KDApCiAgICAgewogICAgIH0KICAgICAKICAgICBH
ZXRCeUlkQWNjZXNzKAogICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBTdHJ1Y3R1cmVD
aGFpbiogPSAwLCB1bnNpZ25lZCBjaGFpbkNvdW50ID0gMCk7CisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwog
ICAgIAogICAgIH5HZXRCeUlkQWNjZXNzKCk7CiAgICAgCkBAIC03Miw4ICs3Miw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3Qg
eyByZXR1cm4gbV9jaGFpbi5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2NoYWluQ291bnQ7IH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0K
ICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAg
LTkxLDkgKzkwLDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAg
IAogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
bV9jb25kaXRpb25TZXQ7IC8vIEZJWE1FIHdoYXQgYWJvdXQgYmFycmllcnM/CiAgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MSw3ICs1MSw4IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKICAg
ICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5tX29sZFN0
cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3Ry
dWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4u
Y29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7CisgICAgICAgIHJl
c3VsdC5tX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJh
d1BvaW50ZXIoCisgICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCk7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1
YlJvdXRpbmU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTY0LDYgKzY1LDkgQEAgUHV0
QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogCiBib29sIFB1dEJ5SWRBY2Nl
c3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBjb25zdAogeworICAg
IGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgUmVwbGFjZToKICAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCkBAIC03NCwxNSAr
NzgsMTEgQEAgYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fbmV3U3Ry
dWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgY2FzZSBDdXN0b21TZXR0ZXI6
CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNN
YXJrZWQobV9jaGFpbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgog
I2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgpAQCAtNTMsNyArNTQsNiBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgUHV0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAg
ICAgICwgbV9jaGFpbkNvdW50KFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAgICAgCkBAIC02Miwx
NCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0g
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3Vs
dDsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3VsdC5t
X29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAg
cmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworICAgICAgICByZXN1bHQubV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRl
ciA9IDA7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkBAIC05NSw4ICs5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlND
ZWxsKiBvd25lciwKICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAg
ICB1bnNpZ25lZCBjaGFpbkNvdW50LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYyBjdXN0b21TZXR0ZXIsCiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lKQogICAgIHsKQEAgLTEwNCwxMCArMTAzLDcgQEAgcHVibGljOgogICAgICAgICBQ
dXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2
bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBhY2Nlc3NUeXBl
OwotICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2
bSwgb3duZXIsIGNoYWluKTsKLSAgICAgICAgICAgIHJlc3VsdC5tX2NoYWluQ291bnQgPSBjaGFp
bkNvdW50OwotICAgICAgICB9CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRp
dGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gY3VzdG9tU2V0dGVyOwog
ICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtMTQ2LDE3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X25ld1N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNo
YWluKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1Nl
dHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbi5nZXQoKTsKLSAg
ICB9Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY2hh
aW5Db3VudDsKLSAgICB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAg
SklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkBAIC0xNzgsOCArMTY0
LDcgQEAgcHJpdmF0ZToKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X25ld1N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47
Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIG1f
Y3VzdG9tU2V0dGVyOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQobV9raW5kLCAiIG9mICIsIG1fdWlkKTsKKyAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgIG91dC5wcmlu
dCgiIGF0ICIsIG9mZnNldCgpLCAiIHdpdGggYXR0cmlidXRlcyAiLCBhdHRyaWJ1dGVzKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgQWJzZW5jZU9mU2V0
dGVyOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRoIHByb3RvdHlwZSAiLCBpbkNvbnRleHQoSlNW
YWx1ZShwcm90b3R5cGUoKSksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiIHdpdGggIiwgaW5Db250ZXh0KHJlcXVp
cmVkVmFsdWUoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVs
bHB0cik7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09i
amVjdCogYmFzZSkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFi
bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgY2FzZSBQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRl
czsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChjdXJy
ZW50T2Zmc2V0ICE9IG9mZnNldCgpIHx8IGN1cnJlbnRBdHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEFic2VuY2U6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICBpZiAoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpICE9IGludmFsaWRPZmZz
ZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5cGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKSAhPSBpbnZhbGlkT2Zmc2V0KSB7
CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJpYnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21B
Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSAhPSBwcm90b3R5
cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAg
ICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJlKCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAg
ICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJp
ZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICAgICAvLyBvYmplY3QuCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJhY3ksIGFuZCBtYXliZSBtb3JlIHJpc2t5IHRoYW4g
d2Ugd2FudC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNDY0MQorICAgICAgICAKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBj
dXJyZW50VmFsdWUgPSBiYXNlLT5nZXREaXJlY3QoY3VycmVudE9mZnNldCk7CisgICAgICAgIGlm
IChjdXJyZW50VmFsdWUgIT0gcmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2Fz
ZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNh
biBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwgYW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRv
dyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24gdGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBh
ZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAgLy8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZl
Y3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1wdXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIg
c2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAg
Y2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFs
ZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZhcmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0
cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVzIHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQg
dGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAg
ICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFi
bGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UKKyAgICAgICAgLy8gc2hvbGRuJ3QgaGF2ZSBh
IFRPQ1RPVSByYWNlIGVpdGhlci4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ICE9IGlu
dmFsaWRPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0OworICAg
ICAgICBzd2l0Y2ggKGVmZm9ydCkgeworICAgICAgICBjYXNlIE1ha2VOb0NoYW5nZXM6CisgICAg
ICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0
KG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnN1cmVXYXRjaGFi
aWxpdHk6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5UmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0KAorICAgICAgICAgICAgICAgICpIZWFwOjpoZWFwKHN0cnVjdHVy
ZSktPnZtKCksIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKCFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNl
LCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxs
VmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpCisg
ICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKwor
Ym9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAor
eworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQorICAgICAgICAmJiBp
c1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJvcGVy
dHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBl
KCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRW
YWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKS5pc0NlbGwoKQorICAgICAgICAmJiAh
SGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0
aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQp
IGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNr
KHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAg
ICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQgY29uZGl0aW9uKQoreworICAgIHN3aXRj
aCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICBvdXQucHJpbnQo
IkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVu
Y2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNv
bmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIFByb3BlcnR5Q29uZGl0aW9uX2gKKwor
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBQcm9wZXJ0eUNv
bmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgUHJlc2VuY2UsCisg
ICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VPZlNldHRlciwKKyAgICAgICAgRXF1aXZh
bGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0aGlzIHdpbGwgYmUgYSBwYWlyIG9m
IHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb25zLCB3ZSB3aWxs
IHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0aGUgbmV3IHN0cnVjdHVyZS4KKyAg
ICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKCkKKyAgICAgICAgOiBtX3VpZChudWxs
cHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkKKyAgICB7CisgICAgICAgIG1lbXNldCgm
dSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb24oV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fdWlkKG51bGxwdHIpCisg
ICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQoJnUsIDAsIHNp
emVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVz
ZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29u
ZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1
bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9w
ZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CisgICAgeworICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNl
dCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlv
biBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3Qq
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gQWJzZW5j
ZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRp
dGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJp
ZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25k
aXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRlcjsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5j
ZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAg
ICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmpl
Y3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVy
KTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJv
dG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2
YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEVxdWl2
YWxlbmNlOworICAgICAgICByZXN1bHQudS5lcXVpdmFsZW5jZS52YWx1ZSA9IEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAg
ICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJp
ZXIodWlkLCB2YWx1ZSk7CisgICAgfQorICAgICAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgCisgICAg
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisgICAgCisgICAgYm9vbCBoYXNPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0OworICAgIH0KKyAg
ICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9
PSBQcmVzZW5jZTsgfTsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChoYXNBdHRyaWJ1dGVzKCkpOworICAgICAgICByZXR1cm4gdS5wcmVzZW5j
ZS5hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0
IHsgcmV0dXJuICEhKnRoaXMgJiYgKG1fa2luZCA9PSBBYnNlbmNlIHx8IG1fa2luZCA9PSBBYnNl
bmNlT2ZTZXR0ZXIpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzUHJvdG90eXBlKCkpOworICAgICAgICByZXR1cm4gdS5hYnNlbmNl
LnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29u
c3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gRXF1aXZhbGVuY2U7IH0KKyAgICBKU1Zh
bHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1JlcXVp
cmVkVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodS5lcXVpdmFsZW5j
ZS52YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3Vp
ZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5kKTsKKyAgICAgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSB1LnBy
ZXNlbmNlLm9mZnNldDsKKyAgICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLmF0dHJpYnV0
ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBj
YXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8
SlNPYmplY3QqPjo6aGFzaCh1LmFic2VuY2UucHJvdG90eXBlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IEVuY29k
ZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVxdWl2YWxlbmNlLnZhbHVlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV91aWQgIT0gb3RoZXIubV91aWQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNl
IFByZXNlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0ID09IG90aGVy
LnUucHJlc2VuY2Uub2Zmc2V0CisgICAgICAgICAgICAgICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1
dGVzID09IG90aGVyLnUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICAgICAgY2FzZSBBYnNlbmNl
OgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB1LmFi
c2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgICAgIGNh
c2UgRXF1aXZhbGVuY2U6CisgICAgICAgICAgICByZXR1cm4gdS5lcXVpdmFsZW5jZS52YWx1ZSA9
PSBvdGhlci51LmVxdWl2YWxlbmNlLnZhbHVlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBBYnNlbmNlOworICAgIH0KKyAgICAKKyAgICAv
LyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3Ig
aWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcy4gSWYKKyAgICAvLyBmYWxzZSBpcyByZXR1
cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0byByZXNvbHZlIHRoZSBjb25mbGljdCAtIGZv
ciBleGFtcGxlIGlmIHRoZXJlIGlzCisgICAgLy8gYSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVu
Y2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhl
IHR3bworICAgIC8vIHdoaWxlIGluIG90aGVyIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNw
ZWNpZmljIG9mIHRoZSB0d28uIFRoaXMgd2lsbCBhbHNvIHJldHVybiBmYWxzZQorICAgIC8vIGZv
ciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5jZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1
aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQKKyAgICAvLyBjb25kaXRpb25zIGFyZW4ndCBjb21w
YXRpYmxlIHdpdGggYW55dGhpbmcuCisgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IFBy
b3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMg
fHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRo
aXMgPT0gb3RoZXIgfHwgdWlkKCkgIT0gb3RoZXIudWlkKCk7CisgICAgfQorICAgIAorICAgIC8v
IENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0
eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4KKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0
cikgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJl
IHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBp
c1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9v
bCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNv
bnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIGlzIHN0aWxsIHZhbGlk
IHJpZ2h0IG5vdyBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgc3RydWN0dXJlLgorICAgIC8vIE1h
eSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVy
ZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uLiBUaGlzIGhhcHBl
bnMgZm9yIGFuIEFic2VuY2UgY29uZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlIGlt
cHVyZQorICAgIC8vIHByb3BlcnRpZXMuIElmIHRoZSBvYmplY3QgaXMgbm90IHN1cHBsaWVkLCB0
aGVuIGEgInRydWUiIHJldHVybiBpbmRpY2F0ZXMgdGhhdCBjaGVja2luZyBpZgorICAgIC8vIGFu
IG9iamVjdCBoYXMgdGhlIGdpdmVuIHN0cnVjdHVyZSBndWFyYW50ZWVzIHRoZSBjb25kaXRpb24g
c3RpbGwgaG9sZHMuIElmIGFuIG9iamVjdCBpcworICAgIC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBt
YXkgbmVlZCB0byB1c2Ugc29tZSBvdGhlciB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1
YXJhbnRlZSB0aGUKKyAgICAvLyBjb25kaXRpb24gaW4gYWRkaXRpb24gdG8gdGhlIHN0cnVjdHVy
ZSBjaGVjay4KKyAgICBib29sIGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFz
ZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBjb25k
aXRpb24gaXMgbm90IHdhdGNoYWJsZSwgYnV0IGNvdWxkIGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVu
YWJsaW5nIHRoZQorICAgIC8vIGFwcHJvcHJpYXRlIHdhdGNocG9pbnQuIEZvciBleGFtcGxlLCBy
ZXBsYWNlbWVudCB3YXRjaHBvaW50cyBhcmUgZW5hYmxlZCBvbmx5IHdoZW4gc29tZQorICAgIC8v
IGFjY2VzcyBpcyBjYWNoZWQgb24gdGhlIHByb3BlcnR5IGluIHNvbWUgc3RydWN0dXJlLiBUaGlz
IGlzIG1haW5seSB0byBzYXZlIHNwYWNlIGZvcgorICAgIC8vIGRpY3Rpb25hcnkgcHJvcGVydGll
cyBvciBwcm9wZXJ0aWVzIHRoYXQgbmV2ZXIgZ2V0IHZlcnkgaG90LiBCdXQsIGl0J3MgYWx3YXlz
IHNhZmUgdG8KKyAgICAvLyBlbmFibGUgd2F0Y2hpbmcsIHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBj
YWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQg
eworICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0
IGNoYW5nZSB0aGUgc3RhdGUgb2YgYW55IFN0cnVjdHVyZSBvcgorICAgICAgICAvLyBvYmplY3Qs
IGFuZCBpbXBsaWVzIHRoYXQgaWYgdGhlIHByb3BlcnR5IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNo
YWJsZSB0aGVuIHdlIGRvbid0IG1ha2UKKyAgICAgICAgLy8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlz
IG1hbmRhdG9yeSBpZiBjYWxsaW5nIGZyb20gYSBKSVQgdGhyZWFkLiBUaGlzIGlzIGFsc28gc29t
ZXdoYXQKKyAgICAgICAgLy8gcHJlZmVyYWJsZSB3aGVuIGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIg
dG8gd2F0Y2ggYSBjb25kaXRpb24gZm9yIHRoZSBmaXJzdCB0aW1lIChpLmUuCisgICAgICAgIC8v
IG5vdCBmcm9tIGEgd2F0Y2hwb2ludCBmaXJlIHRoYXQgY2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBz
aG91bGQgYWRhcHQpLCBzaW5jZSBhCisgICAgICAgIC8vIHdhdGNocG9pbnQgbm90IGJlaW5nIGlu
aXRpYWxpemVkIGZvciB3YXRjaGluZyBpbXBsaWVzIHRoYXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBl
bm91Z2gKKyAgICAgICAgLy8geWV0IHRvIG1ha2UgaXQgcHJvZml0YWJsZSB0byB3YXRjaCAtLSBh
cyBpbiwgdGhlIHRoaW5nIGJlaW5nIHdhdGNoZWQgbWF5IG5vdCBoYXZlCisgICAgICAgIC8vIHN0
YWJpbGl6ZWQgeWV0LiBXZSBwcmVmZXIgdG8gb25seSBhc3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3
aWxsIGhvbGQgaWYgaXQgaGFzIGJlZW4KKyAgICAgICAgLy8ga25vd24gdG8gaG9sZCBmb3IgYSB3
aGlsZSBhbHJlYWR5LgorICAgICAgICBNYWtlTm9DaGFuZ2VzLAorICAgICAgICAKKyAgICAgICAg
Ly8gRG8gd2hhdCBpdCB0YWtlcyB0byBlbnN1cmUgdGhhdCB0aGUgcHJvcGVydHkgY2FuIGJlIHdh
dGNoZWQsIGlmIGRvaW5nIHNvIGhhcyBubworICAgICAgICAvLyB1c2VyLW9ic2VydmFibGUgZWZm
ZWN0LiBGb3Igbm93IHRoaXMganVzdCBtZWFucyB0aGF0IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBw
cm9wZXJ0eQorICAgICAgICAvLyByZXBsYWNlbWVudCB3YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYg
aXQgaGFkbid0IGJlZW4gZW5hYmxlZCBhbHJlYWR5LiBEbyBub3QgdXNlIHRoaXMKKyAgICAgICAg
Ly8gZnJvbSBKSVQgdGhyZWFkcywgc2luY2UgdGhlIGFjdCBvZiBlbmFibGluZyB3YXRjaHBvaW50
cyBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgICAgIEVuc3VyZVdhdGNoYWJpbGl0eQorICAgIH07
CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNv
dWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRj
aHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3
YXRjaHBvaW50LgorICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBX
YXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxp
ZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09i
amVjdCogYmFzZSA9IG51bGxwdHIsIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMp
IGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBp
cyByZXF1aXJlZCBmb3IgYWxsIG9mIG91ciBjb25kaXRpb25zLgorICAgICAgICByZXR1cm4gISEq
dGhpczsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBv
aW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBF
cXVpdmFsZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmpl
Y3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2
ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNr
ZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdo
ZW5WYWxpZChTdHJ1Y3R1cmUqLCBXYXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAg
IHN0cnVjdCB7CisgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFi
c2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZTsKKyAgICAgICAgfSBlcXVpdmFsZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVy
dHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoCisgICAgICAgIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpT
Qzo6UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5
Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTkwLDE5ICs5MCwyMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
cm9tCiAgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNv
ZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5n
ZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVj
dHVyZUNoYWluLmdldCgpOwotICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChj
aGFpbik7CiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCi0gICAgUmVm
UHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGludGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWlu
KQotICAgICAgICBpbnRlbmRlZENoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4ocHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBjaGFpbikpOworICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5v
cGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwp
CisgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUo
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lKSkgeworICAgICAgICBj
b25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlT
ZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52
bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBpbnRlbmRlZENo
YWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogfQogCiBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsxNjgsMTQgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAK
ICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAg
ICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbikgewotICAgICAg
ICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0g
ICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CisgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICBz
dHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKICAg
ICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0
KCksCi0gICAgICAgICAgICAgICAgY2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTIxOSwxNSArMjIwLDExIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgICAgIGlmIChh
Y2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5l
dyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmls
ZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4oKSkpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNoYWluLT5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9u
U2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3Vy
ZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNs
b3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6
dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBh
Y2Nlc3MubmV3U3RydWN0dXJlKCksIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAg
ICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIApAQCAtMjM1LDcgKzIzMiw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1
cmUsIGFjY2Vzcy5jaGFpbigpLCBhY2Nlc3MuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2lu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lw
OgpAQCAtMjUzLDcgKzI1MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJs
b2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0
U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhH
ZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6Om1v
dmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTM2OCwyMiArMzY1LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcigKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwog
ICAgIAotICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICAgICAgaWYg
KCFpc0RpcmVjdCkgewotICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAg
ICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5
IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KLSAgICAgICAgICAgIGlmIChjaGFpbi0+bWF5SW50
ZXJjZXB0U3RvcmVUbyh1aWQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5
cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXplZCAoaS5lLiB0aGVyZSBhcmUgcHJveGllcyBv
ciBkaWN0aW9uYXJpZXMpCi0gICAgICAgICAgICAvLyB0aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9u
YXJ5IGNhc2Ugd291bGQgb25seSBoYXBwZW4gaWYgdGhpcyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVu
Ci0gICAgICAgICAgICAvLyB1c2VkIGluIGFuIG9wdGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlv
bi4gQW5kIHJlYWxseSB0aGUgb25seSByZWFzb24gd2h5IHdlIHdvdWxkCi0gICAgICAgICAgICAv
LyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJlYWxseSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBv
cHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgotICAgICAgICAgICAgLy8gZGljdGlvbmFyaWVz
IGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IHRob3NlIG9iamVjdHMgd2VyZSBu
ZXZlciB1c2VkIGFzCi0gICAgICAgICAgICAvLyBwcm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHBy
b3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YK
LSAgICAgICAgICAgIC8vIHRoZSBvdGhlciBjaGVja3MgYmVsb3cgd2lsbCBmYWlsLgotICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpIHx8ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkp
CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT52
bSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQogICAgIApAQCAtMzk0LDcgKzM4MCw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgQVNTRVJUKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVz
dWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWluLmdldCgpLCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQpKTsKICAgICAgICAgaWYgKCFkaWRBcHBlbmQpCiAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQm
IFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKICAg
ICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOwogICAgIG1fbmV3U3RydWN0
dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVy
Lm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5h
dGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAg
bV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1
cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtT
dGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTY0LDI5ICs2MywyNiBAQCBQdXRC
eUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1
dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1f
a2luZCA9IFRyYW5zaXRpb247CiAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0
dXJlOwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAo
c3RydWN0dXJlQ2hhaW4pCi0gICAgICAgIHN0cnVjdHVyZUNoYWluLT5nYXRoZXJDaGVja3MocmVz
dWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRp
dGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0
dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cykKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1f
a2luZCA9IFNldHRlcjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0g
ICAgaWYgKGNoYWluKSB7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29u
c3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRl
cm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgfQorICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNv
bmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1f
Y2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpOwogICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC0xMzQsMTggKzEzMCw2IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2Fs
bHMoKSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVT
ZXQgUHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAotewotICAgIEFTU0VSVChr
aW5kKCkgPT0gU2V0dGVyKTsKLSAgICAKLSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZSgpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
c3RydWN0dXJlRm9yKG1fY29uc3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKLSAgICByZXR1cm4gc3RydWN0dXJlOwotfQotCiBib29s
IFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3Ro
ZXIpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQpAQCAtMTk2LDYgKzE4
MCw3IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICBBU1NF
UlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLndy
aXRlc1N0cnVjdHVyZXMoKSk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFn
ZSgpKTsKKyAgICBBU1NFUlQoIXJlcGxhY2UuY29uZGl0aW9uU2V0KCkpOwogICAgIAogICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAogICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKQEAgLTIzMiwxNSArMjE3LDEzIEBAIHZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAg
IjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+
ICIsCiAgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29u
dGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVj
a3MoKSwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAg
ICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBv
ZmZzZXQoKSwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRl
cjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4
dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNv
bnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29udGV4dCksICJdIik7Ci0gICAgICAgIGlmIChtX2Fs
dGVybmF0ZUJhc2UpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIs
IGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKKyAgICAgICAg
ICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdIik7CiAgICAgICAgIG91
dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CiAgICAgICAgIG91dC5wcmludCgiLCBj
YWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwogICAgICAgICBvdXQucHJpbnQoIj4iKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
CShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBQdXRC
eUlkVmFyaWFudF9oCiAjZGVmaW5lIFB1dEJ5SWRWYXJpYW50X2gKIAotI2luY2x1ZGUgIkludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0
LmgiCiAKQEAgLTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAg
ICAgICAgOiBtX2tpbmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIp
Ci0gICAgICAgICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQo
aW52YWxpZE9mZnNldCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYgKzUzLDE1IEBAIHB1YmxpYzoK
ICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRW
YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQ
dXRCeUlkVmFyaWFudCByZXBsYWNlKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQg
cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAg
c3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29u
c3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJv
cGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0g
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsCi0gICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwog
ICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIApAQCAt
NzYsNiArNzQsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CiAg
ICAgfQogICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCiAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9
PSBTZXR0ZXIpOwpAQCAtMTAwLDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCByZWFsbG9j
YXRlc1N0b3JhZ2UoKSBjb25zdDsKICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAK
LSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jb25zdGFudENoZWNrczsKLSAgICB9Cisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KCkgY29uc3QKICAgICB7CkBAIC0xMTEsMTQgKzExMSw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0OwogICAgIH0KICAgICAKLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFz
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAg
ICAgIHJldHVybiBtX2FsdGVybmF0ZUJhc2U7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNl
dCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7Ci0gICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxM
aW5rU3RhdHVzKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVy
KTsKQEAgLTEzNiw4ICsxMjgsNyBAQCBwcml2YXRlOgogICAgIEtpbmQgbV9raW5kOwogICAgIFN0
cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJl
OwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKLSAg
ICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODc0ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDMzICszNywzOSBAQCBuYW1lc3BhY2UgSlND
IHsKIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6On5TdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KCkgeyB9CiAKIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goCisgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSwKICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8m
IGhvbGRlciwKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludD4mIGhlYWQpCiB7Ci0gICAgaGVhZCA9IHN0ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludD4oaG9sZGVyLCBXVEY6Om1vdmUoaGVhZCkpOworICAgIGhlYWQg
PSBzdGQ6Om1ha2VfdW5pcXVlPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+KGtleSwg
aG9sZGVyLCBXVEY6Om1vdmUoaGVhZCkpOwogICAgIHJldHVybiBoZWFkLmdldCgpOwogfQogCiB2
b2lkIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbChjb25zdCBG
aXJlRGV0YWlsJikKIHsKLSAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24g
ZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgotICAgIC8vIFRoYXQg
d29ya3MsIGJlY2F1c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUg
c2V0J3MgbGlzdCwgYW5kCi0gICAgLy8gdGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJp
bmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2luZy4KLSAgICBtX2hvbGRlci5jb2Rl
QmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICBpZiAoIW1fa2V5
IHx8ICFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmls
aXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVt
aXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAgICAvLyBUaGF0
IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhl
IHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9y
IGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAgICAgICBtX2hv
bGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCkt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKQogewogfQogCi1T
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCog
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9oZWFkKTsKIH0KIAog
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgIFJlZlB0cjxXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9jayogY29kZUJs
b2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7CiAg
ICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0UmVmKG5ldyBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5mbykpOwpAQCAtNzIs
NyArNzgsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvCiAgICAg
ICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7CisgICAgcmV0dXJuIGhv
bGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTg3NDg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00NiwxNSArNDcsMTEgQEAg
Y2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQotICAg
ICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9s
ZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAgICAgIDogbV9rZXko
a2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBtX25leHQoV1RGOjpt
b3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02Miw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KCk7CiAgICAgCiAgICAgc3Rh
dGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIHB1c2goCisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4mIGhlYWQpOwogCkBAIC02OSw2ICs2Nyw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsK
ICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVyOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBtX25leHQ7CiB9OwpA
QCAtODMsMTEgKzgyLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCogYWRkV2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQq
IGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAg
CiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3VyZVJlZmVy
ZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvKik7CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOSArNDgs
MTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAgICBkZWxldGUgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgYWNj
ZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Cisg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZToKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25z
IGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpAQCAtNzUsOCArNzgs
MTAgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8
ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAg
ICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdl
dCgpKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAg
ICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg3NDg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5o
IgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCkBAIC0xMTMsNyArMTE0LDcgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJ
bmZvIHsKIAogICAgIC8vIFB1dEJ5SWQqCiAKLSAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlv
bihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGJvb2wgaXNEaXJlY3Qp
CisgICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBT
dHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0LCBib29sIGlzRGlyZWN0KQogICAgIHsK
ICAgICAgICAgaWYgKGlzRGlyZWN0KQogICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7CkBAIC0xMjIsNyArMTIzLDcgQEAgc3RydWN0IFN0
cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3Vz
U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKICAgICAgICAgdS5w
dXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAg
ICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Cisg
ICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0
LnJlbGVhc2VSYXdQb2ludGVyKCk7CiAgICAgfQogCiAgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxh
Y2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUp
CkBAIC0xNzUsMTAgKzE3NiwxMSBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAg
ICBzZWVuID0gdHJ1ZTsKICAgICB9CiAgICAgICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hw
b2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMpOworICAgICAg
ICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29uZGl0aW9uKTsKICAgICB9CiAg
ICAgCiAgICAgaW50OF90IGFjY2Vzc1R5cGU7CkBAIC0yMTcsMjMgKzIxOSwxMiBAQCBzdHJ1Y3Qg
U3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1
cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIH0gZ2V0QnlJZFNlbGY7CiAgICAgICAg
IHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9i
amVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBw
cm90b3R5cGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBib29sIGlzRGlyZWN0OwotICAgICAgICB9
IGdldEJ5SWRQcm90bzsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
b3VudCA6IDMxOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA6IDE7Ci0gICAgICAgIH0gZ2V0
QnlJZENoYWluOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBnZXRCeUlkTGlzdDsKICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcmV2aW91c1N0cnVjdHVy
ZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7Ci0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAg
ICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKICAgICAgICAgfSBwdXRCeUlkVHJhbnNpdGlv
bjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNp
b24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc5LDcgKzE3NzksMTAgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIC8v
IHNvbWV0aGluZyBtb3JlIHN1YnRsZT8KICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJl
c3VsdDsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFu
dHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsICFzdGF0dXNbaV0uYWx0ZXJuYXRlQmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyB0aGluZyB3b24ndCBnaXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3RvdHlw
ZXMuIElmIGl0IGRpZCwgd2UnZAorICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUgd29y
ayB0byBkbyBoZXJlLgorICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIHN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUs
IHN0YXR1c1tpXS5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRS
ZXN1bHQpIHsKQEAgLTIwNjAsMzAgKzIwNjMsMjIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIEFi
c3RyYWN0VmFsdWUgcmVzdWx0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0
aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOwotICAgICAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IHZhcmlhbnQuc3RydWN0
dXJlU2V0KCk7CisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENh
c2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAgICAgICBT
dHJ1Y3R1cmVTZXQgc2V0ID0gZ2V0Q2FzZS5zZXQoKTsKICAgICAgICAgICAgIHNldC5maWx0ZXIo
YmFzZSk7CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKLSAgICAgICAgICAgIGlmICh2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhc2VG
b3JMb2FkID0gYmFzZS5tX3ZhbHVlOwotICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3Vs
dCA9Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAg
ICAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZh
cmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgeworICAg
ICAgICAgICAgaWYgKGdldENhc2UubWV0aG9kKCkua2luZCgpICE9IEdldEJ5T2Zmc2V0TWV0aG9k
OjpDb25zdGFudCkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAg
ICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CiAgICAgICAgICAgICB0aGlzUmVzdWx0
LnNldCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAgICAgICAgICAgICAgICptX2dyYXBo
LmZyZWV6ZShjb25zdGFudFJlc3VsdCksCisgICAgICAgICAgICAgICAgKmdldENhc2UubWV0aG9k
KCkuY29uc3RhbnQoKSwKICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJT
dGF0ZSgpKTsKICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
LAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9rZXkoa2V5KQorICAgICwgbV9j
b2RlQmxvY2soY29kZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGtleS5raW5kKCkgPT0g
UHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1
Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJm1fc3RydWN0dXJlV2F0Y2hwb2ludCk7
CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbV9rZXkub2JqZWN0KCktPnN0cnVj
dHVyZSgpLT5nZXRDb25jdXJyZW50bHkobV9rZXkudWlkKCkpOworICAgIFdhdGNocG9pbnRTZXQq
IHNldCA9IG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICBzZXQtPmFkZCgmbV9wcm9wZXJ0eVdhdGNocG9pbnQp
OworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6Zmly
ZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgLy8gT25lIG9mIHRoZSB3YXRjaHBv
aW50cyBmaXJlZCwgYnV0IHRoZSBvdGhlciBvbmUgZGlkbid0LiBNYWtlIHN1cmUgdGhhdCBuZWl0
aGVyIG9mIHRoZW0gYXJlCisgICAgLy8gaW4gYW55IHNldCBhbnltb3JlLiBUaGlzIHNpbXBsaWZp
ZXMgdGhpbmdzIGJ5IGFsbG93aW5nIHVzIHRvIHJlaW5zdGFsbCB0aGUgd2F0Y2hwb2ludHMKKyAg
ICAvLyB3aGVyZXZlciBmcm9tIHNjcmF0Y2guCisgICAgaWYgKG1fc3RydWN0dXJlV2F0Y2hwb2lu
dC5pc09uTGlzdCgpKQorICAgICAgICBtX3N0cnVjdHVyZVdhdGNocG9pbnQucmVtb3ZlKCk7Cisg
ICAgaWYgKG1fcHJvcGVydHlXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fcHJvcGVy
dHlXYXRjaHBvaW50LnJlbW92ZSgpOworICAgIAorICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQ
cm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxs
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hv
d0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcg
d2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1f
Y29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0
OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRl
dGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBzdHJpbmdEZXRhaWwob3V0LnRvQ1N0
cmluZygpLmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAg
ICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0
aW1pemF0aW9uLCAmc3RyaW5nRGV0YWlsKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgK
KyAgICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0
ID0gT0JKRUNUX09GRlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQsIG1fc3RydWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNl
X2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAg
ICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBh
cmVudC0+ZmlyZShkZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29u
c3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVD
VF9PRkZTRVRPRigKKyAgICAgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LCBtX3Byb3BlcnR5V2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+Zmly
ZShkZXRhaWwpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoK
KyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisgICAgICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkg
Y29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJp
dmF0ZToKKyAgICBjbGFzcyBTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQg
eworICAgIHB1YmxpYzoKKyAgICAgICAgU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0
YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICBjbGFzcyBQcm9wZXJ0eVdhdGNocG9pbnQgOiBw
dWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBQcm9wZXJ0eVdhdGNocG9p
bnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJu
YWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisgICAgCisgICAgdm9pZCBm
aXJlKGNvbnN0IEZpcmVEZXRhaWwmKTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFN0cnVjdHVyZVdhdGNo
cG9pbnQgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50OworICAgIFByb3BlcnR5V2F0Y2hwb2ludCBtX3By
b3BlcnR5V2F0Y2hwb2ludDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisg
ICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5Lndh
dGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCgha2V5LndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7
Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5v
YmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQor
Cit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZp
cmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlD
b25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3Nl
bWJseSgpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9p
bnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVCbG9j
aywgIlxuIik7CisgICAgfQorICAgIAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBv
dXQucHJpbnQoIkFkYXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOwor
ICAgIAorICAgIFN0cmluZ0ZpcmVEZXRhaWwgc3RyaW5nRGV0YWlsKG91dC50b0NTdHJpbmcoKS5k
YXRhKCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmls
ZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlv
biwgJnN0cmluZ0RldGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJs
aWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisgICAgCisgICAgdm9pZCBpbnN0
YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0
IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg3
NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsMTQgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5h
bEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgTm9kZSog
aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVy
dHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVj
dWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQp
OworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBH
ZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUs
IE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgCisg
ICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5SWRWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0g
b2YgUHV0QnlJZFZhcmlhbnQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+Cisg
ICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmIHZhcmlhbnQpOworICAgICAgICAKICAgICB2
b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1
bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAg
ICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CkBAIC0yMTIsNyArMjE5LDMyIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBoYW5kbGVQdXRCeUlkKAogICAgICAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsCiAgICAgICAg
IGJvb2wgaXNEaXJlY3QpOwotICAgIHZvaWQgZW1pdENoZWNrcyhjb25zdCBDb25zdGFudFN0cnVj
dHVyZUNoZWNrVmVjdG9yJik7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEgd2F0Y2hw
b2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBSZXR1cm5zIGZhbHNlIGlm
IHRoZQorICAgIC8vIGNvbmRpdGlvbiBubyBsb25nZXIgaG9sZHMsIGFuZCB0aGVyZWZvcmUgbm8g
cmVhc29uYWJsZSBjaGVjayBjYW4gYmUgZW1pdHRlZC4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcHJv
bW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2QpOworICAgIAorICAgIC8vIEVpdGhlciBy
ZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1pdCBhIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi4g
SXQgbXVzdCBiZSBhIFByZXNlbmNlCisgICAgLy8gY29uZGl0aW9uLiBJdCB3aWxsIGF0dGVtcHQg
dG8gcHJvbW90ZSBhIFByZXNlbmNlIGNvbmRpdGlvbiB0byBhbiBFcXVpdmFsZW5jZSBjb25kaXRp
b24uCisgICAgLy8gRW1pdHMgY29kZSBmb3IgdGhlIGxvYWRlZCB2YWx1ZSB0aGF0IHRoZSBjb25k
aXRpb24gZ3VhcmRzLCBhbmQgcmV0dXJucyBhIG5vZGUgY29udGFpbmluZworICAgIC8vIHRoZSBs
b2FkZWQgdmFsdWUuIFJldHVybnMgbnVsbCBpZiB0aGUgY29uZGl0aW9uIG5vIGxvbmdlciBob2xk
cy4KKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYpOworICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiwgTm9kZVR5cGUgPSBHZXRCeU9m
ZnNldCk7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAgICAvLyBDYWxs
cyBjaGVjaygpIGZvciBlYWNoIGNvbmRpdGlvbiBpbiB0aGUgc2V0OiB0aGF0IGlzLCBpdCBlaXRo
ZXIgZW1pdHMgY2hlY2tzIG9yIHJlZ2lzdGVycworICAgIC8vIHdhdGNocG9pbnRzIChvciBhIGNv
bWJpbmF0aW9uIG9mIHRoZSB0d28pIHRvIG1ha2UgdGhlIGNvbmRpdGlvbnMgaG9sZC4gSWYgYW55
IG9mIHRob3NlCisgICAgLy8gY29uZGl0aW9ucyBhcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZSwgcmV0
dXJucyBmYWxzZS4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0Jik7CisgICAgCisgICAgLy8gQ2FsbHMgY2hlY2soKSBmb3IgdGhvc2UgY29uZGl0aW9ucyB0
aGF0IGFyZW4ndCB0aGUgc2xvdCBiYXNlLCBhbmQgY2FsbHMgbG9hZCgpIGZvciB0aGUgc2xvdAor
ICAgIC8vIGJhc2UuIERvZXMgYSBjb21iaW5hdGlvbiBvZiB3YXRjaHBvaW50IHJlZ2lzdHJhdGlv
biBhbmQgY2hlY2sgZW1pc3Npb24gdG8gZ3VhcmQgdGhlCisgICAgLy8gY29uZGl0aW9ucywgYW5k
IGVtaXRzIGNvZGUgdG8gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2xvdCBiYXNlLiBSZXR1cm5z
IGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0dXJucyBudWxs
IGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyB3ZXJlIG5vIGxvbmdlciBjaGVja2FibGUuCisgICAg
R2V0QnlPZmZzZXRNZXRob2QgcGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmKTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwogCiAgICAgdm9pZCBwcmVw
YXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVhckNhY2hlcygpOwpAQCAtNzA2LDYgKzcz
OCw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVy
ZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0ZSB0byBlbWl0UHJvcGVydHlDaGVjaywgbm90
IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3VycmVudGx5LAorICAgICAgICAvLyB0aGlzIGdl
dHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFByb3BlcnR5Q2hlY2soKSBzaW5jZSB3ZSdsbCBu
b24tYWRhcHRpdmVseSB3YXRjaCB0aGUKKyAgICAgICAgLy8gb2JqZWN0J3Mgc3RydWN0dXJlIGFz
IHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nvc250YW50LgogICAgICAgICBOb2RlKiBvYmpl
Y3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBv
YmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CkBAIC0yMjQwLDE1ICsyMjc1
LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYg
c3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zm
c2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7Ci0gICAg
aWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQg
PSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1ZhbHVlKCksIHN0cnVj
dHVyZVNldCwgb2Zmc2V0KSkgewotICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNl
KTsKLSAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lu
bGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwpAQCAt
MjI2NCw2ICsyMjkyLDE4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dCgKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9CiAKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK3sKKyAgICBpZiAoYmFzZS0+
aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgu
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBv
ZmZzZXQpKSB7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOworICAgICAg
ICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRl
bnRpZmllck51bWJlciwgb2Zmc2V0LCBvcCk7Cit9CisKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFn
ZTsKQEAgLTIyODEsMTAgKzIzMjEsMjA5IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2Vy
OjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikK
K2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24pCit7CisgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9u
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgIGlmICghY29uZGl0aW9uLnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAg
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAgICAgICAgd2Vh
a0pTQ29uc3RhbnQoY29uZGl0aW9uLm9iamVjdCgpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwcm9tb3RlVG9Db25zdGFudChHZXRC
eU9mZnNldE1ldGhvZCBtZXRob2QpCit7CisgICAgaWYgKG1ldGhvZC5raW5kKCkgPT0gR2V0QnlP
ZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlCisgICAgICAgICYmIG1ldGhvZC5wcm90b3R5
cGUoKS0+c3RydWN0dXJlKCktPmRmZ1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAgaWYgKEpTVmFs
dWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkobWV0aG9kLnByb3Rv
dHlwZSgpLT52YWx1ZSgpLCBtZXRob2QucHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLCBtZXRob2Qu
b2Zmc2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kOjpjb25zdGFu
dChtX2dyYXBoLmZyZWV6ZShjb25zdGFudCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWV0
aG9kOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sKKyAgICAvLyBXZSBtaWdo
dCBwcm9tb3RlIHRoaXMgdG8gRXF1aXZhbGVuY2UsIGFuZCBhIGxhdGVyIERGRyBwYXNzIG1pZ2h0
IGFsc28gZG8gc3VjaCBwcm9tb3Rpb24KKyAgICAvLyBldmVuIGlmIHdlIGZhaWwsIGJ1dCBmb3Ig
c2ltcGxpY2l0eSB0aGlzIGNhbm5vdCBiZSBhc2tlZCB0byBsb2FkIGFuIGVxdWl2YWxlbmNlIGNv
bmRpdGlvbi4KKyAgICAvLyBOb25lIG9mIHRoZSBjbGllbnRzIG9mIHRoaXMgbWV0aG9kIHdpbGwg
cmVxdWVzdCBhIGxvYWQgb2YgYW4gRXF1aXZhbGVuY2UgY29uZGl0aW9uIGFueXdheSwKKyAgICAv
LyBhbmQgc3VwcG9ydGluZyBpdCB3b3VsZCBjb21wbGljYXRlIHRoZSBoZXVyaXN0aWNzIGJlbG93
LgorICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRp
b246OlByZXNlbmNlKTsKKyAgICAKKyAgICAvLyBIZXJlJ3MgdGhlIHJhbmtpbmcgb2YgaG93IHRv
IGhhbmRsZSB0aGlzLCBmcm9tIG1vc3QgcHJlZmVycmVkIHRvIGxlYXN0IHByZWZlcnJlZDoKKyAg
ICAvLworICAgIC8vIDEpIFdhdGNocG9pbnQgb24gYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uIGFu
ZCByZXR1cm4gYSBjb25zdGFudCBub2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlLgorICAgIC8vICAg
IE5vIG90aGVyIGNvZGUgaXMgZW1pdHRlZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2Ug
b2JqZWN0IGlzIG5ldmVyIHJlZ2lzdGVyZWQuCisgICAgLy8gICAgSGVuY2UgdGhpcyByZXN1bHRz
IGluIHplcm8gY29kZSBhbmQgd2Ugd29uJ3QgamV0dGlzb24gdGhpcyBjb21waWxhdGlvbiBpZiB0
aGUgb2JqZWN0CisgICAgLy8gICAgdHJhbnNpdGlvbnMsIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZSBp
cyB3YXRjaGFibGUgcmlnaHQgbm93LgorICAgIC8vCisgICAgLy8gMikgTmVlZCB0byBlbWl0IGEg
bG9hZCwgYW5kIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyBnb2luZyB0byBi
ZSB3YXRjaGVkIGJ5IHRoZQorICAgIC8vICAgIERGRyBhbnl3YXkgKGkuZS4gZGZnU2hvdWxkV2F0
Y2gpLiBXYXRjaCB0aGUgc3RydWN0dXJlIGFuZCBlbWl0IHRoZSBsb2FkLiBEb24ndCB3YXRjaCB0
aGUKKyAgICAvLyAgICBjb25kaXRpb24sIHNpbmNlIHRoZSBhY3Qgb2YgdHVybmluZyB0aGUgYmFz
ZSBpbnRvIGEgY29uc3RhbnQgaW4gSVIgd2lsbCBjYXVzZSB0aGUgREZHIHRvCisgICAgLy8gICAg
d2F0Y2ggdGhlIHN0cnVjdHVyZSBhbnl3YXkgYW5kIGRvaW5nIHNvIHdvdWxkIHN1YnN1bWUgd2F0
Y2hpbmcgdGhlIGNvbmRpdGlvbi4KKyAgICAvLworICAgIC8vIDMpIE5lZWQgdG8gZW1pdCBhIGxv
YWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgd2F0Y2hhYmxlIGJ1
dCBub3QgYnkgdGhlCisgICAgLy8gICAgREZHIChpLmUuIHRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkgYW5kICFkZmdTaG91bGRXYXRjaElmUG9zc2libGUoKSkuIFdhdGNoCisg
ICAgLy8gICAgdGhlIGNvbmRpdGlvbiwgYW5kIGVtaXQgYSBsb2FkLgorICAgIC8vCisgICAgLy8g
NCkgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0aGUg
YmFzZSBpcyBub3Qgd2F0Y2hhYmxlLiBFbWl0IGEKKyAgICAvLyAgICBzdHJ1Y3R1cmUgY2hlY2ss
IGFuZCBlbWl0IGEgbG9hZC4KKyAgICAvLworICAgIC8vIDUpIFRoZSBjb25kaXRpb24gZG9lcyBu
b3QgaG9sZC4gR2l2ZSB1cCBhbmQgcmV0dXJuIG51bGwuCisgICAgCisgICAgLy8gTWFrZSBzdXJl
IHdlIGFncmVlIG9uIHdoYXQgdGhlIHN0cnVjdHVyZSBpcyBmb3IgdGhlIHB1cnBvc2Ugb2YgZW1p
dHRpbmcgdGhlc2UgdmFyaW91cworICAgIC8vIGNoZWNrcy4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgLy8gRmly
c3QsIHRyeSB0byBwcm9tb3RlIFByZXNlbmNlIHRvIEVxdWl2YWxlbmNlLiBXZSBkbyB0aGlzIGJl
Zm9yZSBkb2luZyBhbnl0aGluZyBlbHNlCisgICAgLy8gYmVjYXVzZSBpdCdzIHRoZSBtb3N0IHBy
b2ZpdGFibGUuIEFsc28sIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgcHJlc2VuY2UgaXMgd2F0
Y2hhYmxlIGJ1dAorICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gd2F0Y2ggaXQgdW5sZXNzIGl0IGJl
Y2FtZSBhbiBlcXVpdmFsZW5jZSAoc2VlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorICAgIC8v
ICgxKSwgKDIpLCBhbmQgKDMpIGFib3ZlKS4KKyAgICBpZiAoc3RydWN0dXJlLT5pc1ZhbGlkT2Zm
c2V0KGNvbmRpdGlvbi5vZmZzZXQoKSkpIHsKKyAgICAgICAgLy8gVGhpcyBsb2FkIGlzIGZpbmUg
YmVjYXVzZSBvbmx5IHRoZSBHQyBjYW4gY2F1c2UgYSBkZWxldGVkIHByb3BlcnR5IHRvIGhhdmUg
YSBnYXJiYWdlCisgICAgICAgIC8vIHZhbHVlLgorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29u
ZGl0aW9uLm9iamVjdCgpLT5nZXREaXJlY3QoY29uZGl0aW9uLm9mZnNldCgpKTsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VDb25kaXRpb24gPQorICAgICAgICAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisg
ICAgICAgICAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLCBjb25kaXRpb24udWlkKCksIHZhbHVl
KTsKKyAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oZXF1aXZhbGVuY2VDb25kaXRp
b24pKQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kOjpjb25zdGFudChtX2dy
YXBoLmZyZWV6ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3
ZSdsbCBoYXZlIHRvIG1hdGVyaWFsaXplIHRoZSBjb25kaXRpb24ncyBiYXNlIGFzIGEgY29uc3Rh
bnQgaW4gREZHIElSLiBPbmNlCisgICAgLy8gd2UgZG8gdGhpcywgdGhlIGZyb3plbiB2YWx1ZSB3
aWxsIGhhdmUgaXRzIG93biBpZGVhIG9mIHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4gVXNlIHRoYXQg
ZnJvbQorICAgIC8vIG5vdyBvbiBqdXN0IGJlY2F1c2UgaXQncyBsZXNzIGNvbmZ1c2luZy4KKyAg
ICBGcm96ZW5WYWx1ZSogYmFzZSA9IG1fZ3JhcGguZnJlZXplKGNvbmRpdGlvbi5vYmplY3QoKSk7
CisgICAgc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgLy8gQ2hlY2sg
aWYgdGhlIHN0cnVjdHVyZSB0aGF0IHdlJ3ZlIHJlZ2lzdGVyZWQgbWFrZXMgdGhlIGNvbmRpdGlv
biBob2xkLiBJZiBub3QsIGp1c3QgZ2l2ZQorICAgIC8vIHVwLiBUaGlzIGlzIGNhc2UgKDUpIGFi
b3ZlLgorICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1
cmUpKQorICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAKKyAgICAvLyBJ
ZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoZWQgYnkgdGhlIERGRyBhbHJlYWR5LCB0aGVuIGp1c3Qg
dXNlIHRoaXMgZmFjdCB0byBlbWl0IHRoZSBsb2FkLgorICAgIC8vIFRoaXMgaXMgY2FzZSAoMikg
YWJvdmUuCisgICAgaWYgKHN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKKyAgICAgICAgcmV0
dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlw
ZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBJZiB3ZSBjYW4gd2F0
Y2ggdGhlIGNvbmRpdGlvbiByaWdodCBub3csIHRoZW4gd2UgY2FuIGVtaXQgdGhlIGxvYWQgYWZ0
ZXIgd2F0Y2hpbmcgaXQuIFRoaXMKKyAgICAvLyBpcyBjYXNlICgzKSBhYm92ZS4KKyAgICBpZiAo
bV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAgICByZXR1cm4gcHJvbW90
ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNv
bmRpdGlvbi5vZmZzZXQoKSkpOworICAgIAorICAgIC8vIFdlIGNhbid0IHdhdGNoIGFueXRoaW5n
IGJ1dCB3ZSBrbm93IHRoYXQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIHNhdGlzZmllcyB0aGUgY29u
ZGl0aW9uLiBTbywKKyAgICAvLyBjaGVjayBmb3IgdGhhdCBzdHJ1Y3R1cmUgYW5kIHRoZW4gZW1p
dCB0aGUgbG9hZC4KKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwgCisg
ICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAgICAg
ICAgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oYmFzZSkpKTsKKyAgICByZXR1cm4gcHJv
bW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2Us
IGNvbmRpdGlvbi5vZmZzZXQoKSkpOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgK
KyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kLAorICAgIE5vZGVUeXBlIG9wKQogewot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVj
dG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGFk
ZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CisgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKKyAgICAgICAgTm9kZSog
YmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBl
KCkpKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VO
b2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICB9CisgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUg
dGhpcyBmcm9tIHBsYW5Mb2FkKCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitOb2RlKiBCeXRl
Q29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBOb2RlVHlwZSBvcCkKK3sKKyAgICBH
ZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgIHJldHVy
biBsb2FkKHByZWRpY3Rpb24sIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0aW9u
LnVpZCgpKSwgbWV0aG9kLCBvcCk7Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgZm9y
IChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQp
IHsKKyAgICAgICAgaWYgKCFjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRob2QgQnl0
ZUNvZGVQYXJzZXI6OnBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQpCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29uZGl0aW9uU2V0KSB7
CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICBjYXNlIFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1
bHQpOyAvLyBTaG91bGQgb25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhlc2UuCisgICAgICAgICAg
ICByZXN1bHQgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgICAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICghY2hlY2soY29uZGl0
aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghIXJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwgTm9kZVR5cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxh
bkxvYWQoY29uZGl0aW9uU2V0KTsKKyAgICByZXR1cm4gbG9hZCgKKyAgICAgICAgcHJlZGljdGlv
biwKKyAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS51aWQoKSksCisgICAgICAgIG1ldGhvZCwgb3ApOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAor
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJiB2YXJpYW50KQoreworICAgIGFkZFRvR3Jh
cGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50
LnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOworICAgIAorICAgIFNwZWN1bGF0ZWRUeXBlIGxvYWRQ
cmVkaWN0aW9uOworICAgIE5vZGVUeXBlIGxvYWRPcDsKKyAgICBpZiAodmFyaWFudC5jYWxsTGlu
a1N0YXR1cygpKSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gU3BlY0NlbGxPdGhlcjsKKyAg
ICAgICAgbG9hZE9wID0gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbG9hZFByZWRpY3Rpb24gPSBwcmVkaWN0aW9uOworICAgICAgICBsb2FkT3AgPSBHZXRC
eU9mZnNldDsKKyAgICB9CisgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWU7CisgICAgaWYgKCF2
YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBs
b2FkKGxvYWRQcmVkaWN0aW9uLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLCBsb2FkT3ApOworICAg
IGVsc2UgeworICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAg
ICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIGlkZW50
aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICBsb2FkT3ApOworICAg
IH0KKworICAgIC8vIE1ha2Ugc3VyZSBiYWNrd2FyZHMgcHJvcGFnYXRpb24ga25vd3MgdGhhdCB3
ZSd2ZSB1c2VkIGJhc2UuCisgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAKKyAg
ICByZXR1cm4gbG9hZGVkVmFsdWU7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdl
dEJ5SWQoCkBAIC0yMzA3LDE4ICsyNTQ2LDM2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUdldEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmNvbXBp
bGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7Ci0gICAgCisgICAgICAgIFZlY3RvcjxN
dWx0aUdldEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7CisgICAgICAgIAogICAgICAgICAvLyAxKSBF
bWl0IHByb3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwgY2hhaW5zLiBUaGlzIGNvdWxk
IHNvcnQgb2YgbWF5YmUgbm90IGJlCiAgICAgICAgIC8vICAgIG9wdGltYWwsIGlmIHRoZXJlIGlz
IHNvbWUgcmFyZWx5IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNoYWluIHRoYXQgcmVxdWlyZXMgYSBs
b3QKICAgICAgICAgLy8gICAgb2YgY2hlY2tzIGFuZCB0aG9zZSBjaGVja3MgYXJlIG5vdCB3YXRj
aHBvaW50YWJsZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBnZXRCeUlk
U3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykKLSAgICAgICAgICAgIGVtaXRD
aGVja3MoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkpOwotICAg
ICAgICAKKyAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IGdldEJ5
SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKAorICAgICAg
ICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBHZXRC
eU9mZnNldE1ldGhvZDo6bG9hZCh2YXJpYW50Lm9mZnNldCgpKSkpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBHZXRC
eU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZCh2YXJpYW50LmNvbmRpdGlvblNldCgpKTsK
KyAgICAgICAgICAgIGlmICghbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBiYXNlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoTXVsdGlHZXRCeU9mZnNldENhc2UodmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSwgbWV0aG9kKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigp
LT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOworICAgIAogICAgICAgICAvLyAyKSBFbWl0IGEgTXVs
dGlHZXRCeU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMg
PSBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPmNhc2VzID0gY2FzZXM7
CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksCiAgICAgICAgICAg
ICBhZGRUb0dyYXBoKE11bHRpR2V0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBiYXNlKSk7CkBAIC0yMzI4LDMwICsyNTg1LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgQVNTRVJUKGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMo
KSA9PSAxKTsKICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZ2V0QnlJZFN0YXR1c1swXTsK
ICAgICAgICAgICAgICAgICAKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQocHJlZGljdGlv
biwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CisgICAgaWYgKCFsb2FkZWRWYWx1
ZSkgeworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksCisg
ICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9u
KCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7CiAgICAgCi0gICAgTm9kZSogb3JpZ2luYWxCYXNl
ID0gYmFzZTsKLSAgICAgICAgICAgICAgICAKLSAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkp
LCBiYXNlKTsKLSAgICAKLSAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7
Ci0KLSAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAgICAgIGJhc2UgPSB3ZWFr
SlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgCi0gICAgLy8gVW5sZXNz
IHdlIHdhbnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04ODc4Mywgd2UgbmVlZCB0bwotICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBiYXNlIG9mIHRoZSBv
cmlnaW5hbCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGgKLSAg
ICAvLyBhbGwgb2YgdGhlIHNwZWN1bGF0aW9ucy4gV2Ugb25seSBpbnNlcnQgdGhlIFBoYW50b20g
aWYgdGhlcmUgaGFkIGJlZW4gYSBDaGVja1N0cnVjdHVyZQotICAgIC8vIG9uIHNvbWV0aGluZyBv
dGhlciB0aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tTdHJ1Y3R1cmUgb24gYmFzZS4K
LSAgICBpZiAob3JpZ2luYWxCYXNlICE9IGJhc2UpCi0gICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgb3JpZ2luYWxCYXNlKTsKLSAgICAKLSAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdl
dEJ5T2Zmc2V0KAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVjQ2VsbE90
aGVyIDogcHJlZGljdGlvbiwKLSAgICAgICAgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCks
IGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgIHZhcmlhbnQuY2Fs
bExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZzZXQpOwot
ICAgIAogICAgIGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CiAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgbG9hZGVkVmFsdWUpOwogICAgICAg
ICByZXR1cm47CkBAIC0yMzg4LDcgKzI2MzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVHZXRCeUlkKAogICAgIC8vICAgIHNpbmNlIHdlIG9ubHkgcmVhbGx5IGNhcmUgYWJvdXQgJ3Ro
aXMnIGluIHRoaXMgY2FzZS4gQnV0IHdlJ3JlIG5vdCBnb2luZyB0byB0YWtlIHRoYXQKICAgICAv
LyAgICBzaG9ydGN1dC4KICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4
dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQp
OwogICAgIAogICAgIGhhbmRsZUNhbGwoCiAgICAgICAgIGRlc3RpbmF0aW9uT3BlcmFuZCwgQ2Fs
bCwgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9p
ZCksCkBAIC0yNDIyLDE3ICsyNjY1LDIwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0
aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Ci0gICAgICAgIAogICAgICAgICBpZiAoIWlz
RGlyZWN0KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5
SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIGVtaXRDaGVja3MocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hl
Y2tzKCkpOworICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlJZFN0YXR1c1t2YXJpYW50
SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJ
ZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3Qp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9ncmFwaC5jb21waWxh
dGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVk
UHV0QnlJZCgpOworICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEg
PSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPnZh
cmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlm
aWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKQEAgLTI0NTQsNyArMjcwMCwxMCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIAogICAgIGNhc2UgUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwg
YmFzZSk7Ci0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKKyAg
ICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMs
IGlzRGlyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIEFT
U0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgCkBAIC0yNTA1LDE5ICsyNzU0LDEx
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsKLSAgICAgICAgTm9kZSogb3JpZ2lu
YWxCYXNlID0gYmFzZTsKLSAgICAgICAgCi0gICAgICAgIGFkZFRvR3JhcGgoCi0gICAgICAgICAg
ICBDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQu
c3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgIAotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlh
bnQuY29uc3RhbnRDaGVja3MoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAodmFyaWFudC5hbHRl
cm5hdGVCYXNlKCkpCi0gICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5h
bHRlcm5hdGVCYXNlKCkpOwotICAgICAgICAKLSAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBo
YW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgIFNwZWNDZWxsT3RoZXIsIGJhc2UsIHZhcmlh
bnQuYmFzZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAot
ICAgICAgICAgICAgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQpOworICAgICAgICBOb2RlKiBsb2Fk
ZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFy
aWFudCk7CisgICAgICAgIGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAgICAgICAgIGVtaXRQdXRC
eUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVj
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE5v
ZGUqIHNldHRlciA9IGFkZFRvR3JhcGgoR2V0U2V0dGVyLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAg
IApAQCAtMjU0NSw3ICsyNzg2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJ
ZCgKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xv
Y2FsKCkpOwogICAgIAogICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQg
KyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7Cisg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlh
dGVOYWtlZFNldCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKysp
LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgIAogICAgICAgICBoYW5kbGVDYWxsKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZp
c2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw5IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFs
aWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5j
aGVjayhpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwogICAgICAg
ICB9CiAgICAgfQorICAgIAorICAgIGZvciAoQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3
YXRjaHBvaW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cykKKyAgICAgICAgd2F0Y2hw
b2ludC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBA
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIK
KyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIK
ICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJh
bWVTZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk4LDYgKzEwMCw4IEBAIHB1YmxpYzoK
ICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOwogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8U3RydWN0dXJlPj4gd2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAg
ICAgQmFnPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gd2F0Y2hwb2ludHM7CisgICAg
QmFnPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50czsKKyAgICBCYWc8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBh
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1w
UmVwbGFjZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7CiAgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVy
OjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg3
NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCwyMSArMjk0LDIwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2gg
Q0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAg
ICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1
bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5zdHJ1
Y3R1cmVTZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZh
cmlhbnQuc3RydWN0dXJlU2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhLnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRzLmxhc3QoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEudmFyaWFudHMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNlID0gZGF0YS5jYXNl
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0Q2FzZS5zZXQoKS5maWx0ZXIoYmFzZVZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdldENhc2Uuc2V0KCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzW2ktLV0gPSBkYXRhLmNhc2VzLmxhc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMucmVtb3ZlTGFzdCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKGRhdGEudmFyaWFudHMuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgaWYgKGRhdGEu
Y2FzZXMuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldCgKLSAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIGRhdGEudmFyaWFudHNbMF0sIGRh
dGEuaWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGlu
ZGV4SW5CbG9jaywgbm9kZSwgZGF0YS5jYXNlc1swXS5tZXRob2QoKSwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM3NCw4ICszNzMsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25zdGFudENoZWNrcygpLmlzRW1wdHkoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUg
cHJvdG90eXBlIGNhc2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4NgogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zOTIsNyArMzkwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlP
ZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwot
ICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gc3RhdHVzLnZhcmlhbnRzKCk7CisgICAg
ICAgICAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52
YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzLmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJl
ciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvTXVs
dGlHZXRCeU9mZnNldChkYXRhKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAg
LTQzMiw5ICs0MzUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZh
cmlhbnRzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIGFkZENoZWNrcyhvcmlnaW4sIGlu
ZGV4SW5CbG9jaywgc3RhdHVzW2ldLmNvbnN0YW50Q2hlY2tzKCkpOworCisgICAgICAgICAgICAg
ICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShz
dHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IENoZWNrU3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdp
biwgY29uZGl0aW9uLm9iamVjdCgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID09IDEpIHsKICAgICAgICAgICAgICAgICAg
ICAgZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNb
MF0sIGlkZW50aWZpZXJOdW1iZXIpOwpAQCAtNTI5LDQxICs1NTQsNjggQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVt
aXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEdl
dEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2QsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAg
eworICAgICAgICAvLyBXaGVuIHdlIGdldCB0byBoZXJlIHdlIGhhdmUgYWxyZWFkeSBlbWl0dGVk
IGFsbCBvZiB0aGUgcmVxdWlzaXRlIGNoZWNrcyBmb3IgZXZlcnl0aGluZy4KKyAgICAgICAgLy8g
U28sIHdlIGp1c3QgbmVlZCB0byBlbWl0IHdoYXQgdGhlIG1ldGhvZCBvYmplY3QgdGVsbHMgdXMg
dG8gZW1pdC4KICAgICAgICAgCisgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgICAg
IG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbWV0aG9kLmNvbnN0YW50KCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRN
ZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBu
b2RlLCBub2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICAgICAgTm9kZSogY2hpbGQg
PSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIG5vZGUtPm9yaWdpbiwgbWV0aG9kLnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIGVt
aXRHZXRCeU9mZnNldCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVkZ2Uo
Y2hpbGQsIEtub3duQ2VsbFVzZSksIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0R2V0
QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFj
dFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBu
b2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAK
ICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJp
YW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZUZvckxv
YWQ7Ci0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJh
c2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZVZhbHVlLm1fdmFsdWU7Ci0gICAgICAgIGlmIChKU1Zh
bHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2FkLCB2
YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgLy8g
V2UgYXJlbid0IHNldCB1cCB0byBoYW5kbGUgcHJvdG90eXBlIHN0dWZmLgorICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsK
KworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eShiYXNlVmFsdWUubV92YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgdmFyaWFudC5v
ZmZzZXQoKSkpIHsKICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwg
bV9ncmFwaC5mcmVlemUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5C
bG9jaywgb3JpZ2luLCB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGls
ZEVkZ2UgPSBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRH
ZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zm
c2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAg
ICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGlu
ZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9m
ZnNldCkpCiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdl
dEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG5vZGUtPm9yaWdpbiwgY2hpbGRFZGdlKSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0g
Km1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS5vZmZzZXQg
PSB2YXJpYW50Lm9mZnNldCgpOworICAgICAgICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAg
ICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgCiAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7
CkBAIC02NDMsMTUgKzY5NSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnRDaGVjayhpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZENoZWNrcygKLSAgICAgICAgTm9kZU9yaWdpbiBv
cmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVj
a1ZlY3RvciYgY2hlY2tzKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNoZWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBjaGVja3NbaV0u
Y29uc3RhbnQoKSwgY2hlY2tzW2ldLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQog
ICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1
bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgewogICAgICAgICBpZiAobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5zdHJ1
Y3R1cmUoKSkgPT0gU3RydWN0dXJlUmVnaXN0ZXJlZEFuZFdhdGNoZWQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShy
ZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmll
dyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBX
YXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2sp
OwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2lu
dCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2Rl
QmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hw
b2ludCk7CkBAIC00NSwxMCArNDYsMjMgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9p
bnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUq
IGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFk
ZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0
IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBn
byBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9p
bnQpOworICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVC
bG9jaykpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFk
ZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkg
eworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBjb21t
b24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2Rl
QmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGNvbW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jaykt
Pmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hwb2lu
dHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6
aWx5KHZpZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVy
ZVNldHMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25z
aWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hv
dWxkV2F0Y2goKSkKQEAgLTg4LDYgKzEwNyw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpy
ZWFsbHlBZGQoQ29kZUIKICAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29t
bW9uRGF0YSk7CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21t
b25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRh
dGEpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNv
bW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgp
IGNvbnN0CkBAIC05NSw3ICsxMTUsOCBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3Rp
bGxWYWxpZCgpCiAgICAgcmV0dXJuIG1fc2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYg
bV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2luZmVycmVkVmFsdWVz
LmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQo
KTsKKyAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYg
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5m
ZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KIApAQCAtNDEsMTUgKzQyLDE1IEBAIGNsYXNzIEdyYXBoOwog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdlbmVyaWNTZXRBZGFwdG9yIHsKLSAgICBz
dGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgVCBzZXQsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQp
CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBUIHNldCwgQ29tbW9u
RGF0YSYgY29tbW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNldC0+YWRkKHdhdGNocG9pbnQp
OworICAgICAgICByZXR1cm4gc2V0LT5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxv
Y2spKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQgc2V0KSB7
IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9CiB9OwogCiBzdHJ1Y3QgSW5mZXJy
ZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJl
ZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJ
bmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZh
bGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwpAQCAtNTcsMTIgKzU4LDE4
IEBAIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7CiB9OwogCiBzdHJ1Y3QgQXJyYXlCdWZm
ZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sq
LCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQo
Q29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGlj
IGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsK
LSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdURjo6bG9h
ZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gIXZp
ZXctPmxlbmd0aCgpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFz
QmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gIWtleS5pc1dhdGNoYWJsZSgpOwogICAgIH0KIH07CiAKQEAgLTg3
LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWFsbHlBZGRl
ZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8mIHNldCA6IG1fc2V0cykKLSAgICAgICAg
ICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uLndhdGNocG9pbnRzLmFkZChj
b2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29t
bW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQgPSB0cnVlOwogICAgIH0KQEAg
LTEyMiw2ICsxMjksMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFs
dWUqKTsKICAgICB2b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAorICAg
IC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBV
c2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWly
ZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgorICAgIHZvaWQg
YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9v
bCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxv
Y2sqLCBDb21tb25EYXRhJik7CkBAIC0xNDQsMTIgKzE1NSwxNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAgfQorICAg
IGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7
CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPFdh
dGNocG9pbnRTZXQqPiBtX3NldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmxp
bmVXYXRjaHBvaW50U2V0Kj4gbV9pbmxpbmVTZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFs
dWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBB
cnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKKyAgICBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDE4
NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVu
Y2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCwxNCBAQCBEZXNpcmVkV2Vha1Jl
ZmVyZW5jZXM6On5EZXNpcmVkV2Vha1JlZmVyCiAKIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
OjphZGRMYXppbHkoSlNDZWxsKiBjZWxsKQogewotICAgIG1fcmVmZXJlbmNlcy5hZGQoY2VsbCk7
CisgICAgaWYgKGNlbGwpCisgICAgICAgIG1fcmVmZXJlbmNlcy5hZGQoY2VsbCk7Cit9CisKK3Zv
aWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXppbHkoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFkZExhemlseSh2YWx1ZS5hc0NlbGwoKSk7
CiB9CiAKIGJvb2wgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpjb250YWlucyhKU0NlbGwqIGNlbGwp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdl
YWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQs
NiArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgCiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpT
Q2VsbDsKK2NsYXNzIEpTVmFsdWU7CiBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCkBA
IC00OCw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICB+RGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7CiAK
ICAgICB2b2lkIGFkZExhemlseShKU0NlbGwqKTsKKyAgICB2b2lkIGFkZExhemlseShKU1ZhbHVl
KTsKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRk
KFZNJiwgQ29tbW9uRGF0YSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsOCArMjU3LDggQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChub2RlLT5oYXNNdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9k
ZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQi
LCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZp
ZXJOdW1iZXJdLCAifSIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52
YXJpYW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250
ZXh0KGRhdGEudmFyaWFudHNbaV0sIGNvbnRleHQpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIGluQ29udGV4dChkYXRhLmNhc2VzW2ldLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGlm
IChub2RlLT5oYXNNdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpUHV0QnlP
ZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKQEAgLTg0OCw2
ICs4NDgsMzAgQEAgdm9pZCBHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZUZsYQogICAg
IH0KIH0KIAorYm9vbCBHcmFwaDo6d2F0Y2hDb25kaXRpb24oY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1dhdGNoYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShr
ZXkub2JqZWN0KCkpOworICAgIGlmIChrZXkuaGFzUHJvdG90eXBlKCkpCisgICAgICAgIG1fcGxh
bi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5LnByb3RvdHlwZSgpKTsKKyAgICBpZiAoa2V5
Lmhhc1JlcXVpcmVkVmFsdWUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExh
emlseShrZXkucmVxdWlyZWRWYWx1ZSgpKTsKKyAgICAKKyAgICBtX3BsYW4ud2F0Y2hwb2ludHMu
YWRkTGF6aWx5KGtleSk7CisKKyAgICBpZiAoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlv
bjo6UHJlc2VuY2UpCisgICAgICAgIG1fc2FmZVRvTG9hZC5hZGQoc3RkOjptYWtlX3BhaXIoa2V5
Lm9iamVjdCgpLCBrZXkub2Zmc2V0KCkpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCit7CisgICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhzdGQ6Om1ha2VfcGFp
cihiYXNlLCBvZmZzZXQpKTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZl
bmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayos
IHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0g
bV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAgLTEwMjAsOCArMTA0NCwxMiBA
QCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTCiBKU1ZhbHVlIEdyYXBo
Ojp0cnlHZXRDb25zdGFudFByb3BlcnR5KAogICAgIEpTVmFsdWUgYmFzZSwgY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0g
ICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKQorICAg
IGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgeworICAg
ICAgICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwg
d2UgY291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KKyAgICAgICAgLy8gd2F0Y2hpbmcg
dG8gY29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKKyAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZSwg
c3RydWN0dXJlLnNldCgpLCBvZmZzZXQpOwogfQpAQCAtMTE2NywxNyArMTE5NSw5IEBAIHZvaWQg
R3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gc2V0LnNpemUoKTsgai0tOykKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyBEb24ndCBuZWVkIHRvIG1hcmsgYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFp
biBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRl
Y29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIG1hcmsgdGhlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3Qg
dXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAv
LyB2YXJpYW50cyBkaWQgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50
LmNhbGxMaW5rU3RhdHVzKCkpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRC
eU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2Vz
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiBnZXRD
YXNlLnNldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5UG9pbnRlcihzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2NSw2ICs2NjUsMTUg
QEAgcHVibGljOgogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVy
biBtX3BsYW4uaWRlbnRpZmllcnM7IH0KICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNocG9p
bnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAgCisgICAgLy8gUmV0dXJu
cyBmYWxzZSBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW52YWxpZCBvciB1bndhdGNoYWJsZS4gSWYg
dGhpcyBpcyBhIFByZXNlbmNlIGNvbmRpdGlvbiwKKyAgICAvLyB0aGlzIGFsc28gbWFrZXMgaXQg
Y2hlYXAgdG8gcXVlcnkgaWYgdGhlIGNvbmRpdGlvbiBob2xkcy4gQWxzbyBtYWtlcyBzdXJlIHRo
YXQgdGhlIEdDIGtub3dzCisgICAgLy8gd2hhdCdzIGdvaW5nIG9uLgorICAgIGJvb2wgd2F0Y2hD
b25kaXRpb24oY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIC8vIENoZWNr
cyBpZiBpdCdzIGtub3duIHRoYXQgbG9hZGluZyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgYXQgdGhl
IGdpdmVuIG9mZnNldCBpcyBmaW5lLiBUaGlzIGlzCisgICAgLy8gY29tcHV0ZWQgYnkgdHJhY2tp
bmcgd2hpY2ggY29uZGl0aW9ucyB3ZSB0cmFjayB3aXRoIHdhdGNoQ29uZGl0aW9uKCkuCisgICAg
Ym9vbCBpc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAK
ICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAg
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwogICAg
IApAQCAtODQ0LDYgKzg1Myw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVE
YXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0
ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsK
ICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxzPj4g
bV9ieXRlY29kZUtpbGxzOworICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJvcGVy
dHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7CiAg
ICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7CiAgICAgTmF0dXJhbExvb3Bz
IG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0
aUdldEJ5T2Zmc2V0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdGcm96
ZW5WYWx1ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit2b2lkIEdldEJ5T2Zmc2V0TWV0aG9kOjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX2tpbmQsICI6Iik7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEludmFs
aWQ6CisgICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRleHQoY29u
c3RhbnQoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOgorICAg
ICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2Fk
RnJvbVByb3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KG9mZnNldCgpLCAiQCIsIHBvaW50ZXJE
dW1wSW5Db250ZXh0KHByb3RvdHlwZSgpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgTXVs
dGlHZXRCeU9mZnNldENhc2U6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGluQ29udGV4dChtX3NldCwg
Y29udGV4dCksICI6IiwgaW5Db250ZXh0KG1fbWV0aG9kLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQg
TXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEdldEJ5T2Zmc2V0TWV0aG9kOjpL
aW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeU9mZnNldE1l
dGhvZDo6SW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgb3V0
LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6TG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZToKKyAgICAg
ICAgb3V0LnByaW50KCJMb2FkRnJvbVByb3RvdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YV9oCisjZGVmaW5lIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKKyNpbmNsdWRlICJKU09iamVj
dC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEZyb3plblZhbHVlOworCitjbGFzcyBHZXRCeU9mZnNldE1ldGhv
ZCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAg
Q29uc3RhbnQsCisgICAgICAgIExvYWQsCisgICAgICAgIExvYWRGcm9tUHJvdG90eXBlCisgICAg
fTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCgpCisgICAgICAgIDogbV9raW5kKEludmFs
aWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0QnlPZmZzZXRNZXRob2QgY29u
c3RhbnQoRnJvemVuVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRo
b2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJl
c3VsdC51LmNvbnN0YW50ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBsb2FkKFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IExvYWQ7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0gb2Zm
c2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0
QnlPZmZzZXRNZXRob2QgbG9hZEZyb21Qcm90b3R5cGUoRnJvemVuVmFsdWUqIHByb3RvdHlwZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Qg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZEZyb21Qcm90b3R5cGU7CisgICAg
ICAgIHJlc3VsdC51LmxvYWQucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXN1bHQu
dS5sb2FkLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxp
ZDsgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAg
IAorICAgIEZyb3plblZhbHVlKiBjb25zdGFudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIHUuY29uc3RhbnQ7CisgICAg
fQorICAgIAorICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiB1
LmxvYWQucHJvdG90eXBlOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkIHx8IGtpbmQoKSA9
PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiB1LmxvYWQub2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4
dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIEZyb3plblZhbHVlKiBjb25zdGFudDsKKyAgICAg
ICAgc3RydWN0IHsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGU7CisgICAgICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gbG9hZDsKKyAgICB9IHU7Cisg
ICAgS2luZCBtX2tpbmQ7Cit9OworCitjbGFzcyBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSB7CitwdWJs
aWM6CisgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
TXVsdGlHZXRCeU9mZnNldENhc2UoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIGNvbnN0IEdldEJ5
T2Zmc2V0TWV0aG9kJiBtZXRob2QpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAgICAgICAsIG1f
bWV0aG9kKG1ldGhvZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgc2V0
KCkgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2V0OyB9CisgICAgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWV0aG9kOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJ1Y3R1cmVTZXQgbV9zZXQ7CisgICAg
R2V0QnlPZmZzZXRNZXRob2QgbV9tZXRob2Q7Cit9OworCitzdHJ1Y3QgTXVsdGlHZXRCeU9mZnNl
dERhdGEgeworICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CisgICAgVmVjdG9yPE11bHRp
R2V0QnlPZmZzZXRDYXNlLCAyPiBjYXNlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2lu
Y2x1ZGUgIkRGR0Vwb2NoLmgiCiAjaW5jbHVkZSAiREZHTGF6eUpTVmFsdWUuaCIKKyNpbmNsdWRl
ICJERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIgogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgog
I2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgpAQCAt
NjUsMTEgKzY2LDYgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyOwogfTsKIAotc3RydWN0IE11bHRpR2V0QnlPZmZzZXREYXRhIHsKLSAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxHZXRCeUlkVmFyaWFudCwg
Mj4gdmFyaWFudHM7Ci19OwotCiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewogICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiAgICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAyPiB2
YXJpYW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDEwICszMjgsMTggQEAgYm9v
bCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OiB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5vZGUtPnN0b3JhZ2VBY2Nl
c3NEYXRhKCkub2Zmc2V0OworCisgICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkgeworICAgICAgICAgICAgaWYgKEpTT2JqZWN0
KiBrbm93bkJhc2UgPSBub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVj
dCo+KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3JhcGguaXNTYWZlVG9Mb2FkKGtub3duQmFz
ZSwgb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUm
IHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CiAgICAg
ICAgIGlmICh2YWx1ZS5pc0luZmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCku
b2Zmc2V0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIGlmICghdmFsdWVbaV0tPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDEsNDIgKzM0OSwyOCBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlH
ZXRCeU9mZnNldDogewogICAgICAgICAvLyBXZSBjYW4ndCBhbHdheXMgZ3VhcmFudGVlIHRoYXQg
dGhlIE11bHRpR2V0QnlPZmZzZXQgaXMgc2FmZSB0byBleGVjdXRlIGlmIGl0Ci0gICAgICAgIC8v
IGNvbnRhaW5zIGxvYWRzIGZyb20gcHJvdG90eXBlcy4gV2Uga25vdyB0aGF0IGl0IHdvbid0IGxv
YWQgZnJvbSB0aG9zZSBwcm90b3R5cGVzIGlmCi0gICAgICAgIC8vIHdlIHdhdGNoIHRoZSBtdXRh
YmlsaXR5IG9mIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGxvYWRlZC4gU28sIGhlcmUgd2UgdHJ5IHRv
Ci0gICAgICAgIC8vIGNvbnN0YW50LWZvbGQgcHJvdG90eXBlIGxvYWRzLCBhbmQgaWYgdGhhdCBm
YWlscywgd2UgY2xhaW0gdGhhdCB3ZSBjYW5ub3QgaG9pc3QuIFdlCi0gICAgICAgIC8vIGFsc28g
a25vdyB0aGF0IGEgbG9hZCBpcyBzYWZlIHRvIGV4ZWN1dGUgaWYgd2UgYXJlIHdhdGNoaW5nIHRo
ZSBwcm90b3R5cGUncwotICAgICAgICAvLyBzdHJ1Y3R1cmUuCi0gICAgICAgIGZvciAoY29uc3Qg
R2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIXZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBwcm90b3R5cGUgbG9hZC4KLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
SlNWYWx1ZSBiYXNlID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgICAgICBGcm96
ZW5WYWx1ZSogZnJvemVuID0gZ3JhcGguZnJlZXplKGJhc2UpOwotICAgICAgICAgICAgaWYgKHN0
YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkCi0gICAg
ICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKQotICAg
ICAgICAgICAgICAgICYmIGZyb3plbi0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQodmFyaWFu
dC5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHdhdGNoaW5n
IHRoYXQgaXQncyBzYWZlIHRvIGxvYWQgZnJvbSB0aGlzLgotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGNv
bnN0YW50UmVzdWx0ID0gZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAg
ICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZh
cmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewotICAg
ICAgICAgICAgICAgIC8vIENvdWxkbid0IGNvbnN0YW50LWZvbGQgYSBwcm90b3R5cGUgbG9hZC4g
VGhlcmVmb3JlLCB3ZSBzaG91bGRuJ3QgaG9pc3QKLSAgICAgICAgICAgICAgICAvLyBiZWNhdXNl
IHRoZSBzYWZldHkgb2YgdGhlIGxvYWQgZGVwZW5kcyBvbiBzdHJ1Y3R1cmUgY2hlY2tzIG9uIHRo
ZSBwcm90b3R5cGUsCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlJ3JlIHRvbyBjaGVhcCB0byB2
ZXJpZnkgdGhhdCBoZXJlLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
Ly8gY29udGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5cGVzLiBJZiB0aGUgbG9hZCByZXF1aXJlcyBh
IGNoZWNrIGluIElSLCB3aGljaCBpcyByYXJlLCB0aGVuCisgICAgICAgIC8vIHdlIGN1cnJlbnRs
eSBjbGFpbSB0aGF0IHdlIGRvbid0IGtub3cgaWYgaXQncyBzYWZlIHRvIGV4ZWN1dGUgYmVjYXVz
ZSBmaW5kaW5nIHRoYXQKKyAgICAgICAgLy8gY2hlY2sgaW4gdGhlIGFic3RyYWN0IHN0YXRlIHdv
dWxkIGJlIGhhcmQuIElmIHRoZSBsb2FkIHJlcXVpcmVzIHdhdGNocG9pbnRzLCB3ZSBqdXN0Cisg
ICAgICAgIC8vIGNoZWNrIGlmIHdlJ3JlIG5vdCBpbiBhIGNsb2JiZXJlZCBzdGF0ZSAoaS5lLiBp
biBiZXR3ZWVuIGEgc2lkZSBlZmZlY3QgYW5kIGFuCisgICAgICAgIC8vIGludmFsaWRhdGlvbiBw
b2ludCkuCisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2Ug
OiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAgICAgICBHZXRC
eU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhvZCgpOworICAgICAgICAgICAgc3dp
dGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpJbnZhbGlkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpDb25zdGFudDogLy8gT0sgYmVjYXVzZSBjb25zdGFudHMgYXJlIGFsd2F5cyBzYWZlIHRv
IGV4ZWN1dGUuCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOiAvLyBP
SyBiZWNhdXNlIHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGhhcyBpdHMgb3duIGNoZWNrcyBmb3IgbG9h
ZGluZyBmcm9tIHNlbGYuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgICAgICAgICAv
LyBPbmx5IE9LIGlmIHRoZSBzdGF0ZSBpc24ndCBjbG9iYmVyZWQuIFRoYXQncyBhbG1vc3QgYWx3
YXlzIHRoZSBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUoKSAhPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghZ3JhcGguaXNTYWZlVG9Mb2FkKG1ldGhv
ZC5wcm90b3R5cGUoKS0+Y2FzdDxKU09iamVjdCo+KCksIG1ldGhvZC5vZmZzZXQoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3
aWxsIGVpdGhlcjoKLSAgICAgICAgICAgIC8vIC0gTm90IGxvYWQgZnJvbSB0aGUgcHJvdG90eXBl
IGJlY2F1c2UgY29uc3RhbnQgZm9sZGluZyB3aWxsIHN1Y2NlZWQgaW4gdGhlCi0gICAgICAgICAg
ICAvLyAgIGJhY2tlbmQsIG9yCi0gICAgICAgICAgICAvLyAtIEVtaXQgaW52YWxpZCBjb2RlIHRo
YXQgZmFpbHMgd2F0Y2hwb2ludCBjaGVja3MuIFRoaXMgY291bGQgaGFwcGVuIGlmIHRoZQotICAg
ICAgICAgICAgLy8gICBwcm9wZXJ0eSBiZWNvbWVzIG11dGFibGUgYWZ0ZXIgdGhpcyBwb2ludCwg
c2luY2Ugd2UgYWxyZWFkeSBzZXQgdGhlIHdhdGNocG9pbnQKLSAgICAgICAgICAgIC8vICAgYWJv
dmUuIFRoaXMgY2FzZSBpcyBPSyBzaW5jZSB0aGUgY29kZSB3aWxsIGZhaWwgd2F0Y2hwb2ludCBj
aGVja3MgYW5kIG5ldmVyCi0gICAgICAgICAgICAvLyAgIGdldCBpbnN0YWxsZWQuCiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNSArODYs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCku
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHZXRCeUlk
VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNb
aV07Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZXModmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRv
IHdhdGNoIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxk
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENo
ZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gd2F0Y2ggdGhlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdl
dEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlh
bnRzIGRpZCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNh
bGxMaW5rU3RhdHVzKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0
aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0
ZXJTdHJ1Y3R1cmVzKGdldENhc2Uuc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcwLDI0ICszODcwLDI0
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0
YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKIAotICAgICAgICBpZiAoZGF0YS52
YXJpYW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGRhdGEuY2FzZXMuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24g
d2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2UgdGhhdC4KICAgICAgICAgICAgIHRl
cm1pbmF0ZShCYWRDYWNoZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEudmFyaWFudHMu
c2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7
IGktLTspCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEuY2FzZXMu
c2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGkt
LTspCiAgICAgICAgICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRp
R2V0QnlPZmZzZXQgY2FzZSAiLCBpKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGV4aXQgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgZmFpbCIpKTsKICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5
T2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxTd2l0Y2hD
YXNlLCAyPiBjYXNlczsKICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyBqLS07KSB7
Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YXJpYW50LnN0cnVjdHVy
ZVNldCgpW2pdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9IGRhdGEu
Y2FzZXNbaV07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBnZXRDYXNlLnNldCgpLnNp
emUoKTsgai0tOykgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0
Q2FzZS5zZXQoKVtqXTsKICAgICAgICAgICAgICAgICBiYXNlU2V0LmFkZChzdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmVJRChz
dHJ1Y3R1cmUpLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwogICAgICAgICAgICAgfQpAQCAtMzg5
OCwyOSArMzg5OCwzNiBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0Lm1fbmV4dEJsb2NrOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJs
b2NrLCAyPiByZXN1bHRzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBp
ICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAg
ICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhvZCgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwg
ZGF0YS5jYXNlcy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwot
ICAgICAgICAgICAgYmFzZVNldC5tZXJnZSh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAg
ICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0
OwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc3RhbnRSZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0g
ICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJhc2VT
dHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoY29uc3RhbnRSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuY29u
c3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnRSZXN1bHQpKTsKLSAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkNvbnN0YW50OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNW
YWx1ZTo6ZW5jb2RlKG1ldGhvZC5jb25zdGFudCgpLT52YWx1ZSgpKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpMb2FkOgorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZy
b21Qcm90b3R5cGU6IHsKICAgICAgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHlCYXNlOwotICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
OwotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtpbmQo
KSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZCkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlCYXNlID0gYmFzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KHZhcmlh
bnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLmFz
Q2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KG1ldGhvZC5vZmZz
ZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQdHIo
cHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5KHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVt
YmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBsb2FkUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSwg
ZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hC
eUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCiAg
ICAgYm9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1w
dXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRG
b3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29k
ZUJsb2NrKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7CkBAIC0xMzIsNDcgKzEzMiwzMyBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nl
c3MoCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KAotICAgIEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNyb0Fzc2VtYmxl
ciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNj
cmF0Y2hHUFIpCi17Ci0gICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYm
IHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgewotICAg
ICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0dWJJbmZvLmFkZFdhdGNo
cG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAg
ICAgICAgICAvLyBJZiB3ZSBleGVjdXRlIHRoaXMgY29kZSwgdGhlIG9iamVjdCBtdXN0IGhhdmUg
dGhlIHN0cnVjdHVyZSB3ZSBleHBlY3QuIEFzc2VydAotICAgICAgICAgICAgLy8gdGhpcyBpbiBk
ZWJ1ZyBtb2Rlcy4KLSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb2sgPSBicmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAgICAgaml0LAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBqaXQuYWJvcnRXaXRo
UmVhc29uKFJlcGF0Y2hJbmVmZmVjdGl2ZVdhdGNocG9pbnQpOwotICAgICAgICAgICAgb2subGlu
aygmaml0KTsKLSAgICAgICAgfQorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3Jv
QXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIEdQ
UlJlZyBzY3JhdGNoR1BSKQoreworICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgIGNvbmRpdGlvbi5vYmplY3Qo
KS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAorICAgICAgICAgICAgc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRpdGlvbikpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIAotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOworCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBj
b25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRp
dGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludChzdHJ1Y3R1cmUpKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKAotICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoaml0LAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0
cnVjdHVyZSkpOworICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICBqaXQsIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkp
OwogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNW
YWx1ZSBwcm90b3R5cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChwcm90b3R5
cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBl
LmlzQ2VsbCgpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAg
ICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hH
UFIpOworc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikK
K3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBz
ZXQpIHsKKyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICAgICAgICAg
IGNvbmRpdGlvbiwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFJlcGF0Y2hC
dWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKQEAgLTI5NiwxMSArMjgyLDEyIEBAIHN0YXRp
YyBGdW5jdGlvblB0ciBjdXN0b21Gb3IoY29uc3QgUHV0UHIKIAogc3RhdGljIGJvb2wgZ2VuZXJh
dGVCeUlkU3R1YigKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNv
dW50LAorICAgIEZ1bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdl
dEZyb21Qcm94eSwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwKICAgICBDb2RlTG9jYXRp
b25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewotCisgICAgQVNTRVJUKGNvbmRp
dGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpKTsKKyAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBHUFJSZWcg
YmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CiAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCkBAIC0zNDYsMzcgKzMzMywy
OSBAQCBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIH0KIAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0Lm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hw
b2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2lu
dChjb2RlQmxvY2spKTsKIAogICAgIGlmICh3YXRjaHBvaW50U2V0KQogICAgICAgICB3YXRjaHBv
aW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAgIFN0
cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsgCi0gICAgSlNPYmplY3QqIHByb3Rv
T2JqZWN0ID0gMDsKLSAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmpl
Y3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKLSAgICAgICAgICAg
IFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b09iamVjdC0+c3RydWN0dXJlKCk7Ci0g
ICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVy
dHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hw
b2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2lu
dChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygK
LSAgICAgICAgICAgICAgICBwcm90b09iamVjdCwgcHJvdG9TdHJ1Y3R1cmUsIGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUKCFwcm90b09iamVjdCB8fCBwcm90b09iamVjdC0+c3RydWN0dXJlKCkg
PT0gY3VyclN0cnVjdHVyZSk7Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRp
b25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQs
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAgCisgICAgU3RydWN0dXJlKiBjdXJyU3Ry
dWN0dXJlOworICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICBjdXJyU3Ry
dWN0dXJlID0gc3RydWN0dXJlOworICAgIGVsc2UKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKICAg
ICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZt
LCBvZmZzZXQpOworICAgIAogICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSID0gSW52YWxpZEdQ
UlJlZzsKICAgICBpZiAoa2luZCAhPSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGNoYWlu
KSB7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
Ly8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZl
IHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRoZSB0YXJnZXQuCiAgICAgICAgICAgICBp
ZiAobG9hZFRhcmdldEZyb21Qcm94eSkKICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkp
LCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
c3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvblNldC5z
bG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBi
YXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0dXJl
IGNoZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8KQEAgLTYyNyw5ICs2MDYsOCBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWCiAgICAgICAgIGFzT2Jq
ZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQotICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBv
aW50cygpKQorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgcmV0dXJuIEF0dGVtcHRU
b0NhY2hlOwpAQCAtODI3LDIxICs4MDUsMjIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUJ1aWxkR2V0QnlJRAogICAgIH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3Qu
aXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgU3Ry
dWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAwOwor
ICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICAK
ICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkg
ewogICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwogCiAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZv
ckNoYWluQWNjZXNzKAotICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90
QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90
b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgb2Zmc2V0ID0gY29uZGl0
aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIFBv
bHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9t
KHN0dWJJbmZvKTsKQEAgLTg1Miw3ICs4MzEsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4ZWMs
IGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlk
ZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9mZnNldCwgCiAg
ICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0
KCksIAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwpA
QCAtODcxLDcgKzg1MCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5
SUQKICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAgKnZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGluZSwg
c3RydWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAgY29u
ZGl0aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYgKzk3MiwyOCBA
QCBzdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVy
ZShFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29sIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0
dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50
KTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRTdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwg
b2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5
T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1Y3R1
cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
IHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAgb3B0
aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2
ZQogICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYgKEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAg
ICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNraXAg
b3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0
dXJlIGhhcwpAQCAtMTAyMCwxNCArMTAwMSwxNCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0
VHJhbnNpdGlvblN0dWJBCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIElt
cGxlbWVudCBpdCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMwOTE0CiAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobm9ybWFsaXplUHJvdG90eXBl
Q2hhaW4oZXhlYywgc3RydWN0dXJlKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0g
c3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgLy8gZW1pdFB1dFRyYW5zaXRpb25TdHViCisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGly
ZWN0KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVy
RXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJ
bmZvLnN0dWJSb3V0aW5lOwpAQCAtMTA4MywxNyArMTA2NCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUq
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG9sZFN0cnVj
dHVyZSkpOwogICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAg
b2xkU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgICAgIAotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3IgKFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsg
KytpdCkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UjEpOwotICAgICAgICB9Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25z
KAorICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1
YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCkBAIC0xMjI4LDcgKzEyMDAsNyBAQCBzdGF0aWMgU3Ry
dWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRv
ci5kaWRSZXVzZVJlZ2lzdGVycygpKQpAQCAtMTI1Niw4ICsxMjI4LDggQEAgc3RhdGljIFN0cnVj
dHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2Nr
KCktPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAgICAg
ICAgIHN0cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gb2xkU3RydWN0dXJlOworICAgIAorICAgIHJl
dHVybiB0cnVlOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTEyODEsMTIg
KzEyNTMsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAg
IGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7
CiAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5
KSB7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5z
aXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkK
KyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0
UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTEy
OTQsNyArMTI2NSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQK
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5
SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0
dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9
PSBEaXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEyLDIwICsxMjgz
LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAg
JiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlm
IChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFs
aXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFz
ZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJv
dG90eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5i
YXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNl
KCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBw
cm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9mZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7CisKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAg
ICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1Yklu
Zm8pOwogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZv
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3Qp
LCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LAogICAgICAg
ICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAgICAgICAgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLApAQCAtMTMz
Niw3ICsxMzA5LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAog
ICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAg
ICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5p
c0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vz
czo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUp
KTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTM4MCwxNyArMTM1MywxNiBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgICAgICBp
ZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAotICAgICAgICAgICAgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1
cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0
S2luZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKSAKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0
dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0
S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgc3R1
YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgICAgIGxpc3QtPmFkZEFj
Y2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAogICAgICAg
ICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAg
ICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAg
ICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwK
ICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICB9IGVsc2UgewpA
QCAtMTQyMywyMSArMTM5NSwyNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQ
dXRCeUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hl
YWJsZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9u
dFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0g
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBj
b3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAg
ICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVj
LCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAKKyAgICAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUp
IHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJh
c2UoKSwKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAogICAg
ICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1v
cnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9v
bCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihz
bG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVD
aGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5h
bWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwKICAgICAgICAgICAg
IG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xv
d1BhdGhUYXJnZXQoKSksCkBAIC0xNDQ4LDcgKzE0MjQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNj
ZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNz
OjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1
Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJv
dXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3Rv
bVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CkBAIC0xNDg3LDExICsxNDYzLDE3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBh
dGNoSW4oCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXRJZ25vcmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90QmFzZSA9IHdhc0ZvdW5kID8gc2xvdC5z
bG90QmFzZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVfdCBjb3VudCA9ICFmb3VuZFNsb3RCYXNl
IHx8IGZvdW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAgICAgICBub3JtYWxpemVQcm90b3R5cGVD
aGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgZm91bmRTbG90QmFzZSwgaWRlbnQs
IG9mZnNldElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNo
YWluKQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBp
ZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7Cisg
ICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgfQor
ICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAgICAgCiAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3Q7CkBAIC0xNTE2LDcgKzE0OTgsNiBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZTsKICAgICAKICAgICB7CkBAIC0xNTQ3LDE4ICsxNTI4LDggQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgpKQog
ICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhl
YWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQp
IHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0
dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBw
cm90b1N0cnVjdHVyZSA9IHByb3RvdHlwZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90
b1N0cnVjdHVyZSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAg
ICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpZiAocHJv
dG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRz
KCkpCi0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3Bl
cnR5KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQorICAgICAgICBjaGVja09i
amVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+
Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIp
OwogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBzdHViSml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0Zv
dW5kKSkpLCByZXN1bHRHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE4NzQ4
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hh
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4u
aCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1J
bnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIDogbV9nbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUocHJvdG90eXBlKQotewotICAgIEFT
U0VSVChtX3Byb3RvdHlwZS5pc051bGwoKSB8fCBtX3Byb3RvdHlwZS5pc09iamVjdCgpKTsKLSAg
ICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1
Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKTsgY3VycmVu
dDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpKQotICAgICAg
ICBtX3ZlY3Rvci5hcHBlbmQoY3VycmVudCk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46
OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBoZWFkKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwg
bV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsK
LSAgICBpZiAobV9wcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3Ig
KFN0cnVjdHVyZSogY3VycmVudCA9IGFzT2JqZWN0KG1fcHJvdG90eXBlKS0+c3RydWN0dXJlKCk7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkK
LSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlKQotICAgIDogbV9nbG9i
YWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhl
YWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgbV92ZWN0b3Iu
YXBwZW5kKHByb3RvdHlwZVN0cnVjdHVyZSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46
OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSog
aGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZv
ckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgY2hh
aW4tPmhlYWQoKVtpXTsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQo
KVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0
dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVG
b3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5n
ZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVyZUNo
YWluKCkKLXsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjppc1N0aWxsVmFsaWQo
KSBjb25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSktPnN0cnVjdHVyZSgpICE9IG1fdmVj
dG9yW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50UHJvdG90
eXBlID0gbV92ZWN0b3JbaV0tPnN0b3JlZFByb3RvdHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXRjaGVzKFN0cnVjdHVy
ZUNoYWluKiBjaGFpbikgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmVjdG9yW2ldICE9IGNoYWluLT5o
ZWFkKClbaV0uZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlm
IChjaGFpbi0+aGVhZCgpW21fdmVjdG9yLnNpemUoKV0pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJ
bnRlcmNlcHRTdG9yZVRvKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9yW2ld
LT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3JtYWxpemVkKCkKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQ
cm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGFrZXNTbG93
UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdG
b3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotSlNPYmplY3QqIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRl
cm1pbmFsUHJvdG90eXBlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fdmVjdG9yLmlzRW1wdHko
KSk7Ci0gICAgaWYgKG1fdmVjdG9yLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gYXNPYmpl
Y3QobV9wcm90b3R5cGUpOwotICAgIHJldHVybiBhc09iamVjdChtX3ZlY3RvclttX3ZlY3Rvci5z
aXplKCkgLSAyXS0+c3RvcmVkUHJvdG90eXBlKCkpOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0
dXJlQ2hhaW46Om9wZXJhdG9yPT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0ID09IG90aGVyLm1fZ2xvYmFsT2Jq
ZWN0Ci0gICAgICAgICYmIG1fcHJvdG90eXBlID09IG90aGVyLm1fcHJvdG90eXBlCi0gICAgICAg
ICYmIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0
dXJlQ2hhaW46OmdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0
b3IpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSBjdXJyZW50UHJvdG90eXBlID0gbV9wcm90b3R5cGU7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpT
T2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSk7Ci0gICAg
ICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGF0KGkpOwotICAgICAgICB2ZWN0b3Iu
YXBwZW5kKENvbnN0YW50U3RydWN0dXJlQ2hlY2soY3VycmVudE9iamVjdCwgY3VycmVudFN0cnVj
dHVyZSkpOwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0gY3VycmVudFN0cnVjdHVyZS0+cHJv
dG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsK
LSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmbV9nbG9iYWxPYmplY3QpOwot
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmbV9wcm90b3R5cGUpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKLSAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fdmVjdG9yW2ldKTsKLX0KLQotdm9pZCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVt
cEluQ29udGV4dChvdXQsIDApOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
Ci17Ci0gICAgb3V0LnByaW50KAotICAgICAgICAiKGdsb2JhbCA9ICIsIFJhd1BvaW50ZXIobV9n
bG9iYWxPYmplY3QpLCAiLCBoZWFkID0gIiwKLSAgICAgICAgaW5Db250ZXh0KG1fcHJvdG90eXBl
LCBjb250ZXh0KSwgIiwgdmVjdG9yID0gWyIpOwotICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAg
IG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXBJbkNvbnRleHQobV92ZWN0b3JbaV0sIGNvbnRl
eHQpKTsKLSAgICBvdXQucHJpbnQoIl0pIik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
ODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faAotI2RlZmluZSBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluX2gKLQotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7
Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFZNOwotc3RydWN0IER1bXBDb250ZXh0Owot
Ci1jbGFzcyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbj4gewotcHVibGljOgotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKik7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFk
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWlu
LCB1bnNpZ25lZCBjb3VudCk7Ci0gICAgfkludGVuZGVkU3RydWN0dXJlQ2hhaW4oKTsKLSAgICAK
LSAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlcyhTdHJ1Y3R1
cmVDaGFpbiopIGNvbnN0OwotICAgIGJvb2wgbWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKLSAgICBib29sIGlzTm9ybWFsaXplZCgpOwotICAgIAotICAgIGJvb2wg
dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKTsKLSAgICAKLSAgICBKU1ZhbHVl
IHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9Ci0gICAgCi0gICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KLSAgICBTdHJ1Y3R1
cmUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOyB9Ci0g
ICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQo
aW5kZXgpOyB9Ci0gICAgCi0gICAgSlNPYmplY3QqIHRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3Q7
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IubGFz
dCgpOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZ2F0aGVyQ2hlY2tzKENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIAot
cHJpdmF0ZToKLSAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7Ci0gICAgSlNWYWx1
ZSBtX3Byb3RvdHlwZTsKLSAgICBWZWN0b3I8U3RydWN0dXJlKj4gbV92ZWN0b3I7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5NCw3ICsx
OTQsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4g
ZGljdGlvbmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KICAgICBib29sIGlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSA9PSBV
bmNhY2hlZERpY3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0aW9u
YXJ5S2luZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKTsgfQorICAg
IGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgeworICAgICAgICByZXR1
cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kCisgICAgICAgICAg
ICAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICAgICAg
JiYgISh0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5m
bygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICAgICAgICAgICYmIHR5cGVJ
bmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAgICAgICAgICYmIHR5cGVJ
bmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCk7CisgICAgfQogCiAgICAg
Ly8gV2UgdXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9yIHN0cnVjdHVyZXMgdGhhdCBt
YXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBwcmV2ZW50CiAgICAgLy8gREZH
IGZyb20gaW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ugc3RydWN0dXJlcyBkb24ndCB0
cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFwcGVhcnMuCkBAIC0yMDIsNyAr
MjE0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuaGFzSW1w
dXJlR2V0T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gVHlwZSBhY2Nl
c3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9m
TGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlw
ZUluZm8oKS5pc09iamVjdCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzNiw2ICs1MzYsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNo
cG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOwor
ICAgIAogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3
aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257713</attachid>
            <date>2015-07-28 17:32:42 -0700</date>
            <delta_ts>2015-07-29 14:26:09 -0700</delta_ts>
            <desc>OMG it&apos;s a 58x speed-up</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>262541</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yOTMsOCArMjk1LDYgQEAKIAkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCN0UyQTE5QTExQjgwMDBE
OUJDNTYgLyogQ2FsbFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNw
cCAqLzsgfTsKIAkJMEYzQjdFMkIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNTE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVjay5jcHAgKi87IH07Ci0JCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0Uw
MUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2
MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4OCw2ICs1ODgsMTQgQEAKIAkJMEZEMkM5MjQx
NkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9
OworCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRkQzRTQwMjFCNjE4QUFG
MDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMDFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZEM0U0MDkxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDAzMUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBG
RDNFNDBBMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDQxQjYxOEI2
NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi87IH07CisJCTBGRDNFNDBDMUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5
Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87
IH07CisJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDgxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8q
IERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICov
OyB9OwogCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9
OwpAQCAtNjk0LDYgKzcwMiw4IEBACiAJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdF
ZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjRCNTFCMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdFZGdlLmNwcCAqLzsgfTsKIAkJMEZGMEYxOUYx
NkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjExNkI2Mjc4RDAwM0Y2
OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwICovOyB9OwogCQkwRkYwRjFBMDE2Qjcy
QTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8q
IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcCAqLzsgfTsKKwkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0
QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY0
MjczMTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyog
RGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjcz
MDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZG
NDI3NDAxNThFQkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAv
KiB1ZGlzODZfZGVjb2RlLmMgKi87IH07CkBAIC0xMzg5LDggKzEzOTksNiBAQAogCQlBNzg0QTI2
NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5
bnRheENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFG
NkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYgLyogU3BpbGxSZWdpc3RlcnNNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZGNjQ3
QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0
MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwotCQlBNzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzhBOTc3NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZD
MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovOyB9OwogCQlBNzhB
OTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RDE3OTczOEI4MDA5REY3
NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi87IH07CiAJCUE3OEE5Nzc2MTc5NzM4QjgwMDlE
Rjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5j
cHAgKi87IH07CkBAIC0xODU3LDYgKzE4NjUsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhE
RTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVG
MTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGgu
Y3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
OEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8q
IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9m
aWxlckpldHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
OTBDQUIxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMDQyLDggKzIwNTIsNiBAQAogCQkwRjNCM0EyQTE1NDc0RkY0MDAz
RUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHVmFsaWRhdGUuaDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyog
Q2FsbFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFZhcmlh
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5
Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcv
REZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
M0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRm
Zy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIzNDgsNiArMjM1NiwxNCBAQAogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIw
MTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyog
REZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5o
OyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcv
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDMxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA1MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA2MUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlDb25k
aXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwODFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBh
dGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRG9taW5hdG9ycy5jcHA7IHBhdGgg
PSBkZmcvREZHRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0
b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQ5LDYgKzI0NjUsOCBAQAog
CQkwRkVGQzlBODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJs
ZUFsbG9jYXRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enou
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25G
dXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5
NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHBhdGggPSBkZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc2Fzc2VtYmxlci5oOyBwYXRoID0g
ZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY0MjczMDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHA7
IHBhdGggPSBkaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNv
ZGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdWRpczg2X2RlY29kZS5jOyBw
YXRoID0gZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZGlzODZfZGVjb2RlLmM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMTY5LDggKzMxODcsNiBAQAogCQlBNzdGMTgyMDE2NDA4OEIyMDA2
NDBBNDcgLyogQ29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
ZGVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgyNDE2NDE5MjU0
MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8q
IE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5
REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVk
RmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRG
aW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTAxLDggKzQ1MTcsNiBAQAogCQkJCUE3
QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3
QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCi0JCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0
IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAotCQkJCUE3ODg1M0Y4MTc5NzI2Mjkw
MDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5
NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUx
OTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJQTEyQkJGRjMxQjA0
NEE5ODAwNjY0QjY5IC8qIEludGxPYmplY3QuY3BwICovLApAQCAtNDg4OSw2ICs0OTAzLDEwIEBA
CiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0
VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFZhbHVlLmggKi8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZEM0U0MDAxQjYx
OEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dC5oICovLAorCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1
MzMgLyogREZHQW5hbHlzaXMuaCAqLywKQEAgLTUwNDgsNiArNTA2Niw4IEBACiAJCQkJMEYyQkRD
M0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAogCQkJCTBGOEYxNDMx
MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLywKIAkJCQkw
RjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oICovLAor
CQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5j
cHAgKi8sCisJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmggKi8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9t
aW5hdG9ycy5jcHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1
cmFsTG9vcHMuY3BwICovLApAQCAtNTMxOSw4ICs1MzM5LDYgQEAKIAkJCQkwRjBCODNBNTE0QkNG
NTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQw
MkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY2RkM3NEYxOTYxMTBBODAwRTFE
MDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8sCi0JCQkJMEYzRDBCQkIxOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLywKIAkJCQkwRjQyNkE0QTE0
NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAogCQkJCTBGQzcxMkRDMTdDRDg3Nzgw
MDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAogCQkJCTBGQzcx
MkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywK
QEAgLTUzNTMsNiArNTM3MSwxMCBAQAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0RjVDN0Q0
MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJCTE0Q0E5
NThDMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJ
CTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAg
Ki8sCisJCQkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmggKi8sCisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5NjlBMDc5NDBFRDFEM0FFMDBGMUY2
ODEgLyogT3Bjb2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8s
CkBAIC01MzY0LDYgKzUzODYsOCBAQAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAy
IC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQw
RDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4
MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDgxQjYxOEI2NjAw
QzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1
RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKQEAgLTU4NzQsNiArNTg5OCw3IEBACiAJCQkJQzI5
ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0Rv
bWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAv
KiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JC
OTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MTI2LDYgKzYxNTEsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21i
aW5lZERvbWFpbnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzg4MTg1NjgzMzUwMDJF
RDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIw
MEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQz
OEMxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTM1LDcgKzYxNjEsNiBAQAogCQkJCUE3QThBRjNC
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4
QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyog
SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIy
RiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0OCw2ICs2MTczLDcgQEAKIAkJ
CQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzYyLDcgKzYzODgsNiBAQAogCQkJCUJDMThDNDNDMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0Uz
RTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAwOENFNzE4NzYzMUI2
MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIx
M0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5
MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjQ0NSw5ICs2NDcwLDExIEBACiAJCQkJMkFBRDk2NEExODU2OTQxNzAwMUY5M0JF
IC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBB
QzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBS
ZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8q
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4
cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTI0LDYgKzY1NTEsNyBAQAog
CQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBDMUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzE1LDYgKzczNDMs
NyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNC
MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0
IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMjUsNiArNzM1NCw3
IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1
NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTczNzYsNiArNzQwNiw3IEBACiAJCQkJQTVDRUVFMTQxODdG
M0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwMTFCNjE4
QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUY3MzgyQzE4
QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzM4Niw3ICs3NDE3LDYgQEAKIAkJCQlBNTMyNDM4QjE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3Rv
clZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
RjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0MDMsNiArNzQzMyw3IEBACiAJCQkJQkNERDUxRUIw
RkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcx
MjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0QzE3RUUy
NzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkND
ODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDU4LDcgKzc0ODksNiBAQAogCQkJCUE1MDNGQTFC
MTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAxM0U3
QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0QwQkJDMTk0QTQxNDMwMEZD
OUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
NUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUE3MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2NTEsNiArNzY4MSw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMyRDAw
MTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBFQkI3
QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJG
MEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMg
LyogSlNKb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzY2MCw2ICs3NjkxLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3
MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4
MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQw
MTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTEx
ODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IDA7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0g
MDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBl
KSB7CkBAIC0zNzAsMTEgKzM2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByb3RvdHlwZVN0
cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
LCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CkBAIC0z
ODIsOSArMzc2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAog
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiKCIpOwogICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJl
KG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGR1bXBDaGFpbihvdXQsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTQ1NiwxMCArNDUwLDggQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAicHJldiIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUu
Z2V0KCksIGlkZW50KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAgICAg
ICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAg
ICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCJsaXN0ID0gWyIpOwpAQCAtNDgzLDEwICs0NzUsOCBAQCB2b2lkIENvZGVCbG9jazo6
cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRl
bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGFjY2Vzcy5jaGFpbigpLCBpZGVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vz
cy5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsICIsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJ1bmtub3duIik7
CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw5ICszOCw2IEBAIHZvaWQgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXIKICAg
ICAgICAgZGF0YUxvZygiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiBv
biAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogCiAgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6
YXRpb24sICZkZXRhaWwpOwotCi0gICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgIHJlbW92ZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzQ4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvbXBsZXhH
ZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAotICAgIHVuc2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisg
ICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQK
ICAgICAvLyBoYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRv
bid0CkBAIC00MCwzMiArMzksMjYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdQogICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpOworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5E
RkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwog
ICAgIAogICAgIENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJ
bmxpbmVhYmxlOwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAg
IHJlc3VsdC5tX2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0g
ICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3Vu
dCkpOworICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQu
bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJl
c3VsdC5tX2NoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25k
aXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
c2tpcCgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWlu
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIHRha2VzU2xvd1BhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50
T2JqZWN0ID0gcmVzdWx0Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0
cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAg
ICAgIAotICAgICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3Qp
OworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0
aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0
Lm1fYXR0cmlidXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
aGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7
Ci0gICAgfQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0g
ZWxzZQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3
NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVz
X2gKICNkZWZpbmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3Rh
dHVzKCkKICAgICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChp
bnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAg
ICAgfQogICAgIApAQCAtOTcsMjEgKzk2LDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
c3RhdGljIENvbXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CisgICAgICAgIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0gICAgSlNWYWx1ZSBzcGVjaWZpY1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7
CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVz
OwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2su
Y3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihDaGVjayBpZiAi
LCBpbkNvbnRleHQoSlNWYWx1ZShtX2NvbnN0YW50KSwgY29udGV4dCksICIgaGFzIHN0cnVjdHVy
ZSAiLAotICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCks
ICIpIik7Ci19Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQot
U3RydWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgdmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IHZl
Y3Rvci5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHZlY3RvcltpXS5jb25zdGFudCgpID09
IGNvbnN0YW50KQotICAgICAgICAgICAgcmV0dXJuIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgYXJlQ29tcGF0aWJsZShjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBhLCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrVmVjdG9yJiBiKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IGEuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogb3RoZXJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IoYiwgYVtp
XS5jb25zdGFudCgpKTsKLSAgICAgICAgaWYgKCFvdGhlclN0cnVjdHVyZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYVtpXS5zdHJ1Y3R1cmUoKSAhPSBvdGhlclN0cnVjdHVy
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNv
dXJjZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KQotewotICAgIGZvciAo
dW5zaWduZWQgaSA9IHNvdXJjZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZUZvcih0YXJnZXQsIHNvdXJjZVtpXS5jb25zdGFudCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB0YXJnZXQuYXBwZW5kKHNvdXJjZVtpXSk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0
YW50U3RydWN0dXJlQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLSNk
ZWZpbmUgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KLSNpbmNsdWRlICJEdW1wQ29udGV4dC5o
IgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIENvbnN0YW50U3RydWN0dXJlQ2hlY2sgewotcHVibGljOgotICAgIENv
bnN0YW50U3RydWN0dXJlQ2hlY2soKQotICAgICAgICA6IG1fY29uc3RhbnQobnVsbHB0cikKLSAg
ICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIGNvbnN0YW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICAgICAgOiBtX2NvbnN0YW50KGNvbnN0YW50KQotICAgICAgICAsIG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghIW1fY29uc3RhbnQgPT0gISFtX3N0
cnVjdHVyZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fY29uc3RhbnQ7IH0KLSAgICAKLSAgICBKU0NlbGwqIGNvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudDsgfQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KLSAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0NlbGwqIG1fY29uc3RhbnQ7Ci0gICAgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPENvbnN0YW50U3RydWN0
dXJlQ2hlY2ssIDI+IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3I7Ci0KLVN0cnVjdHVyZSog
c3RydWN0dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3Rvciwg
SlNDZWxsKiBjb25zdGFudCk7Ci1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVja1ZlY3RvciYsIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsK
LXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNvdXJj
ZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OSw4ICsxNjksNyBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0KGxpc3RJbmRleCkuc3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENv
bXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0gICAgICAgICAgICAg
ICAgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbkNvdW50KCksIHVpZCk7CisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQo
KSkgewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAt
MjA2LDggKzIwNSw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdl
dEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCi0gICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwor
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25k
aXRpb25TZXQoKSwgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRy
dWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwyMyArMzQsMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVy
ZVNldCkKLSAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQorICAgICwgbV9jb25kaXRpb25T
ZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9jYWxsTGlu
a1N0YXR1cyhXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKQogewogICAgIGlmICghc3RydWN0dXJl
U2V0LnNpemUoKSkgewogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpOwot
ICAgICAgICBBU1NFUlQoIWNoYWluKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGNoYWluICYmIGNo
YWluLT5zaXplKCkpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFs
UHJvdG90eXBlKCk7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MobV9jb25zdGFudENoZWNr
cyk7CisgICAgICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKICAgICB9CiB9Ci0K
KyAgICAgICAgICAgICAgICAgICAgIAogR2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlkVmFyaWFudCgp
IHsgfQogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlh
bnQmIG90aGVyKQpAQCAtNjIsOCArNTgsNyBAQCBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlh
bnQoY29uc3QgR2V0CiBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShj
b25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQgPSBvdGhl
ci5tX3N0cnVjdHVyZVNldDsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFu
dENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7Cisg
ICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29mZnNldCA9
IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAg
ICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90
aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzIsMjggKzY3LDE5IEBAIEdldEJ5SWRWYXJpYW50
JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVN0cnVj
dHVyZVNldCBHZXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKTsKLSAgICAK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tz
LCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAg
cmV0dXJuIHN0cnVjdHVyZTsKLX0KLQogYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVy
Z2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQogewotICAgIGlmIChtX2FsdGVybmF0ZUJh
c2UgIT0gb3RoZXIubV9hbHRlcm5hdGVCYXNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghYXJlQ29tcGF0aWJsZShtX2NvbnN0YW50Q2hlY2tz
LCBvdGhlci5tX2NvbnN0YW50Q2hlY2tzKSkKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQgPQorICAgICAgICBtX2NvbmRpdGlvblNldC5tZXJn
ZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBtZXJnZUludG8o
b3RoZXIubV9jb25zdGFudENoZWNrcywgbV9jb25zdGFudENoZWNrcyk7CisgICAgbV9jb25kaXRp
b25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWVyZ2Uob3Ro
ZXIubV9zdHJ1Y3R1cmVTZXQpOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEyLDEwICs5
OCw3IEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICB9CiAg
ICAgCiAgICAgb3V0LnByaW50KAotICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQo
KSwgY29udGV4dCksICIsICIsCi0gICAgICAgICJbIiwgbGlzdER1bXBJbkNvbnRleHQobV9jb25z
dGFudENoZWNrcywgY29udGV4dCksICJdIik7Ci0gICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKLSAg
ICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZSht
X2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CisgICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVj
dHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250
ZXh0KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsKICAgICBpZiAo
bV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxs
TGlua1N0YXR1cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDkgKzI3LDgg
QEAKICNkZWZpbmUgR2V0QnlJZFZhcmlhbnRfaAogCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMu
aCIKLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAiSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0Lmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCiAKQEAgLTQzLDcgKzQyLDcgQEAgY2xhc3MgR2V0
QnlJZFZhcmlhbnQgewogcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50KAogICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAotICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsK
ICAgICAKICAgICB+R2V0QnlJZFZhcmlhbnQoKTsKQEAgLTU1LDkgKzU0LDEwIEBAIHB1YmxpYzoK
ICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVy
ZVNldDsgfQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1
Y3R1cmVTZXQ7IH0KLSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25z
dGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0KLSAgICBKU09i
amVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRlQmFzZTsgfQot
ICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CisKKyAgICAvLyBUaGUgcHJl
c2VuY2Ugb2YgYSBjb25kaXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3RvdHlwZSBs
b2FkLgorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQo
KSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAogICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExpbmtTdGF0
dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQo
KTsgfQogICAgIApAQCAtNzAsOCArNzAsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBH
ZXRCeUlkU3RhdHVzOwogICAgIAogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKLSAg
ICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0gICAgSlNP
YmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBt
X2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNl
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KGluQ29udGV4dChK
U1ZhbHVlKG1fb2JqZWN0KSwgY29udGV4dCksICI6ICIsIGluQ29udGV4dChtX2NvbmRpdGlvbiwg
Y29udGV4dCkpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwor
fQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9jb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChz
dHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJl
cXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHZhbGlkaXR5UmVxdWly
ZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKwor
Ym9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3Ry
dWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3Ry
dWN0dXJlLCBtX29iamVjdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246Omlz
U3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQobV9vYmplY3QtPnN0cnVjdHVyZSgp
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1Zh
bGlkaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRp
dGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoISp0
aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHN0cnVjdHVyZUVu
c3VyZXNWYWxpZGl0eShtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hh
YmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNX
YXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIG1fb2Jq
ZWN0LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNo
YWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFByb3BlcnR5Q29uZGl0
aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGVBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9y
dCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZm
b3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGUo
c3RydWN0dXJlLCBtX29iamVjdCwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9y
dCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVm
Zm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkg
Y29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRS
ZWZlcmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlv
bi52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAg
ICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisg
ICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikK
KyAgICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDog
bV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5j
ZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisg
ICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJv
cGVydHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJp
YnV0ZXMpOyAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7Cisg
ICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNl
bmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91
dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAg
ICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0
QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICB2bS5oZWFwLndy
aXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIo
b2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcigKKyAgICAgICAg
SlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRp
b24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIodWlk
LCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFy
cmllcihvYmplY3QsIHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAg
IEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0g
UHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAg
ICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgdmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbmRp
dGlvbjsgfTsKKyAgICAKKyAgICBKU09iamVjdCogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9v
YmplY3Q7IH0KKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2NvbmRpdGlvbjsgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5raW5kKCk7IH0KKyAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkudWlkKCk7IH0KKyAgICBib29s
IGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc09mZnNldCgpOyB9Cisg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkub2Zm
c2V0KCk7IH0KKyAgICB1bnNpZ25lZCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gY29u
ZGl0aW9uKCkuaGFzQXR0cmlidXRlcygpOyB9CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNv
bnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmF0dHJpYnV0ZXMoKTsgfQorICAgIGJvb2wgaGFzUHJv
dG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUHJvdG90eXBlKCk7IH0KKyAg
ICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkucHJvdG90
eXBlKCk7IH0KKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBjb25k
aXRpb24oKS5oYXNSZXF1aXJlZFZhbHVlKCk7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5yZXF1aXJlZFZhbHVlKCk7IH0KKyAgICAKKyAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxKU09iamVjdCo+
OjpoYXNoKG1fb2JqZWN0KSArIG1fY29uZGl0aW9uLmhhc2goKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdCA9PSBvdGhlci5tX29iamVjdAorICAg
ICAgICAgICAgJiYgbV9jb25kaXRpb24gPT0gb3RoZXIubV9jb25kaXRpb247CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2NvbmRpdGlvbi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBp
ZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcyBv
cgorICAgIC8vIGRpZmZlcmVudCBvYmplY3RzLiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhh
dmUgdG8gZGVjaWRlIGhvdyB0byByZXNvbHZlIHRoZSBjb25mbGljdCAtCisgICAgLy8gZm9yIGV4
YW1wbGUgaWYgdGhlcmUgaXMgYSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBz
b21lIGNhc2VzIHlvdSdsbCB3YW50IHRoZQorICAgIC8vIG1vcmUgZ2VuZXJhbCBvZiB0aGUgdHdv
IHdoaWxlIGluIG90aGVyIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRo
ZSB0d28uIFRoaXMKKyAgICAvLyB3aWxsIGFsc28gcmV0dXJuIGZhbHNlIGZvciBjb250cmFkaWN0
aW9ucywgbGlrZSBQcmVzZW5jZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZQorICAgIC8vIG9iamVj
dC91aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQgY29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJs
ZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlz
IHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0
aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpIHx8IG9iamVjdCgpICE9IG90aGVy
Lm9iamVjdCgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVzZSB2YWxpZGl0eS1jaGVja2luZyBt
ZXRob2RzIGNhbiBvcHRpb25hbGx5IHRha2UgYSBTdHJ1dHVyZSogaW5zdGVhZCBvZiBsb2FkaW5n
IHRoZQorICAgIC8vIFN0cnVjdHVyZSogZnJvbSB0aGUgb2JqZWN0LiBJZiB5b3UncmUgaW4gdGhl
IGNvbmN1cnJlbnQgSklULCB0aGVuIHlvdSBtdXN0IHVzZSB0aGUgZm9ybXMKKyAgICAvLyB0aGF0
IHRha2UgYW4gZXhwbGljaXQgU3RydWN0dXJlKiBiZWNhdXNlIHlvdSB3YW50IHRoZSBjb21waWxl
ciB0byBvcHRpbWl6ZSBmb3IgdGhlIHNhbWUKKyAgICAvLyBzdHJ1Y3R1cmUgdGhhdCB5b3UgdmFs
aWRhdGVkIChpLmUuIGF2b2lkIGEgVE9DVE9VIHJhY2UpLgorICAgIAorICAgIC8vIENoZWNrcyBp
ZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBi
ZSBpbnRlcmNlcHRlZC4gVmFsaWRpdHkKKyAgICAvLyBkb2VzIG5vdCByZXF1aXJlIHdhdGNocG9p
bnRzIG9uIHRoZSBvYmplY3QuCisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29s
IHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJl
IHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBp
c1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9v
bCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNv
bnN0OworICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IGNvbnN0OworCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIE1h
eSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kCisgICAgLy8g
c3RydWN0dXJlIGFsb25lIGRvbid0IGd1YXJhbnRlZSB0aGUgY29uZGl0aW9uLiBOb3RlIHRoYXQg
dGhpcyBtYXkgcmV0dXJuIHRydWUgaWYgdGhlCisgICAgLy8gY29uZGl0aW9uIHN0aWxsIHJlcXVp
cmVzIHNvbWUgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdCBpbiBhZGRpdGlvbiB0byBjaGVja2lu
ZyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIElmIHlvdSB3YW50IHRvIGNoZWNrIGlmIHRoZSBjb25k
aXRpb24gaG9sZHMgYnkgdXNpbmcgdGhlIHN0cnVjdHVyZSBhbG9uZSwKKyAgICAvLyB1c2Ugc3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkuCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJl
KikgY29uc3Q7CisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBT
aG9ydGhhbmQgZm9yIGNvbmRpdGlvbigpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpLgorICAgIGJv
b2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wg
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkg
c2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUg
YW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNX
YXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0
dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFBy
b3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFByb3BlcnR5Q29u
ZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hh
bmdlcykgY29uc3Q7CisKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBh
bmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAg
IC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKAor
ICAgICAgICBTdHJ1Y3R1cmUqLAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmls
aXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAg
IGJvb2wgaXNXYXRjaGFibGUoCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxp
dHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAg
CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbigpLndhdGNoaW5nUmVxdWly
ZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpOworICAgIH0KKyAgICBib29sIHdhdGNo
aW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbmRpdGlvbigpLndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQo
KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9s
dmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0
OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVu
Y2VzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSlNPYmplY3QqIG1fb2JqZWN0OworICAgIFBy
b3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9uOworfTsKKworc3RydWN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9
PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsKKyAg
ICB0eXBlZGVmIEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3
dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0
aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3QoSlNPYmplY3QqIG9iamVj
dCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLm9iamVjdCgpID09IG9iamVj
dCkKKyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yQ29uZGl0aW9uS2luZCgKKyAgICBQcm9wZXJ0eUNv
bmRpdGlvbjo6S2luZCBraW5kKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24u
a2luZCgpID09IGtpbmQpCisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAg
ICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkg
Y29uc3QKK3sKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWdu
ZWQgbnVtRm91bmQgPSAwOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFBy
b3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0
aW9uOworICAgICAgICAgICAgbnVtRm91bmQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVChudW1Gb3VuZCA9PSAxKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29s
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVDb21wYXRpYmxlV2l0aChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlk
KCkgfHwgIW90aGVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEgOiAqdGhpcykgeworICAgICAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiIDogb3RoZXIpIHsKKyAgICAgICAgICAg
IGlmICghYS5pc0NvbXBhdGlibGVXaXRoKGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om1lcmdlZFdpdGgoCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdAoreworICAg
IGlmICghaXNWYWxpZCgpIHx8ICFvdGhlci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbnZh
bGlkKCk7CisKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHJlc3VsdDsKKyAg
ICAKKyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2Rh
dGEtPnZlY3Rvcik7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgbmV3Q29uZGl0aW9uIDogb3RoZXIpIHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgZXhpc3RpbmdDb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICAgICAg
aWYgKCFuZXdDb25kaXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub25FbXB0
eShyZXN1bHQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1
cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0
dXJlRW5zdXJlc1ZhbGlkaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpz
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAq
dGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKGNvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExpdmUo
KSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgp
KSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgb3V0LnByaW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAg
b3V0LnByaW50KGxpc3REdW1wSW5Db250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7Cisg
ICAgb3V0LnByaW50KCJdIik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwg
bnVsbHB0cik7Cit9CisKK25hbWVzcGFjZSB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdl
bmVyYXRlQ29uZGl0aW9uKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQgY29u
ZGl0aW9uS2luZCkKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0
dXJlKCk7CisgICAgCisgICAgc3dpdGNoIChjb25kaXRpb25LaW5kKSB7CisgICAgY2FzZSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
KyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0
KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgICAg
IHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2Uodm0sIG93bmVyLCBvYmpl
Y3QsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgY2FzZSBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OmFic2VuY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3Qt
PnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSk7CisgICAgfQorICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICByZXR1cm4gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcigKKyAgICAgICAgICAgIHZtLCBv
d25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9i
amVjdCgpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cisg
ICAgfQorfQorCitlbnVtIENvbmN1cnJlbmN5IHsKKyAgICBNYWluVGhyZWFkLAorICAgIENvbmN1
cnJlbnQKK307CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnMo
CisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBKU09iamVjdCogcHJvdG90eXBlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kLAorICAgIENvbmN1
cnJlbmN5IGNvbmN1cnJlbmN5ID0gTWFpblRocmVhZCkKK3sKKyAgICBBU1NFUlQoISFwcm90b3R5
cGUgPT0gKGtpbmQgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKSk7CisgICAgCisgICAg
VmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBjb25kaXRpb25zOworICAgIAorICAgIGZv
ciAoOzspIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQorICAgICAgICAgICAg
cmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIAor
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZ2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkgeworICAg
ICAgICAgICAgaWYgKCFwcm90b3R5cGUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KHZhbHVlKTsKKyAgICAgICAgc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwor
ICAgICAgICAKKyAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIHJl
cGVhdGVkbHksIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0IHNob3VsZCBub3QgYmUKKyAgICAgICAg
Ly8gdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAoY29uY3VycmVuY3kgPT0gTWFpblRocmVhZCkK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZt
LCBvYmplY3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQgdGhpc0NvbmRpdGlvbktpbmQ7Cisg
ICAgICAgIGlmIChraW5kID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSAmJiBvYmplY3Qg
IT0gcHJvdG90eXBlKQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBQcm9wZXJ0eUNv
bmRpdGlvbjo6QWJzZW5jZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc0NvbmRpdGlv
bktpbmQgPSBraW5kOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
bmV3Q29uZGl0aW9uID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwg
b2JqZWN0LCB1aWQsIHRoaXNDb25kaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFuZXdDb25kaXRp
b24gfHwgIW5ld0NvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIAorICAgICAgICBjb25kaXRpb25zLmFw
cGVuZChuZXdDb25kaXRpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90
b3R5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgLy8gVmFsaWRhdGUg
dGhlIHJlc3VsdC4KKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0
aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBwcmVzZW5jZUNvdW50ID0gMDsKKyAg
ICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29u
ZGl0aW9ucykgeworICAgICAgICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAg
ICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgICAg
ICBwcmVzZW5jZUNvdW50Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHByZXNlbmNlQ291bnQgPT0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZh
dWx0OiB7CisgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6IGNvbmRpdGlvbnMpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24u
a2luZCgpID09IGtpbmQpOworICAgIH0gfQorICAgIAorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6bm9uRW1wdHkoY29uZGl0aW9ucyk7Cit9CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
K3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAor
ICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSk7Cit9CisKK09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFk
U3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0
ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBoZWFkU3RydWN0dXJlLCBudWxscHRyLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0
aW9uOjpBYnNlbmNlT2ZTZXR0ZXIpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBK
U09iamVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAg
cmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlwZSwgdWlkLAorICAgICAg
ICBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdl
bmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG51bGxwdHIsIGdsb2JhbE9iamVjdCwgaGVh
ZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0
dGVyLAorICAgICAgICBDb25jdXJyZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisjZGVmaW5l
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIEFuIG9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb24gc2V0IGlzIHVzZWQgdG8gcmVwcmVz
ZW50IHRoZSBzZXQgb2YgYWRkaXRpb25hbCBjb25kaXRpb25zCisvLyB0aGF0IG5lZWQgdG8gYmUg
bWV0IGZvciBzb21lIGhlYXAgYWNjZXNzIHRvIGJlIHZhbGlkLiBUaGUgc2V0IGNhbiBoYXZlIHRo
ZSBmb2xsb3dpbmcKKy8vIGludGVyZXN0aW5nIHN0YXRlczoKKy8vCisvLyBFbXB0eTogVGhlcmUg
YXJlIG5vIHNwZWNpYWwgY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgbWV0LgorLy8gSW52YWxp
ZDogVGhlIGhlYXAgYWNjZXNzIGlzIG5ldmVyIHZhbGlkLgorLy8gTm9uLWVtcHR5OiBUaGVyZSBh
cmUgc29tZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHZhbGlkLgor
CitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCB7CitwdWJsaWM6CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQoKSB7IH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgaW52YWxpZCgpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihuZXcg
RGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG5vbkVtcHR5KGNvbnN0IFZlY3RvcjxPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbj4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIGlmICh2ZWN0b3IuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7
CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihuZXcgRGF0YSgpKTsKKyAgICAgICAgcmVz
dWx0Lm1fZGF0YS0+dmVjdG9yID0gdmVjdG9yOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFtX2RhdGEgfHwgIW1fZGF0YS0+dmVjdG9yLmlzRW1wdHkoKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhOworICAg
IH0KKyAgICAKKyAgICB0eXBlZGVmIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKiBpdGVy
YXRvcjsKKyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
bV9kYXRhLT52ZWN0b3IuYmVnaW4oKTsKKyAgICB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5lbmQoKTsKKyAgICB9CisgICAgCisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0
OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvckNvbmRpdGlvbktpbmQoUHJvcGVydHlD
b25kaXRpb246OktpbmQpIGNvbnN0OworICAgIAorICAgIC8vIElmIHRoaXMgaXMgYSBjb25kaXRp
b24gc2V0IGZvciBhIHByb3RvdHlwZSBoaXQsIHRoZW4gdGhpcyBpcyBndWFyYW50ZWVkIHRvIHJl
dHVybiB0aGUKKyAgICAvLyBjb25kaXRpb24gb24gdGhlIHByb3RvdHlwZSBpdHNlbGYuIFRoaXMg
YWxsb3dzIHlvdSB0byBnZXQgdGhlIG9iamVjdCwgb2Zmc2V0LCBhbmQKKyAgICAvLyBhdHRyaWJ1
dGVzIGZvciB0aGUgcHJvdG90eXBlLiBUaGlzIHdpbGwgUkVMRUFTRV9BU1NFUlQgdGhhdCB0aGVy
ZSBpcyBleGFjdGx5IG9uZSBQcmVzZW5jZQorICAgIC8vIGluIHRoZSBzZXQsIGFuZCBpdCB3aWxs
IHJldHVybiB0aGF0IHByZXNlbmNlLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNsb3RC
YXNlQ29uZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbiBzZXRzIGFy
ZSBjb21wYXRpYmxlIGlmIHRoZXkgYXJlIGJvdGggdmFsaWQgYW5kIGVhY2ggY29uZGl0aW9uIGlu
ICp0aGlzIGlzCisgICAgLy8gY29tcGF0aWJsZSB3aXRoIGVhY2ggY29uZGl0aW9uIGluIG90aGVy
LgorICAgIGJvb2wgYXJlQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIG90aGVyKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhIG5l
dyBjb25kaXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0aGUgb3RoZXIgb25lLiBU
aGlzIHdpbGwKKyAgICAvLyBmYWlsIGlmICF0aGlzLmFyZUNvbXBhdGlibGVXaXRoKG90aGVyKS4g
V2hlbiBpdCBmYWlscywgaXQgcmV0dXJucyBpbnZhbGlkKCkuCisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgbWVyZ2VkV2l0aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
b3RoZXIpIGNvbnN0OworICAgIAorICAgIGJvb2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkg
Y29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIGJvb2wgYXJlU3RpbGxMaXZlKCkgY29uc3Q7Cisg
ICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBj
b25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBI
ZWxwZXJzIGZvciB1c2luZyB0aGlzIGluIGEgdW5pb24uCisgICAgdm9pZCogcmVsZWFzZVJhd1Bv
aW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihtX2RhdGEu
bGVha1JlZigpKTsKKyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGFkb3B0UmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRv
cHRSZWYoc3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGZyb21S
YXdQb2ludGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBzdGF0aWNfY2Fz
dDxEYXRhKj4ocmF3UG9pbnRlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICAvLyBJbnRlcm5hbGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1
c2luZyBhIHBvaW50ZXIgdG8gYSBEYXRhIHRoYXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKyAgICAK
KyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcGFjdCBieSBoYXZpbmcg
aXQgaW50ZXJuYWxseSB1c2UgYSB2ZWN0b3IgdGhhdCBqdXN0IGhhcworICAgIC8vIHRoZSBub24t
dWlkIHBvcnRpb24gb2YgT2JqZWN0UHJvcGVydHlDb25kaXRpb24sIGFuZCB0aGVuIHJlcXVpcmlu
ZyB0aGF0IHRoZSBjYWxsZXJzIG9mIGFsbAorICAgIC8vIG9mIHRoZSBBUElzIHN1cHBseSB0aGUg
dWlkLgorICAgIAorICAgIGNsYXNzIERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
RGF0YT4geworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhKTsKKyAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgRGF0
YSgpIHsgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
PiB2ZWN0b3I7CisgICAgfTsKKyAgICAKKyAgICBSZWZQdHI8RGF0YT4gbV9kYXRhOworfTsKKwor
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlN
aXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBo
ZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVy
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmpl
Y3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKworT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNz
Q29uY3VycmVudGx5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5
SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzcsMTQgKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiBHZXRCeUlkQWNjZXNz
OjpHZXRCeUlkQWNjZXNzKAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0
eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjaGFpbkNvdW50
KQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KQogICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX2NoYWluQ291
bnQoY2hhaW5Db3VudCkKICAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQor
ICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9zdHViUm91dGluZShz
dHViUm91dGluZSkKIHsKLSAgICBpZiAoY2hhaW4pCi0gICAgICAgIG1fY2hhaW4uc2V0KHZtLCBv
d25lciwgY2hhaW4pOwogfQogCiBHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCkBAIC03
MSw3ICs2OSw3IEBAIGJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKIHsK
ICAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NoYWluICYmICFIZWFwOjppc01h
cmtlZChtX2NoYWluLmdldCgpKSkKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNp
dFdlYWsocmVwYXRjaEJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC01MywxMyArNTQsMTIgQEAgcHVibGljOgogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoKQogICAg
ICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudCgwKQogICAgIHsK
ICAgICB9CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygKICAgICAgICAgVk0mLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwK
LSAgICAgICAgU3RydWN0dXJlQ2hhaW4qID0gMCwgdW5zaWduZWQgY2hhaW5Db3VudCA9IDApOwor
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpKTsKICAgICAKICAgICB+R2V0QnlJZEFjY2VzcygpOwogICAgIApAQCAt
NzIsOCArNzIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQogICAgIAotICAgIFN0cnVjdHVyZUNo
YWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KLSAgICB1bnNpZ25l
ZCBjaGFpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbkNvdW50OyB9CisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5l
KCkgY29uc3QKICAgICB7CkBAIC05MSw5ICs5MCw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIENvZGVCbG9jazsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKLSAgICB1bnNpZ25l
ZCBtX2NoYWluQ291bnQ7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7
Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OyAvLyBGSVhNRSB3aGF0IGFib3V0IGJh
cnJpZXJzPwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nl
c3M6OmZyb21TdHJ1Y3R1CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwogICAg
ICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVy
ZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZSk7Ci0gICAg
ICAgIHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24u
Y2hhaW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAorICAgICAgICAgICAgc3R1YkluZm8udS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwogICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBA
IC02NCw2ICs2NSw5IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUK
IAogYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1
ZmZlcikgY29uc3QKIHsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBj
YXNlIFJlcGxhY2U6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUu
Z2V0KCkpKQpAQCAtNzQsMTUgKzc4LDExIEBAIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFr
KFJlcGF0Y2hCdWYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0dGVyOgogICAg
IGNhc2UgQ3VzdG9tU2V0dGVyOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3Ry
dWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1f
Y2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODc0
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRl
ICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2lu
Y2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKQEAgLTUzLDcg
KzU0LDYgQEAgcHVibGljOgogICAgIAogICAgIFB1dEJ5SWRBY2Nlc3MoKQogICAgICAgICA6IG1f
dHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudChVSU5UX01BWCkKICAgICB7CiAg
ICAgfQogICAgIApAQCAtNjIsMTQgKzYyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgSlNDZWxsKiBv
d25lciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCisgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAg
IFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAg
UHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9u
OwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgb2xkU3RydWN0
dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0
cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsK
KyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICBy
ZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9
IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTUsOCArOTUsNyBAQCBw
dWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwKKyAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAgICAgUHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAogICAgICAgICBQYXNzUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CkBAIC0xMDQsMTAgKzEwMyw3IEBA
IHB1YmxpYzoKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5t
X29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQu
bV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Ci0gICAgICAgICAgICByZXN1bHQu
bV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKLSAgICAgICAgfQorICAgICAgICByZXN1bHQubV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRl
ciA9IGN1c3RvbVNldHRlcjsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91
dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0NiwxNyArMTQyLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIAotICAg
IFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNU
cmFuc2l0aW9uKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgcmV0dXJu
IG1fY2hhaW4uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0g
ICAgICAgIHJldHVybiBtX2NoYWluQ291bnQ7Ci0gICAgfQorICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlv
blNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAg
ICAgewpAQCAtMTc4LDggKzE2NCw3IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7
CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1Y3R1cmU7CiAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZUNoYWluPiBtX2NoYWluOwotICAgIHVuc2lnbmVkIG1fY2hhaW5Db3VudDsKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvcGVydHlD
b25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2Vk
UmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlv
bjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KG1fa2luZCwg
IiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNl
OgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBvZmZzZXQoKSwgIiB3aXRoIGF0dHJpYnV0ZXMg
IiwgYXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzZW5jZToKKyAg
ICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5
cGUgIiwgaW5Db250ZXh0KEpTVmFsdWUocHJvdG90eXBlKCkpLCBjb250ZXh0KSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRo
ICIsIGluQ29udGV4dChyZXF1aXJlZFZhbHVlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFBy
b3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVt
cEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjpp
c1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0
eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWdu
ZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMp
OworICAgICAgICBpZiAoY3VycmVudE9mZnNldCAhPSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmli
dXRlcyAhPSBhdHRyaWJ1dGVzKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVp
ZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkgIT0gcHJvdG90eXBl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcykg
IT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRBdHRyaWJ1dGVzICYg
KEFjY2Vzc29yIHwgQ3VzdG9tQWNjZXNzb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJv
dG90eXBlKCkgIT0gcHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRXF1
aXZhbGVuY2U6IHsKKyAgICAgICAgaWYgKCFiYXNlIHx8IGJhc2UtPnN0cnVjdHVyZSgpICE9IHN0
cnVjdHVyZSkgeworICAgICAgICAgICAgLy8gQ29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBz
aW5jZSB3ZSBjYW5ub3QgdmVyaWZ5IHRoaXMgb25lIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAg
ICAgICAgLy8gb2JqZWN0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByYWN5LCBhbmQgbWF5
YmUgbW9yZSByaXNreSB0aGFuIHdlIHdhbnQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKKyAgICAgICAgCisgICAgICAgIFByb3BlcnR5
T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7
CisgICAgICAgIEpTVmFsdWUgY3VycmVudFZhbHVlID0gYmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRP
ZmZzZXQpOworICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IHJlcXVpcmVkVmFsdWUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVz
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorewor
ICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNh
c2UgRXF1aXZhbGVuY2U6CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlKSBjb25zdAoreworICAgIGlmICghaXNTdGlsbFZh
bGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBiYXNlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3VycmVudGx5IHdlIGFzc3VtZSB0aGF0IGFu
IGltcHVyZSBwcm9wZXJ0eSBjYW4gY2F1c2UgYSBwcm9wZXJ0eSB0byBhcHBlYXIsIGFuZCBjYW4g
YWxzbworICAgIC8vICJzaGFkb3ciIGFuIGV4aXN0aW5nIEpTIHByb3BlcnR5IG9uIHRoZSBzYW1l
IG9iamVjdC4gSGVuY2UgaXQgYWZmZWN0cyBib3RoIHByZXNlbmNlIGFuZAorICAgIC8vIGFic2Vu
Y2UuIEl0IGRvZXNuJ3QgYWZmZWN0IEFic2VuY2VPZlNldHRlciBiZWNhdXNlIGltcHVyZSBwcm9w
ZXJ0aWVzIGFyZW4ndCBldmVyIHNldHRlcnMuCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBj
YXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgor
ICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5
U2xvdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlV2hlblZhbGlkKAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAorewor
ICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRh
dGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgIGNhc2UgRXF1aXZhbGVuY2U6IHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gc29tZSB2YXJpYW50IG9m
IGlzVmFsaWQgcmV0dXJuZWQgdHJ1ZSwgd2hpY2gKKyAgICAgICAgLy8gaW1wbGllcyB0aGF0IHdl
IGFscmVhZHkgY29uZmlybWVkIHRoYXQgdGhlIHN0cnVjdHVyZSBrbm93cyBvZiB0aGUgcHJvcGVy
dHkuIFdlIHNob3VsZAorICAgICAgICAvLyBhbHNvIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGUgU3Ry
dWN0dXJlIGlzIGEgY2FjaGVhYmxlIGRpY3Rpb25hcnksIHdoaWNoIG1lYW5zIHdlCisgICAgICAg
IC8vIHNob2xkbid0IGhhdmUgYSBUT0NUT1UgcmFjZSBlaXRoZXIuCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIFdhdGNo
cG9pbnRTZXQqIHNldDsKKyAgICAgICAgc3dpdGNoIChlZmZvcnQpIHsKKyAgICAgICAgY2FzZSBN
YWtlTm9DaGFuZ2VzOgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxh
Y2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRW5zdXJlV2F0Y2hhYmlsaXR5OgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5l
bnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCgKKyAgICAgICAgICAgICAgICAq
SGVhcDo6aGVhcChzdHJ1Y3R1cmUpLT52bSgpLCBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghc2V0IHx8ICFzZXQtPmlzU3RpbGxW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246Omlz
V2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBj
b25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlk
KHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFi
aWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3Ry
dWN0dXJlLCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUs
IGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29u
c3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlw
ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZh
bHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFs
dWUoKS5pc0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgp
LmFzQ2VsbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3Qg
VHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlw
ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAo
aGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246Oktp
bmQgY29uZGl0aW9uKQoreworICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6
OlByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5j
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpB
YnNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAg
ICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZh
bGVuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVm
aW5lIFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZl
cmVuY2VzOworCitjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBL
aW5kIHsKKyAgICAgICAgUHJlc2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2Vu
Y2VPZlNldHRlciwKKyAgICAgICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2lu
dCBvbiB0aGlzIHdpbGwgYmUgYSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3Ry
dWN0dXJlIHRyYW5zaXRpb25zLCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2lu
dCBvbiB0aGUgbmV3IHN0cnVjdHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0
aW9uKCkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5j
ZSkKKyAgICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAg
CisgICAgUHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQor
ICAgICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAg
eworICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykK
KyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAg
IHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJl
c2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAg
ICAgVk0mLCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcHJlc2Vu
Y2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFBy
b3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAg
ICAgICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5w
cm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5
cGUpCisgICAgeworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAg
IHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJh
cnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5
cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRl
cjsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRp
dGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNl
dHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQ
cm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQudS5lcXVp
dmFsZW5jZS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gZXF1
aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0
dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAgfQorICAgICAg
ICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQg
PT0gUHJlc2VuY2U7IH07CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9r
aW5kOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlk
OyB9CisgICAgCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYm
IG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUu
cHJlc2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7
IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBdHRyaWJ1dGVzKCkp
OworICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAg
ICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgKG1fa2luZCA9
PSBBYnNlbmNlIHx8IG1fa2luZCA9PSBBYnNlbmNlT2ZTZXR0ZXIpOyB9CisgICAgSlNPYmplY3Qq
IHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUHJvdG90eXBlKCkp
OworICAgICAgICByZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQg
PT0gRXF1aXZhbGVuY2U7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGhhc1JlcXVpcmVkVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUodS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8VW5p
cXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9r
aW5kKTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVzZW5jZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAgICAgICAgIHJl
c3VsdCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFic2VuY2UucHJv
dG90eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgor
ICAgICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVxdWl2YWxl
bmNlLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91aWQgIT0gb3Ro
ZXIubV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tpbmQg
IT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0
Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAgICAgcmV0dXJu
IHUucHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0CisgICAgICAgICAg
ICAgICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2VuY2UuYXR0cmli
dXRlczsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRl
cjoKKyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJz
ZW5jZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgICAgICBy
ZXR1cm4gdS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNlLnZhbHVlOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBB
YnNlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJs
ZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlk
cy4gSWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0
byByZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzCisgICAgLy8g
YSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3
YW50IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGluIG90aGVyIGNh
c2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRoaXMgd2lsbCBh
bHNvIHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5j
ZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQKKyAg
ICAvLyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcuCisgICAgYm9v
bCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkgIT0gb3RoZXIu
dWlkKCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0
dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4KKyAgICBi
b29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVy
ZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJl
IHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVy
ZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0
aGUgY29uZGl0aW9uIGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdpdmVuIG9iamVj
dCBhbmQgc3RydWN0dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2Us
IGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlCisg
ICAgLy8gY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29uZGl0aW9uIG9u
IGFuIG9iamVjdCB0aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRpZXMuIElmIHRo
ZSBvYmplY3QgaXMgbm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBpbmRpY2F0ZXMg
dGhhdCBjaGVja2luZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVuIHN0cnVjdHVy
ZSBndWFyYW50ZWVzIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9iamVjdCBpcwor
ICAgIC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBvdGhlciB3YXRj
aHBvaW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBjb25kaXRpb24g
aW4gYWRkaXRpb24gdG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlzU3RpbGxWYWxp
ZChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAg
IC8vIEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJsZSwgYnV0IGNv
dWxkIGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFwcHJvcHJpYXRl
IHdhdGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50cyBhcmUgZW5h
YmxlZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24gdGhlIHByb3Bl
cnR5IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNwYWNlIGZvcgor
ICAgIC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQgbmV2ZXIgZ2V0
IHZlcnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFibGUgd2F0Y2hp
bmcsIHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisg
ICAgZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWZh
dWx0LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2YgYW55IFN0cnVj
dHVyZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYgdGhlIHByb3Bl
cnR5IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1ha2UKKyAgICAg
ICAgLy8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5nIGZyb20gYSBK
SVQgdGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJlZmVyYWJsZSB3
aGVuIGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24gZm9yIHRoZSBm
aXJzdCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2ludCBmaXJlIHRo
YXQgY2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBhCisgICAgICAg
IC8vIHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGluZyBpbXBsaWVz
IHRoYXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0IHRvIG1ha2Ug
aXQgcHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5nIHdhdGNoZWQg
bWF5IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVmZXIgdG8gb25s
eSBhc3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJlZW4KKyAgICAg
ICAgLy8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAgICBNYWtlTm9D
aGFuZ2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0byBlbnN1cmUg
dGhhdCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhhcyBubworICAg
ICAgICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVzdCBtZWFucyB0
aGF0IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyByZXBsYWNlbWVu
dCB3YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxlZCBhbHJlYWR5
LiBEbyBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywgc2luY2UgdGhl
IGFjdCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgICAg
IEVuc3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0
IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGlu
ZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBv
c3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNXYXRjaGFi
bGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0dXJlKiwg
SlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFu
Z2VzKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxp
ZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgor
ICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxl
KAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIsIFdhdGNoYWJp
bGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hp
bmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9mIG91ciBjb25k
aXRpb25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9vbCB3YXRjaGlu
Z1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9CisgICAgCisgICAg
Ly8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxs
IGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFs
aWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBXYXRjaGFiaWxp
dHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIEtp
bmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cisg
ICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBKU09iamVj
dCogcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAg
ICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFsZW5jZTsKKyAg
ICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXku
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0IFByb3BlcnR5
Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAg
IHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvcGVydHlD
b25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24g
MTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwyMiBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3RydWN0aW9uWzBd
LnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9y
bWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBp
bnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CiAgICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGlu
dGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENoYWluID0gYWRv
cHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywgc3RydWN0dXJl
LCBjaGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
KyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUu
b3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
X291dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAg
ICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAg
ICB9CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVy
ZSwgbmV3U3RydWN0dXJlLCBpbnRlbmRlZENoYWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVy
biBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQpOwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsx
NjgsMTQgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5
SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0
cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlk
VHJhbnNpdGlvbi5jaGFpbikgewotICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxv
Y2ssIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgp
LAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFp
bi5nZXQoKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21S
YXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9u
LnJhd0NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1
cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJh
bnNpdGlvbigKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5w
cmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRC
eUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgY2hhaW4uZ2V0
KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAg
IH0KQEAgLTIxOSwxNSArMjIwLDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhT
dGF0ZSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNo
YWluOwotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAg
ICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgp
LCBhY2Nlc3MuY2hhaW4oKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYWluLT5pc1N0
aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNoYWluLmdl
dCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCks
IGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM1LDcg
KzIzMiw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhH
ZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAg
ICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGFjY2Vzcy5jaGFpbigpLCBhY2Nlc3MuY2hh
aW5Db3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5j
b25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBD
b21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMjUzLDcgKzI1MCw3IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNh
bGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3Rh
dHVzLmNoYWluKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhH
ZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAg
ICAgICAgICB9IH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2OCwyMiArMzY1LDExIEBA
IFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAotICAgICAgICBSZWZQdHI8SW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgY2hh
aW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hh
aW4gaGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KLSAg
ICAgICAgICAgIGlmIChjaGFpbi0+bWF5SW50ZXJjZXB0U3RvcmVUbyh1aWQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAKLSAg
ICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXpl
ZCAoaS5lLiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJpZXMpCi0gICAgICAgICAgICAv
LyB0aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9uYXJ5IGNhc2Ugd291bGQgb25seSBoYXBwZW4gaWYg
dGhpcyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVuCi0gICAgICAgICAgICAvLyB1c2VkIGluIGFuIG9w
dGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxseSB0aGUgb25seSByZWFzb24g
d2h5IHdlIHdvdWxkCi0gICAgICAgICAgICAvLyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJl
YWxseSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBvcHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgot
ICAgICAgICAgICAgLy8gZGljdGlvbmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2Vz
dCB0aGF0IHRob3NlIG9iamVjdHMgd2VyZSBuZXZlciB1c2VkIGFzCi0gICAgICAgICAgICAvLyBw
cm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJlJ3Mg
YSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKLSAgICAgICAgICAgIC8vIHRoZSBvdGhlciBjaGVj
a3MgYmVsb3cgd2lsbCBmYWlsLgotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgp
IHx8ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkpCisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAg
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
dWlkKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQog
ICAgIApAQCAtMzk0LDcgKzM4MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAg
ICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWlu
LmdldCgpLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKICAgICAgICAg
aWYgKCFkaWRBcHBlbmQpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQz
LDggKzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAg
IG1fa2luZCA9IG90aGVyLm1fa2luZDsKICAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xk
U3RydWN0dXJlOwogICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0g
ICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRl
cm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0g
b3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAg
ICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9
IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KTsKQEAgLTY0LDI5ICs2MywyNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CiAgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVy
ZSA9IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAoc3RydWN0dXJlQ2hhaW4pCi0gICAgICAgIHN0cnVj
dHVyZUNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAgIHJl
c3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJ
ZFZhcmlhbnQ6OnNldHRlcigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKIHsKICAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKICAgICByZXN1bHQubV9v
bGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKGNoYWluKSB7Ci0gICAgICAgIGNoYWlu
LT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQu
bV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgfQorICAg
IHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZz
ZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2Fs
bExpbmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzQsMTggKzEzMCw2IEBAIGJv
b2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAogICAgIHJldHVybiBraW5kKCkg
PT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQgUHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1
cmUoKSBjb25zdAotewotICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAKLSAgICBp
ZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpOwotICAgIAot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29uc3RhbnRDaGVja3Ms
IG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKLSAgICBy
ZXR1cm4gc3RydWN0dXJlOwotfQotCiBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJn
ZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90
aGVyLm1fb2Zmc2V0KQpAQCAtMTU1LDggKzEzOSw4IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0
dGVtcHRUb01lcmdlKGNvbnMKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIHN3aXRjaCAob3Ro
ZXIubV9raW5kKSB7CiAgICAgICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJU
KG1fY29uc3RhbnRDaGVja3MuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5t
X2NvbnN0YW50Q2hlY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRp
b25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNl
dC5pc0VtcHR5KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5t
ZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTE5Niw2ICsxODAsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5z
CiAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwogICAgIEFTU0VSVCgh
cmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwogICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9j
YXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0
eSgpKTsKICAgICAKICAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4g
d2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKICAg
ICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMg
YWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0CkBAIC0yMzIsMTUgKzIxNywxMyBA
QCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIG91dC5w
cmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQo
bmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5D
b250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0
KCksICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQp
LCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8
U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAg
ICAgICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIp
OwotICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAgICAgICAgb3V0LnByaW50KCIs
IGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBj
b250ZXh0KSk7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQp
LCAiXSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwogICAg
ICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKICAgICAgICAg
b3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2
LDcgQEAKICNpZm5kZWYgUHV0QnlJZFZhcmlhbnRfaAogI2RlZmluZSBQdXRCeUlkVmFyaWFudF9o
CiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICBQ
dXRCeUlkVmFyaWFudCgpCiAgICAgICAgIDogbV9raW5kKE5vdFNldCkKICAgICAgICAgLCBtX25l
d1N0cnVjdHVyZShudWxscHRyKQotICAgICAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQog
ICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgewogICAgIH0KQEAgLTU0LDE2
ICs1MywxNSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlh
bnQmKTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50
Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZSgKLSAgICAgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgc3Rh
dGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlP
ZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAg
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCi0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNo
YWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJ
ZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgICAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyk7Cisg
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwKKyAg
ICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbExpbmtTdGF0dXM+KTsKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQ7IH0KICAgICAKQEAgLTc2LDYgKzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fb2xkU3RydWN0dXJlOwogICAgIH0KICAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7Cisg
ICAgfQorICAgIAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0g
UmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKQEAgLTEwMCwxMCArMTAzLDcgQEAgcHVibGlj
OgogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0Nh
bGxzKCkgY29uc3Q7CiAgICAgCi0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgY29uc3RhbnRDaGVja3MoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29uc3Rh
bnRDaGVja3M7Ci0gICAgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtMTExLDE0ICsxMTEsNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICB9CiAgICAgCi0gICAgSlNP
YmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwotICAgIH0KLSAg
ICAKLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OwotICAgIAogICAgIENh
bGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQoa2luZCgpID09IFNldHRlcik7CkBAIC0xMzYsOCArMTI4LDcgQEAgcHJpdmF0ZToKICAgICBL
aW5kIG1fa2luZDsKICAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CiAgICAgU3RydWN0
dXJlKiBtX25ld1N0cnVjdHVyZTsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1f
Y29uc3RhbnRDaGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNl
dCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExp
bmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAko
cmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywzMyArMzcs
NDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojp+
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgpIHsgfQogCiBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKAor
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgV2F0Y2hwb2ludHNP
blN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+JiBoZWFkKQogewotICAgIGhlYWQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+KGhvbGRlciwgV1RGOjptb3Zl
KGhlYWQpKTsKKyAgICBoZWFkID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50PihrZXksIGhvbGRlciwgV1RGOjptb3ZlKGhlYWQpKTsKICAgICByZXR1cm4g
aGVhZC5nZXQoKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxp
Y2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBv
aW50cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCBy
ZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0
IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcu
Ci0gICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8o
KSk7CisgICAgaWYgKCFtX2tleSB8fCAhbV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRp
b246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0
bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50
cy4KKyAgICAgICAgLy8gVGhhdCB3b3JrcywgYmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQg
cmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBsaXN0LCBhbmQKKyAgICAgICAgLy8gdGhlIHNldCdz
IGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFu
Z2luZy4KKyAgICAgICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIu
c3R1YkluZm8oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9rZXkua2lu
ZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAvLyBJZiB0aGlz
IHdhcyBhIHByZXNlbmNlIGNvbmRpdGlvbiwgbGV0J3Mgd2F0Y2ggdGhlIHByb3BlcnR5IGZvciBy
ZXBsYWNlbWVudHMuIFRoaXMgaXMgcHJvZml0YWJsZQorICAgICAgICAvLyBmb3IgdGhlIERGRywg
d2hpY2ggd2lsbCB3YW50IHRoZSByZXBsYWNlbWVudCBzZXQgdG8gYmUgdmFsaWQgaW4gb3JkZXIg
dG8gZG8gY29uc3RhbnQgZm9sZGluZy4KKyAgICAgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAobV9r
ZXkub2JqZWN0KCkpLT52bSgpOworICAgICAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCkt
PnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgbV9rZXkub2Zmc2V0KCkp
OworICAgIH0KKworICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlv
bldhdGNocG9pbnQodGhpcyk7CiB9CiAKIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6
fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygpCiB7CiB9CiAKLVN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0
Y2hwb2ludCgpCitTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dDo6cHVzaCgqdGhpcywgbV9oZWFkKTsKKyAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludDo6cHVzaChrZXksICp0aGlzLCBtX2hlYWQpOwogfQogCiBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3Vy
ZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCi0gICAgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKICAgICBpZiAoIWhvbGRl
clJlZikKICAgICAgICAgaG9sZGVyUmVmID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbyhjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CkBAIC03Miw3ICs4NSw3IEBAIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAgICAgQVNTRVJUKGhv
bGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAgIAotICAgIHJldHVy
biBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoKTsKKyAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRX
YXRjaHBvaW50KGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKIAor
I2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2lu
dC5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTQ2LDE1ICs0NywxMSBAQCBjbGFzcyBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50IDogCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgKLSAgICAgICAg
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIpCi0gICAgICAgIDogbV9ob2xk
ZXIoaG9sZGVyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwK
ICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBuZXh0KQot
ICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKKyAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAg
ICwgbV9ob2xkZXIoaG9sZGVyKQogICAgICAgICAsIG1fbmV4dChXVEY6Om1vdmUobmV4dCkpCiAg
ICAgewogICAgIH0KQEAgLTYyLDYgKzU5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoKTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogcHVzaCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZv
JiBob2xkZXIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50PiYgaGVhZCk7CiAKQEAgLTY5LDYgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwogCiBw
cml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OwogICAgIFdhdGNocG9p
bnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgbV9ob2xkZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG1fbmV4dDsKIH07CkBAIC04MywxMSArODIs
MTEgQEAgcHVibGljOgogICAgIAogICAgIH5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8o
KTsKICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBv
aW50KCk7CisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2lu
dChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAgICBzdGF0aWMg
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0
Y2hwb2ludCgKICAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4m
IGhvbGRlclJlZiwKLSAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyAg
ICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
KCkgY29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAx
ODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwxMiBAQCB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVj
dHVyZXM7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9u
LnJhd0NvbmRpdGlvblNldCk7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0
aW9uU2V0ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgogICAgIGNhc2Ug
YWNjZXNzX3Vuc2V0OgogICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0
byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5CkBAIC03NSw4ICs3OCwxMCBAQCBib29sIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdDoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFy
a2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwg
IUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKQorICAgICAg
ICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdl
dCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgdS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfcmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUU3R1
YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAi
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKQEAgLTExMyw3ICsxMTQsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAg
Ly8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGlu
aXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJl
dmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAo
aXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm8gewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5
SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1Bv
aW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCAr
MTc2LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVl
OwogICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCog
YWRkV2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCkpCiAgICAgewogICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAg
ICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcyk7CisgICAgICAgICAgICB3YXRjaHBv
aW50cywgY29kZUJsb2NrLCB0aGlzLCBjb25kaXRpb24pOwogICAgIH0KICAgICAKICAgICBpbnQ4
X3QgYWNjZXNzVHlwZTsKQEAgLTIxNywyMyArMjE5LDEyIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVj
dFN0cnVjdHVyZTsKICAgICAgICAgfSBnZXRCeUlkU2VsZjsKICAgICAgICAgc3RydWN0IHsKLSAg
ICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJl
OwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByb3RvdHlwZVN0cnVj
dHVyZTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgIH0gZ2V0QnlJZFByb3Rv
OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1
cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0
cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50IDogMzE7Ci0g
ICAgICAgICAgICBib29sIGlzRGlyZWN0IDogMTsKLSAgICAgICAgfSBnZXRCeUlkQ2hhaW47Ci0g
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0
OwogICAgICAgICB9IGdldEJ5SWRMaXN0OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdy
aXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICAgICAgdm9pZCog
cmF3Q29uZGl0aW9uU2V0OwogICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwogICAgICAgICBz
dHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmpl
Y3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODc0ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NzksNyArMTc3OSwxMCBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1v
cmUgc3VidGxlPwogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7
Ci0gICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tp
XS5hbHRlcm5hdGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdv
bid0IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlk
LCB3ZSdkCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUu
CisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ld
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9m
ZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewpAQCAt
MjA2MCwzMCArMjA2MywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBy
ZXN1bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0g
ICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAg
ICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11
bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBz
ZXQgPSBnZXRDYXNlLnNldCgpOwogICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsKICAgICAg
ICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBK
U1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFz
ZSgpKQotICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNl
KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNl
Lm1fdmFsdWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAg
ICAgIGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQo
KSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAgICAgICBpZiAo
Z2V0Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7
CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0
YW50UmVzdWx0KSwKKyAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgp
LAogICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAg
ICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRp
dGlvbjo6RXF1aXZhbGVuY2UpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNX
YXRjaGFibGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRU
cmFuc2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENv
bmN1cnJlbnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXku
b2JqZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChv
ZmZzZXQpOworICAgIHNldC0+YWRkKCZtX3Byb3BlcnR5V2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpmaXJlKGNvbnN0IEZpcmVE
ZXRhaWwmIGRldGFpbCkKK3sKKyAgICAvLyBPbmUgb2YgdGhlIHdhdGNocG9pbnRzIGZpcmVkLCBi
dXQgdGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1ha2Ugc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlbSBh
cmUKKyAgICAvLyBpbiBhbnkgc2V0IGFueW1vcmUuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgYnkg
YWxsb3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRoZSB3YXRjaHBvaW50cworICAgIC8vIHdoZXJldmVy
IGZyb20gc2NyYXRjaC4KKyAgICBpZiAobV9zdHJ1Y3R1cmVXYXRjaHBvaW50LmlzT25MaXN0KCkp
CisgICAgICAgIG1fc3RydWN0dXJlV2F0Y2hwb2ludC5yZW1vdmUoKTsKKyAgICBpZiAobV9wcm9w
ZXJ0eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAgICAgICAgbV9wcm9wZXJ0eVdhdGNocG9pbnQu
cmVtb3ZlKCk7CisgICAgCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0
aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHko
KSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIs
IFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJc
biIpOworICAgIH0KKyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnBy
aW50KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAK
KyAgICBTdHJpbmdGaXJlRGV0YWlsIHN0cmluZ0RldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgp
KTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZz
dHJpbmdEZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZp
cmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZG
U0VUT0YoCisgICAgICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwg
bV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRl
dGFpbCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWls
JiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAor
ICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fcHJvcGVy
dHlXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFy
Kj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorI2RlZmluZSBE
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAg
IAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVy
biBtX2tleTsgfQorICAgIAorICAgIHZvaWQgaW5zdGFsbCgpOworCitwcml2YXRlOgorICAgIGNs
YXNzIFN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGlj
OgorICAgICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlk
ZTsKKyAgICB9OworICAgIGNsYXNzIFByb3BlcnR5V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBv
aW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFByb3BlcnR5V2F0Y2hwb2ludCgpIHsgfQorICAg
IHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJl
RGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIGZpcmUoY29uc3QgRmly
ZURldGFpbCYpOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgU3RydWN0dXJlV2F0Y2hwb2ludCBtX3N0cnVj
dHVyZVdhdGNocG9pbnQ7CisgICAgUHJvcGVydHlXYXRjaHBvaW50IG1fcHJvcGVydHlXYXRjaHBv
aW50OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1aXJl
c1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFr
ZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1
Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7Cit9CisKK3ZvaWQgQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0
YWlsKQoreworICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5z
dXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2lu
dGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAg
ICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRh
cHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3Ry
aW5nRmlyZURldGFpbCBzdHJpbmdEZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAg
CisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25E
dWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0
YWlsKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisj
aW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50
IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkg
Y29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYp
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5
OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAzLDcgKzIwMywxNCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
ZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50
IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29u
c3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9m
ZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9k
ZSogdmFsdWUpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBO
b2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSog
aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsK
KyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
Y29uc3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zm
c2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3Bl
cnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAgICAvLyBXb3JrcyB3
aXRoIGJvdGggR2V0QnlJZFZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFy
aWFudC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KKyAgICBOb2RlKiBsb2Fk
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBj
b25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCk7CisgICAgICAgIAogICAgIHZvaWQgaGFuZGxlR2V0
QnlJZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5v
ZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5
SWRTdGF0dXMmKTsKQEAgLTIxMiw3ICsyMTksMzIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRs
ZVB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVj
dCk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0
b3ImKTsKKyAgICAKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVtaXQg
YSBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uIFJldHVybnMgZmFsc2UgaWYgdGhlCisgICAgLy8g
Y29uZGl0aW9uIG5vIGxvbmdlciBob2xkcywgYW5kIHRoZXJlZm9yZSBubyByZWFzb25hYmxlIGNo
ZWNrIGNhbiBiZSBlbWl0dGVkLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mKTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwcm9tb3RlVG9Db25zdGFu
dChHZXRCeU9mZnNldE1ldGhvZCk7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEgd2F0
Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBJdCBtdXN0IGJlIGEg
UHJlc2VuY2UKKyAgICAvLyBjb25kaXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byBwcm9tb3RlIGEg
UHJlc2VuY2UgY29uZGl0aW9uIHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbi4KKyAgICAvLyBF
bWl0cyBjb2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNvbmRpdGlvbiBndWFyZHMs
IGFuZCByZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4g
UmV0dXJucyBudWxsIGlmIHRoZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLgorICAgIEdldEJ5
T2Zmc2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7Cisg
ICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
Y29uc3QgR2V0QnlPZmZzZXRNZXRob2QmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBO
b2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYs
IE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNrKCkgZm9y
IGVhY2ggY29uZGl0aW9uIGluIHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVpdGhlciBlbWl0cyBjaGVj
a3Mgb3IgcmVnaXN0ZXJzCisgICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEgY29tYmluYXRpb24gb2Yg
dGhlIHR3bykgdG8gbWFrZSB0aGUgY29uZGl0aW9ucyBob2xkLiBJZiBhbnkgb2YgdGhvc2UKKyAg
ICAvLyBjb25kaXRpb25zIGFyZSBubyBsb25nZXIgY2hlY2thYmxlLCByZXR1cm5zIGZhbHNlLgor
ICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICAK
KyAgICAvLyBDYWxscyBjaGVjaygpIGZvciB0aG9zZSBjb25kaXRpb25zIHRoYXQgYXJlbid0IHRo
ZSBzbG90IGJhc2UsIGFuZCBjYWxscyBsb2FkKCkgZm9yIHRoZSBzbG90CisgICAgLy8gYmFzZS4g
RG9lcyBhIGNvbWJpbmF0aW9uIG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBjaGVjayBl
bWlzc2lvbiB0byBndWFyZCB0aGUKKyAgICAvLyBjb25kaXRpb25zLCBhbmQgZW1pdHMgY29kZSB0
byBsb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzbG90IGJhc2UuIFJldHVybnMgYSBub2RlIGNvbnRh
aW5pbmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgYW55IG9mIHRo
ZSBjb25kaXRpb25zIHdlcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAgICBHZXRCeU9mZnNldE1l
dGhvZCBwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOworICAgIE5v
ZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxv
Y2soKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiArNzM4LDkgQEAgcHJpdmF0
ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdh
eSBhcm91bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQg
ZnJvbSB1c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5
IHdhdGNoIHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBt
YWtlIGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFr
SlNDb25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBP
cEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwog
ICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKQEAgLTIyNDAsMTUgKzIyNzUsOCBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5
cGUgb3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAgICBpZiAoYmFzZS0+aGFz
Q29uc3RhbnQoKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5
R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZz
ZXQpKSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOwotICAgICAgICAg
ICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9m
ZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0yMjY0LDYgKzIyOTIs
MTggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIHJldHVy
biBnZXRCeU9mZnNldDsKIH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zm
c2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQoreworICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgp
KSB7CisgICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFu
dFByb3BlcnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQsIG9mZnNldCkpIHsKKyAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAgICByZXR1cm4g
d2Vha0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJl
dHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVy
LCBvZmZzZXQsIG9wKTsKK30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zm
c2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgTm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMjI4MSwx
MCArMjMyMSwyMTIgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVja3Mo
Y29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKQorYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikK
K3sKKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5v
YmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBh
ZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3ZWFrSlNDb25zdGFudChj
b25kaXRpb24ub2JqZWN0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRN
ZXRob2QgQnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9k
IG1ldGhvZCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsg
KytpKQotICAgICAgICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sodmVjdG9yW2ldLmNv
bnN0YW50KCksIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKSk7CisgICAgaWYgKG1ldGhvZC5raW5kKCkg
PT0gR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlCisgICAgICAgICYmIG1ldGhv
ZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPmRmZ1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAg
aWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkobWV0
aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLCBtZXRob2QucHJvdG90eXBlKCktPnN0cnVjdHVyZSgp
LCBtZXRob2Qub2Zmc2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9k
Ojpjb25zdGFudChtX2dyYXBoLmZyZWV6ZShjb25zdGFudCkpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gbWV0aG9kOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cGxh
bkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUGxhbm5pbmcgYSBsb2FkOiAiLCBjb25kaXRp
b24sICJcbiIpOworICAgIAorICAgIC8vIFdlIG1pZ2h0IHByb21vdGUgdGhpcyB0byBFcXVpdmFs
ZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBzdWNoIHByb21vdGlvbgor
ICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5IHRoaXMgY2Fubm90IGJl
IGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8vIE5vbmUgb2Yg
dGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEgbG9hZCBvZiBhbiBFcXVp
dmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBwb3J0aW5nIGl0IHdvdWxk
IGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVMRUFTRV9BU1NFUlQoY29u
ZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworICAgIAorICAg
IC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRoaXMsIGZyb20gbW9zdCBw
cmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAgLy8gMSkgV2F0Y2hwb2lu
dCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBhIGNvbnN0YW50IG5vZGUg
Zm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIgY29kZSBpcyBlbWl0dGVk
LCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMgbmV2ZXIgcmVnaXN0ZXJl
ZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBjb2RlIGFuZCB3ZSB3b24n
dCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QKKyAgICAvLyAgICB0cmFu
c2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJsZSByaWdodCBub3cuCisg
ICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3Ry
dWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQgYnkgdGhlCisgICAgLy8g
ICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNoIHRoZSBzdHJ1Y3R1cmUg
YW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8vICAgIGNvbmRpdGlvbiwg
c2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBjb25zdGFudCBpbiBJUiB3
aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUgc3RydWN0dXJlIGFueXdh
eSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUgY29uZGl0aW9uLgorICAg
IC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJyZW50IHN0cnVj
dHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0aGUKKyAgICAvLyAgICBE
RkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSBhbmQgIWRmZ1No
b3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0aGUgY29uZGl0aW9uLCBh
bmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBh
bmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5vdCB3YXRjaGFibGUuIEVt
aXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQgYSBsb2FkLgorICAgIC8v
CisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBHaXZlIHVwIGFuZCByZXR1
cm4gbnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWdyZWUgb24gd2hhdCB0aGUgc3Ry
dWN0dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGluZyB0aGVzZSB2YXJpb3VzCisgICAg
Ly8gY2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRvIHByb21vdGUgUHJlc2Vu
Y2UgdG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UK
KyAgICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4gQWxzbywgdGhlcmUgYXJl
IGNhc2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0CisgICAgLy8gd2UgZG9u
J3Qgd2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVxdWl2YWxlbmNlIChzZWUg
dGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAoMiksIGFuZCAoMykgYWJvdmUp
LgorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQoY29uZGl0aW9uLm9mZnNldCgpKSkg
eworICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNhdXNlIG9ubHkgdGhlIEdDIGNhbiBj
YXVzZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdhcmJhZ2UKKyAgICAgICAgLy8gdmFs
dWUuCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRpb24ub2JqZWN0KCktPmdldERpcmVj
dChjb25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBl
cXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgICAgICBjb25kaXRpb24u
b2JqZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOworICAgICAgICBpZiAobV9ncmFwaC53
YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgICAgICByZXR1cm4g
R2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CisgICAg
fQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ2xsIGhhdmUgdG8gbWF0ZXJpYWxpemUg
dGhlIGNvbmRpdGlvbidzIGJhc2UgYXMgYSBjb25zdGFudCBpbiBERkcgSVIuIE9uY2UKKyAgICAv
LyB3ZSBkbyB0aGlzLCB0aGUgZnJvemVuIHZhbHVlIHdpbGwgaGF2ZSBpdHMgb3duIGlkZWEgb2Yg
d2hhdCB0aGUgc3RydWN0dXJlIGlzLiBVc2UgdGhhdCBmcm9tCisgICAgLy8gbm93IG9uIGp1c3Qg
YmVjYXVzZSBpdCdzIGxlc3MgY29uZnVzaW5nLgorICAgIEZyb3plblZhbHVlKiBiYXNlID0gbV9n
cmFwaC5mcmVlemUoY29uZGl0aW9uLm9iamVjdCgpKTsKKyAgICBzdHJ1Y3R1cmUgPSBiYXNlLT5z
dHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiB0aGUgc3RydWN0dXJlIHRoYXQgd2Un
dmUgcmVnaXN0ZXJlZCBtYWtlcyB0aGUgY29uZGl0aW9uIGhvbGQuIElmIG5vdCwganVzdCBnaXZl
CisgICAgLy8gdXAuIFRoaXMgaXMgY2FzZSAoNSkgYWJvdmUuCisgICAgaWYgKCFjb25kaXRpb24u
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBHZXRC
eU9mZnNldE1ldGhvZCgpOworICAgIAorICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgaXMgd2F0Y2hl
ZCBieSB0aGUgREZHIGFscmVhZHksIHRoZW4ganVzdCB1c2UgdGhpcyBmYWN0IHRvIGVtaXQgdGhl
IGxvYWQuCisgICAgLy8gVGhpcyBpcyBjYXNlICgyKSBhYm92ZS4KKyAgICBpZiAoc3RydWN0dXJl
LT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQoR2V0
QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZzZXQo
KSkpOworICAgIAorICAgIC8vIElmIHdlIGNhbiB3YXRjaCB0aGUgY29uZGl0aW9uIHJpZ2h0IG5v
dywgdGhlbiB3ZSBjYW4gZW1pdCB0aGUgbG9hZCBhZnRlciB3YXRjaGluZyBpdC4gVGhpcworICAg
IC8vIGlzIGNhc2UgKDMpIGFib3ZlLgorICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNv
bmRpdGlvbikpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1l
dGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7CisgICAg
CisgICAgLy8gV2UgY2FuJ3Qgd2F0Y2ggYW55dGhpbmcgYnV0IHdlIGtub3cgdGhhdCB0aGUgY3Vy
cmVudCBzdHJ1Y3R1cmUgc2F0aXNmaWVzIHRoZSBjb25kaXRpb24uIFNvLAorICAgIC8vIGNoZWNr
IGZvciB0aGF0IHN0cnVjdHVyZSBhbmQgdGhlbiBlbWl0IHRoZSBsb2FkLgorICAgIGFkZFRvR3Jh
cGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLCAKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICBhZGRUb0dyYXBoKEpTQ29uc3RhbnQs
IE9wSW5mbyhiYXNlKSkpOworICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNl
dE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7Cit9
CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9k
JiBtZXRob2QsCisgICAgTm9kZVR5cGUgb3ApCit7CisgICAgc3dpdGNoIChtZXRob2Qua2luZCgp
KSB7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAgICAg
IHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QuY29uc3RhbnQoKSkp
OworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7CisgICAg
ICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9k
LnByb3RvdHlwZSgpKSk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0
aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBvcCk7Cisg
ICAgfQorICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgIC8vIFdpbGwg
bmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgTm9kZVR5cGUgb3Ap
Cit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQoY29uZGl0aW9uKTsK
KyAgICByZXR1cm4gbG9hZChwcmVkaWN0aW9uLCBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJl
KGNvbmRpdGlvbi51aWQoKSksIG1ldGhvZCwgb3ApOworfQorCitib29sIEJ5dGVDb2RlUGFyc2Vy
OjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQor
eworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29u
ZGl0aW9uU2V0KSB7CisgICAgICAgIGlmICghY2hlY2soY29uZGl0aW9uKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dldEJ5T2Zmc2V0
TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRp
dGlvblNldCkgeworICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghcmVzdWx0KTsgLy8gU2hvdWxkIG9ubHkgc2VlIGV4YWN0bHkgb25lIG9mIHRoZXNlLgor
ICAgICAgICAgICAgcmVzdWx0ID0gcGxhbkxvYWQoY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIWNo
ZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9k
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoISFyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIE5vZGVUeXBlIG9wKQoreworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1l
dGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvblNldCk7CisgICAgcmV0dXJuIGxvYWQoCisgICAgICAg
IHByZWRpY3Rpb24sCisgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0
aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkudWlkKCkpLAorICAgICAgICBtZXRob2QsIG9wKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CitOb2RlKiBCeXRlQ29kZVBhcnNl
cjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKKyAgICAKKyAgICBTcGVjdWxhdGVk
VHlwZSBsb2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlwZSBsb2FkT3A7CisgICAgaWYgKHZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSkgeworICAgICAgICBsb2FkUHJlZGljdGlvbiA9IFNwZWNDZWxs
T3RoZXI7CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRlclNldHRlckJ5T2Zmc2V0OworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gcHJlZGljdGlvbjsKKyAgICAgICAgbG9h
ZE9wID0gR2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE5vZGUqIGxvYWRlZFZhbHVlOwor
ICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgIGxvYWRl
ZFZhbHVlID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFyaWFudC5jb25kaXRpb25TZXQoKSwgbG9h
ZE9wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNl
dCgKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCB2YXJpYW50LnN0cnVjdHVyZVNl
dCgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAorICAgICAgICAgICAgbG9h
ZE9wKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgYmFja3dhcmRzIHByb3BhZ2F0aW9uIGtu
b3dzIHRoYXQgd2UndmUgdXNlZCBiYXNlLgorICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7
CisgICAgCisgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVHZXRCeUlkKApAQCAtMjMwNywxOCArMjU0OSwzNiBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAgbV9n
cmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwotICAgIAorICAgICAg
ICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2VzOworICAgICAgICAKICAgICAg
ICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNoYWlucy4g
VGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAgICAgICAvLyAgICBvcHRpbWFsLCBp
ZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0aGF0IHJl
cXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFy
ZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4
ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspCi0gICAgICAg
ICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNr
cygpKTsKLSAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgOiBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVu
ZCgKKyAgICAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQodmFyaWFudC5jb25kaXRp
b25TZXQoKSk7CisgICAgICAgICAgICBpZiAoIW1ldGhvZCkgeworICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKE11bHRpR2V0QnlPZmZz
ZXRDYXNlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIG1ldGhvZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29t
cGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKKyAgICAKICAgICAgICAgLy8gMikg
RW1pdCBhIE11bHRpR2V0QnlPZmZzZXQKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEqIGRh
dGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEt
PnZhcmlhbnRzID0gZ2V0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT5jYXNl
cyA9IGNhc2VzOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAog
ICAgICAgICAgICAgYWRkVG9HcmFwaChNdWx0aUdldEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwpAQCAtMjMyOCwzMCArMjU4OCwxNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIEFTU0VSVChnZXRCeUlkU3RhdHVzLm51
bVZhcmlhbnRzKCkgPT0gMSk7CiAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGdldEJ5SWRT
dGF0dXNbMF07CiAgICAgICAgICAgICAgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2Fk
KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgIGlmICgh
bG9hZGVkVmFsdWUpIHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9w
ZXJhbmQpLAorICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgbV9ncmFwaC5j
b21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwogICAgIAotICAgIE5vZGUqIG9y
aWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgYWRkVG9HcmFwaChDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0
dXJlU2V0KCkpKSwgYmFzZSk7Ci0gICAgCi0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50
Q2hlY2tzKCkpOwotCi0gICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICBi
YXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwotICAgIAotICAg
IC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQgdG8KLSAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFz
ZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9u
ZSB3aXRoCi0gICAgLy8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRo
ZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBz
b21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJl
IG9uIGJhc2UuCi0gICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQotICAgICAgICBhZGRUb0dy
YXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZSk7Ci0gICAgCi0gICAgTm9kZSogbG9hZGVkVmFsdWUg
PSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8g
U3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0gICAgICAgIGJhc2UsIHZhcmlhbnQuYmFzZVN0
cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAgICB2
YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5
T2Zmc2V0KTsKLSAgICAKICAgICBpZiAoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgewogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVl
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4OCw3ICsyNjM0LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyAgICBzaW5jZSB3ZSBvbmx5IHJlYWxseSBjYXJl
IGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8gdGFrZSB0
aGF0CiAgICAgLy8gICAgc2hvcnRjdXQuCiAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVy
T2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7
CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIEltbWVkaWF0
ZU5ha2VkU2V0KTsKICAgICAKICAgICBoYW5kbGVDYWxsKAogICAgICAgICBkZXN0aW5hdGlvbk9w
ZXJhbmQsIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbCwgT1BDT0RFX0xFTkdUSChv
cF9nZXRfYnlfaWQpLApAQCAtMjQyMiwxNyArMjY2OCwyMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAgbV9ncmFw
aC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwotICAgICAgICAKICAgICAg
ICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5k
ZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewogICAg
ICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1
dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5j
b25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0
dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMs
IGlzRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90
aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXRE
YXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwogICAgICAg
ICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0
YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CkBAIC0yNDU0LDcgKzI3MDMs
MTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAKICAgICBjYXNl
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tT
dHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVj
dHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVj
a3MoKSk7CisgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKKyAg
ICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRC
eUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAog
ICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgIApAQCAtMjUwNSwx
OSArMjc1NywxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVyOiB7Ci0gICAgICAgIE5v
ZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgIAotICAgICAgICBhZGRUb0dyYXBoKAot
ICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAKLSAgICAgICAgZW1pdENo
ZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHZh
cmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50
KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAgCi0gICAgICAgIE5vZGUqIGxvYWRl
ZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICBTcGVjQ2VsbE90aGVyLCBi
YXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5v
ZmZzZXQoKSwKLSAgICAgICAgICAgIEdldEdldHRlclNldHRlckJ5T2Zmc2V0KTsKKyAgICAgICAg
Tm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIHZhcmlhbnQpOworICAgICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7CisgICAgICAgICAg
ICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1
cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRUb0dyYXBoKEdldFNldHRlciwgbG9hZGVkVmFsdWUp
OwogICAgICAgICAKQEAgLTI1NDUsNyArMjc4OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0KSkudG9Mb2NhbCgpKTsKICAgICAKICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lz
dGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIG9yaWdpbmFsQmFzZSwgSW1tZWRpYXRlTmFr
ZWRTZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFz
ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRS
ZWdpc3RlcisrKSwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAKICAgICAgICAgaGFu
ZGxlQ2FsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksOSBAQCB2b2lkIENvbW1v
bkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJl
ZmVyZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgp
KTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCisgICAg
ICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNl
cyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksOCBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmgiCiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiSW5s
aW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05OCw2ICsxMDAsOCBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNl
czsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZl
cmVuY2VzOwogICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9p
bnRzOworICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKICAgICBW
ZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRzOwogICAgIAogICAgIFJlZlB0
cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMjEgKzI5NCwyMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2sp
OyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9y
ZS4KICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93
IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0
YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQuc3RydWN0dXJlU2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh2YXJpYW50LnN0cnVjdHVyZVNldCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJpYW50cy5sYXN0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxhc3QoKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA9
IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGdldENhc2Uuc2V0KCkuZmlsdGVy
KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZXRDYXNlLnNldCgpLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5jYXNlc1tpLS1dID0gZGF0YS5j
YXNlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAg
IGlmIChkYXRhLmNhc2VzLnNpemUoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoCi0gICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBkYXRhLnZhcmlh
bnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIGVtaXRHZXRC
eU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGRhdGEuY2FzZXNbMF0ubWV0aG9kKCksIGRhdGEu
aWRlbnRpZmllck51bWJlcik7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNzQsOCArMzczLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTsp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uY29uc3RhbnRDaGVja3MoKS5p
c0VtcHR5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1tpXS5hbHRlcm5hdGVC
YXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uY29uZGl0aW9uU2V0
KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291
bGQgaGFuZGxlIHByb3RvdHlwZSBjYXNlcy4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzODYKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzkyLDcgKzM5MCwxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBN
dWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0
YS5hZGQoKTsKLSAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cyA9IHN0YXR1cy52YXJpYW50
cygpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhLT5jYXNlcy5h
cHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNldCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkKHZhcmlhbnQub2Zm
c2V0KCkpKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRhdGEtPmlkZW50
aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb011bHRpR2V0QnlPZmZzZXQoZGF0YSk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CkBAIC00MzIsOSArNDM1LDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YXR1cy5udW1WYXJpYW50cygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBhZGRDaGVja3Mo
b3JpZ2luLCBpbmRleEluQmxvY2ssIHN0YXR1c1tpXS5jb25zdGFudENoZWNrcygpKTsKKworICAg
ICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlvblNldCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEdv
b2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFu
dEZvclVzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBu
b2RlLT5vcmlnaW4sIGNvbmRpdGlvbi5vYmplY3QoKSwgS25vd25DZWxsVXNlKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
IWFsbEdvb2QpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGVtaXRQdXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1
ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKQEAgLTUyOSw0MSArNTU0LDY4IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CisgICAgCisg
ICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2Rl
LCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyKQorICAgIHsKKyAgICAgICAgLy8gV2hlbiB3ZSBnZXQgdG8gaGVyZSB3ZSBoYXZlIGFscmVh
ZHkgZW1pdHRlZCBhbGwgb2YgdGhlIHJlcXVpc2l0ZSBjaGVja3MgZm9yIGV2ZXJ5dGhpbmcuCisg
ICAgICAgIC8vIFNvLCB3ZSBqdXN0IG5lZWQgdG8gZW1pdCB3aGF0IHRoZSBtZXRob2Qgb2JqZWN0
IHRlbGxzIHVzIHRvIGVtaXQuCiAgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1ldGhvZC5raW5k
KCkpIHsKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6Cisg
ICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1ldGhvZC5jb25zdGFu
dCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4
SW5CbG9jaywgbm9kZSwgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5v
ZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKKyAgICAgICAgICAgIE5v
ZGUqIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBub2RlLT5vcmlnaW4sIG1ldGhvZC5wcm90b3R5cGUoKSk7CisgICAg
ICAgICAgICBlbWl0R2V0QnlPZmZzZXQoCisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBu
b2RlLCBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qu
b2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IH0KKyAgICAgICAgCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29u
c3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFu
dCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKICAgICB7Ci0gICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNo
aWxkMSgpOwogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VW
YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVl
IGJhc2VGb3JMb2FkOwotICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAg
ICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2VWYWx1ZS5tX3ZhbHVlOwotICAgICAg
ICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNl
Rm9yTG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpKSB7Cisg
ICAgICAgIC8vIFdlIGFyZW4ndCBzZXQgdXAgdG8gaGFuZGxlIHByb3RvdHlwZSBzdHVmZi4KKyAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLmlz
RW1wdHkoKSk7CisKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdldENv
bnN0YW50UHJvcGVydHkoYmFzZVZhbHVlLm1fdmFsdWUsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCks
IHZhcmlhbnQub2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0
YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkg
ewotICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFu
dChpbmRleEluQmxvY2ssIG9yaWdpbiwgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwotICAgICAg
ICAgICAgY2hpbGRFZGdlID0gRWRnZShjaGlsZCwgS25vd25DZWxsVXNlKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAg
ICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBjaGlsZEVkZ2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGVt
aXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIEVkZ2UgY2hp
bGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CisgICAgeworICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAg
ICAgICAKICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgIAotICAgICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisgICAgICAgIGlmIChpc0lubGlu
ZU9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdl
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hpbGRFZGdlKSk7CisgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBub2RlLT5vcmlnaW4sIGNo
aWxkRWRnZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0
YSYgZGF0YSA9ICptX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7Ci0gICAgICAgIGRh
dGEub2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsKKyAgICAgICAgZGF0YS5vZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAg
ICAgICAgIAogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0
eVN0b3JhZ2UpOwpAQCAtNjQzLDE1ICs2OTUsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Q2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLT5vcmlnaW4sIG5vZGUt
PmNoaWxkMSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRDaGVja3MoCi0gICAgICAgIE5v
ZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIGNvbnN0IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImIGNoZWNrcykKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjaGVja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywg
Y2hlY2tzW2ldLmNvbnN0YW50KCksIGNoZWNrc1tpXS5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhOb2RlT3JpZ2lu
IG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
Y2VsbC0+c3RydWN0dXJlKCkpID09IFN0cnVjdHVyZVJlZ2lzdGVyZWRBbmRXYXRjaGVkKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw5IEBA
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgQXJyYXlCdWZmZXJWaWV3
V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJh
eUJ1ZmZlclZpZXcqIHZpZXcsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBDb21tb25EYXRhJiBjb21tb24p
CiB7CisgICAgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQo
Y29kZUJsb2NrKTsKICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQqIG5ldXRlcmlu
Z1dhdGNocG9pbnQgPQogICAgICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQ6OmNy
ZWF0ZSgqY29kZUJsb2NrLT52bSgpKTsKICAgICBuZXV0ZXJpbmdXYXRjaHBvaW50LT5zZXQoKS0+
YWRkKHdhdGNocG9pbnQpOwpAQCAtNDUsMTAgKzQ2LDIzIEBAIHZvaWQgQXJyYXlCdWZmZXJWaWV3
V2F0Y2hwb2ludEFkYXB0b3I6OmEKIH0KIAogdm9pZCBJbmZlcnJlZFZhbHVlQWRhcHRvcjo6YWRk
KAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVl
LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZl
cnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBDb21tb25EYXRhJiBjb21tb24pCiB7CiAgICAgY29k
ZUJsb2NrLT5hZGRDb25zdGFudChpbmZlcnJlZFZhbHVlKTsgLy8gRm9yIGNvbW1vbiB1c2Vycywg
aXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBvciBub3QuIElmIHJlZmVyZW5j
ZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgotICAgIGluZmVycmVkVmFsdWUtPmFk
ZCh3YXRjaHBvaW50KTsKKyAgICBpbmZlcnJlZFZhbHVlLT5hZGQoY29tbW9uLndhdGNocG9pbnRz
LmFkZChjb2RlQmxvY2spKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRB
ZGFwdG9yOjphZGQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3sKKyAgICBzd2l0Y2ggKGtl
eS5raW5kKCkpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZToKKyAg
ICAgICAgY29tbW9uLmFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHMuYWRk
KGtleSwgY29kZUJsb2NrKS0+aW5zdGFsbCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBjb21tb24uYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cy5hZGQoa2V5LCBj
b2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogRGVzaXJl
ZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KQEAgLTc0LDYgKzg4LDExIEBA
IHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSlNBcnIKICAgICBtX2J1ZmZlclZp
ZXdzLmFkZExhemlseSh2aWV3KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIG1fYWRhcHRp
dmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERlc2lyZWRXYXRjaHBv
aW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1
cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC04OCw2ICsxMDcsNyBAQCB2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmxpbmVTZXRzLnJlYWxseUFkZChjb2Rl
QmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVC
bG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2Nr
LCBjb21tb25EYXRhKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29k
ZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0
aWxsVmFsaWQoKSBjb25zdApAQCAtOTUsNyArMTE1LDE4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9p
bnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKQog
ICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5m
ZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJl
U3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQor
ICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7Cit9CisK
K3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQs
IER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludCgiRGVzaXJlZCB3
YXRjaHBvaW50czpcbiIpOworICAgIG91dC5wcmludCgiICAgIFdhdGNocG9pbnQgc2V0czogIiwg
aW5Db250ZXh0KG1fc2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIElu
bGluZSB3YXRjaHBvaW50IHNldHM6ICIsIGluQ29udGV4dChtX2lubGluZVNldHMsIGNvbnRleHQp
LCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4
dChtX2luZmVycmVkVmFsdWVzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAg
QnVmZmVyIHZpZXdzOiAiLCBpbkNvbnRleHQobV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIp
OworICAgIG91dC5wcmludCgiICAgIE9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNv
bnRleHQobV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMsIGNvbnRleHQpLCAiXG4iKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1
ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorI2lu
Y2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5o
IgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MCwzMyArNDIsNTYgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3MgR3JhcGg7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBUIHNldCwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3N0cnVjdCBT
ZXRQb2ludGVyQWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayogY29kZUJs
b2NrLCBUIHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNl
dC0+YWRkKHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0LT5hZGQoY29tbW9uLndhdGNo
cG9pbnRzLmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbklu
dmFsaWRhdGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9Cisg
ICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBUIHNldCwgRHVt
cENvbnRleHQqKQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoc2V0KSk7Cisg
ICAgfQogfTsKIAogc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9p
ZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0
aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIENvbW1vbkRhdGEmKTsKICAg
ICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRW
YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBpbmZlcnJlZFZhbHVlLT5oYXNCZWVuSW52YWxp
ZGF0ZWQoKTsKICAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBEdW1wQ29udGV4dCopCisgICAg
eworICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihpbmZlcnJlZFZhbHVlKSk7CisgICAgfQog
fTsKIAogc3RydWN0IEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yIHsKLSAgICBzdGF0
aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBXYXRjaHBvaW50Kik7
CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgQ29t
bW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChKU0FycmF5QnVm
ZmVyVmlldyogdmlldykKICAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gIXZpZXctPmxlbmd0
aCgpOwotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuICF2aWV3LT5sZW5ndGgoKTsKKyAgICB9CisgICAgc3RhdGljIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBKU0FycmF5QnVmZmVyVmlldyogdmll
dywgRHVtcENvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250
ZXh0KEpTVmFsdWUodmlldyksIGNvbnRleHQpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVC
bG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgQ29tbW9uRGF0YSYpOworICAg
IHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFrZXkuaXNXYXRjaGFibGUoKTsKKyAg
ICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dCgKKyAgICAgICAgUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgRHVtcENvbnRleHQqIGNv
bnRleHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KGtleSwgY29udGV4dCkp
OwogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBlLCB0eXBl
bmFtZSBBZGFwdG9yID0gR2VuZXJpY1NldEFkYXB0b3I8V2F0Y2hwb2ludFNldFR5cGU+PgordGVt
cGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBTZXRQ
b2ludGVyQWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdh
dGNocG9pbnRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdHlwZWRlZiBIYXNoTWFwPFdh
dGNocG9pbnRTZXRUeXBlLCBib29sPiBTdGF0ZU1hcDsKQEAgLTg3LDcgKzExMiw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVhbGx5QWRkZWQpOwogICAgICAgICAKICAg
ICAgICAgZm9yIChhdXRvJiBzZXQgOiBtX3NldHMpCi0gICAgICAgICAgICBBZGFwdG9yOjphZGQo
Y29kZUJsb2NrLCBzZXQsIGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CisgICAg
ICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbik7CiAgICAgICAgIAog
ICAgICAgICBtX3JlYWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CkBAIC0xMDcsNiArMTMyLDE1IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc2V0cy5jb250YWlucyhzZXQpOwogICAgIH0KIAor
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAg
Zm9yIChjb25zdCBXYXRjaHBvaW50U2V0VHlwZSYgZW50cnkgOiBtX3NldHMpIHsKKyAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICBBZGFwdG9yOjpkdW1wSW5Db250ZXh0
KG91dCwgZW50cnksIGNvbnRleHQpOworICAgICAgICB9CisgICAgfQorCiBwcml2YXRlOgogICAg
IEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5cGU+IG1fc2V0czsKICAgICBib29sIG1fcmVhbGx5QWRk
ZWQ7CkBAIC0xMjIsNiArMTU2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExhemlseShJbmZl
cnJlZFZhbHVlKik7CiAgICAgdm9pZCBhZGRMYXppbHkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKICAg
ICAKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJl
Y3RseS4gVXNlIEdyYXBoOjp3YXRjaENvbmRpdGlvbigpLCB3aGljaCBkb2VzCisgICAgLy8gdGhl
IHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwgYXMgc29tZSBvdGhlciBib29ra2VlcGluZy4KKyAg
ICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIAog
ICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQo
Q29kZUJsb2NrKiwgQ29tbW9uRGF0YSYpOwpAQCAtMTQ0LDEyICsxODIsMjAgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNXYXRjaGVkKHZpZXcpOwogICAg
IH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hl
ZChrZXkpOworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1
bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAg
ICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNl
dCo+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElubGluZVdhdGNocG9p
bnRTZXQqPiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZl
cnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAg
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVy
Vmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOworICAgIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDE0IEBAIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6
fkRlc2lyZWRXZWFrUmVmZXIKIAogdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemls
eShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKKyAgICBpZiAo
Y2VsbCkKKyAgICAgICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKK30KKwordm9pZCBEZXNpcmVk
V2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZS5pc0NlbGwoKSkKKyAgICAgICAgYWRkTGF6aWx5KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAogYm9v
bCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5j
ZXMuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBA
IG5hbWVzcGFjZSBKU0MgeyAKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNDZWxsOworY2xh
c3MgSlNWYWx1ZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKQEAgLTQ4LDYgKzQ5
LDcgQEAgcHVibGljOgogICAgIH5EZXNpcmVkV2Vha1JlZmVyZW5jZXMoKTsKIAogICAgIHZvaWQg
YWRkTGF6aWx5KEpTQ2VsbCopOworICAgIHZvaWQgYWRkTGF6aWx5KEpTVmFsdWUpOwogICAgIGJv
b2wgY29udGFpbnMoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21t
b25EYXRhKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1Nyw4ICsyNTcsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgaWYgKG5vZGUtPmhhc011bHRpR2V0QnlPZmZzZXREYXRh
KCkpIHsKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJpZCIsIGRhdGEuaWRl
bnRpZmllck51bWJlciwgInsiLCBpZGVudGlmaWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl0s
ICJ9Iik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS52
YXJpYW50c1tpXSwgY29udGV4dCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGF0YS5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5D
b250ZXh0KGRhdGEuY2FzZXNbaV0sIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYgKG5vZGUtPmhh
c011bHRpUHV0QnlPZmZzZXREYXRhKCkpIHsKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEm
IGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOwpAQCAtNTMwLDYgKzUzMCw4IEBA
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgaWYgKHZh
bHVlLT5wb2ludHNUb0hlYXAoKSkKICAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGluQ29u
dGV4dCgqdmFsdWUsICZteUNvbnRleHQpLCAiXG4iKTsKICAgICB9CisKKyAgICBvdXQucHJpbnQo
aW5Db250ZXh0KHdhdGNocG9pbnRzKCksICZteUNvbnRleHQpKTsKICAgICAKICAgICBpZiAoIW15
Q29udGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgbXlDb250ZXh0LmR1bXAob3V0KTsKQEAgLTg0
OCw2ICs4NTAsMzAgQEAgdm9pZCBHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZUZsYQog
ICAgIH0KIH0KIAorYm9vbCBHcmFwaDo6d2F0Y2hDb25kaXRpb24oY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1dhdGNoYWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemls
eShrZXkub2JqZWN0KCkpOworICAgIGlmIChrZXkuaGFzUHJvdG90eXBlKCkpCisgICAgICAgIG1f
cGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5LnByb3RvdHlwZSgpKTsKKyAgICBpZiAo
a2V5Lmhhc1JlcXVpcmVkVmFsdWUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFk
ZExhemlseShrZXkucmVxdWlyZWRWYWx1ZSgpKTsKKyAgICAKKyAgICBtX3BsYW4ud2F0Y2hwb2lu
dHMuYWRkTGF6aWx5KGtleSk7CisKKyAgICBpZiAoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2UpCisgICAgICAgIG1fc2FmZVRvTG9hZC5hZGQoc3RkOjptYWtlX3BhaXIo
a2V5Lm9iamVjdCgpLCBrZXkub2Zmc2V0KCkpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCit7CisgICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhzdGQ6Om1ha2Vf
cGFpcihiYXNlLCBvZmZzZXQpKTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjps
aXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9j
ayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVy
ID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAgLTEwMjAsOCArMTA0Niwx
MiBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTCiBKU1ZhbHVlIEdy
YXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KAogICAgIEpTVmFsdWUgYmFzZSwgY29uc3QgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7
Ci0gICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKQor
ICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgewor
ICAgICAgICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVp
ZCwgd2UgY291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KKyAgICAgICAgLy8gd2F0Y2hp
bmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKKyAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFz
ZSwgc3RydWN0dXJlLnNldCgpLCBvZmZzZXQpOwogfQpAQCAtMTE2NywxNyArMTE5Nyw5IEBAIHZv
aWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNl
dDoKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBH
ZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFy
aWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0g
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gc2V0LnNpemUoKTsgai0tOykKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKLQotICAgICAgICAgICAg
ICAgICAgICAvLyBEb24ndCBuZWVkIHRvIG1hcmsgYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBj
aGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVu
IGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIG1hcmsgdGhl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRu
J3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQotICAgICAgICAgICAgICAgICAg
ICAvLyB2YXJpYW50cyBkaWQgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJp
YW50LmNhbGxMaW5rU3RhdHVzKCkpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgTXVsdGlH
ZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNh
c2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiBn
ZXRDYXNlLnNldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZFJlYWRPbmx5UG9pbnRlcihzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2NSw2ICs2NjUs
MTUgQEAgcHVibGljOgogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJl
dHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNo
cG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAgCisgICAgLy8gUmV0
dXJucyBmYWxzZSBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW52YWxpZCBvciB1bndhdGNoYWJsZS4g
SWYgdGhpcyBpcyBhIFByZXNlbmNlIGNvbmRpdGlvbiwKKyAgICAvLyB0aGlzIGFsc28gbWFrZXMg
aXQgY2hlYXAgdG8gcXVlcnkgaWYgdGhlIGNvbmRpdGlvbiBob2xkcy4gQWxzbyBtYWtlcyBzdXJl
IHRoYXQgdGhlIEdDIGtub3dzCisgICAgLy8gd2hhdCdzIGdvaW5nIG9uLgorICAgIGJvb2wgd2F0
Y2hDb25kaXRpb24oY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIC8vIENo
ZWNrcyBpZiBpdCdzIGtub3duIHRoYXQgbG9hZGluZyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgYXQg
dGhlIGdpdmVuIG9mZnNldCBpcyBmaW5lLiBUaGlzIGlzCisgICAgLy8gY29tcHV0ZWQgYnkgdHJh
Y2tpbmcgd2hpY2ggY29uZGl0aW9ucyB3ZSB0cmFjayB3aXRoIHdhdGNoQ29uZGl0aW9uKCkuCisg
ICAgYm9vbCBpc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0KTsKKyAg
ICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAg
ICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwog
ICAgIApAQCAtODQ0LDYgKzg1Myw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8SW5saW5lVmFyaWFi
bGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBIYXNoTWFwPENvZGVCbG9jayos
IHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVz
czsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxz
Pj4gbV9ieXRlY29kZUtpbGxzOworICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJv
cGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7
CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7CiAgICAgTmF0dXJhbExv
b3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
dWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdG
cm96ZW5WYWx1ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEdldEJ5T2Zmc2V0TWV0aG9kOjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX2tpbmQsICI6Iik7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIElu
dmFsaWQ6CisgICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRleHQo
Y29uc3RhbnQoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOgor
ICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBM
b2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KG9mZnNldCgpLCAiQCIsIHBvaW50
ZXJEdW1wSW5Db250ZXh0KHByb3RvdHlwZSgpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK3ZvaWQg
TXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGluQ29udGV4dChtX3Nl
dCwgY29udGV4dCksICI6IiwgaW5Db250ZXh0KG1fbWV0aG9kLCBjb250ZXh0KSk7Cit9CisKK3Zv
aWQgTXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEdldEJ5T2Zmc2V0TWV0aG9k
OjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAg
b3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHZXRCeU9m
ZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZToKKyAg
ICAgICAgb3V0LnByaW50KCJMb2FkRnJvbVByb3RvdHlwZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YV9oCisjZGVmaW5lIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEZyb3plblZhbHVlOworCitjbGFzcyBHZXRCeU9mZnNldE1l
dGhvZCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAg
ICAgQ29uc3RhbnQsCisgICAgICAgIExvYWQsCisgICAgICAgIExvYWRGcm9tUHJvdG90eXBlCisg
ICAgfTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCgpCisgICAgICAgIDogbV9raW5kKElu
dmFsaWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0QnlPZmZzZXRNZXRob2Qg
Y29uc3RhbnQoRnJvemVuVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRN
ZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAg
IHJlc3VsdC51LmNvbnN0YW50ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBsb2FkKFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKKyAgICB7CisgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IExvYWQ7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0g
b2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
R2V0QnlPZmZzZXRNZXRob2QgbG9hZEZyb21Qcm90b3R5cGUoRnJvemVuVmFsdWUqIHByb3RvdHlw
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRo
b2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZEZyb21Qcm90b3R5cGU7Cisg
ICAgICAgIHJlc3VsdC51LmxvYWQucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXN1
bHQudS5sb2FkLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52
YWxpZDsgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQor
ICAgIAorICAgIEZyb3plblZhbHVlKiBjb25zdGFudCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoa2luZCgpID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIHUuY29uc3RhbnQ7Cisg
ICAgfQorICAgIAorICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVy
biB1LmxvYWQucHJvdG90eXBlOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkIHx8IGtpbmQo
KSA9PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiB1LmxvYWQub2Zmc2V0Owor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29u
dGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAor
cHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIEZyb3plblZhbHVlKiBjb25zdGFudDsKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGU7CisgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gbG9hZDsKKyAgICB9IHU7
CisgICAgS2luZCBtX2tpbmQ7Cit9OworCitjbGFzcyBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSB7Citw
dWJsaWM6CisgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgTXVsdGlHZXRCeU9mZnNldENhc2UoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIGNvbnN0IEdl
dEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2QpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAgICAgICAs
IG1fbWV0aG9kKG1ldGhvZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYg
c2V0KCkgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2V0OyB9CisgICAgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhv
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0aG9kOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJ1Y3R1cmVTZXQgbV9zZXQ7Cisg
ICAgR2V0QnlPZmZzZXRNZXRob2QgbV9tZXRob2Q7Cit9OworCitzdHJ1Y3QgTXVsdGlHZXRCeU9m
ZnNldERhdGEgeworICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CisgICAgVmVjdG9yPE11
bHRpR2V0QnlPZmZzZXRDYXNlLCAyPiBjYXNlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgog
I2luY2x1ZGUgIkRGR0Vwb2NoLmgiCiAjaW5jbHVkZSAiREZHTGF6eUpTVmFsdWUuaCIKKyNpbmNs
dWRlICJERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIgogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5o
IgogI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgpA
QCAtNjUsMTEgKzY2LDYgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyOwogfTsKIAotc3RydWN0IE11bHRpR2V0QnlPZmZzZXREYXRhIHsK
LSAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxHZXRCeUlkVmFyaWFu
dCwgMj4gdmFyaWFudHM7Ci19OwotCiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewogICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiAgICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAy
PiB2YXJpYW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDEwICszMjgsMTggQEAg
Ym9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5
T2Zmc2V0OiB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhKCkub2Zmc2V0OworCisgICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkgeworICAgICAgICAgICAgaWYgKEpTT2Jq
ZWN0KiBrbm93bkJhc2UgPSBub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09i
amVjdCo+KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3JhcGguaXNTYWZlVG9Mb2FkKGtub3du
QmFzZSwgb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CiAg
ICAgICAgIGlmICh2YWx1ZS5pc0luZmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
KCkub2Zmc2V0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgIGlmICghdmFsdWVbaV0tPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDEsNDIgKzM0OSwyOCBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIAogICAgIGNhc2UgTXVs
dGlHZXRCeU9mZnNldDogewogICAgICAgICAvLyBXZSBjYW4ndCBhbHdheXMgZ3VhcmFudGVlIHRo
YXQgdGhlIE11bHRpR2V0QnlPZmZzZXQgaXMgc2FmZSB0byBleGVjdXRlIGlmIGl0Ci0gICAgICAg
IC8vIGNvbnRhaW5zIGxvYWRzIGZyb20gcHJvdG90eXBlcy4gV2Uga25vdyB0aGF0IGl0IHdvbid0
IGxvYWQgZnJvbSB0aG9zZSBwcm90b3R5cGVzIGlmCi0gICAgICAgIC8vIHdlIHdhdGNoIHRoZSBt
dXRhYmlsaXR5IG9mIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGxvYWRlZC4gU28sIGhlcmUgd2UgdHJ5
IHRvCi0gICAgICAgIC8vIGNvbnN0YW50LWZvbGQgcHJvdG90eXBlIGxvYWRzLCBhbmQgaWYgdGhh
dCBmYWlscywgd2UgY2xhaW0gdGhhdCB3ZSBjYW5ub3QgaG9pc3QuIFdlCi0gICAgICAgIC8vIGFs
c28ga25vdyB0aGF0IGEgbG9hZCBpcyBzYWZlIHRvIGV4ZWN1dGUgaWYgd2UgYXJlIHdhdGNoaW5n
IHRoZSBwcm90b3R5cGUncwotICAgICAgICAvLyBzdHJ1Y3R1cmUuCi0gICAgICAgIGZvciAoY29u
c3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIXZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBwcm90b3R5cGUgbG9hZC4KLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgSlNWYWx1ZSBiYXNlID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgICAgICBG
cm96ZW5WYWx1ZSogZnJvemVuID0gZ3JhcGguZnJlZXplKGJhc2UpOwotICAgICAgICAgICAgaWYg
KHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkCi0g
ICAgICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKQot
ICAgICAgICAgICAgICAgICYmIGZyb3plbi0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQodmFy
aWFudC5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHdhdGNo
aW5nIHRoYXQgaXQncyBzYWZlIHRvIGxvYWQgZnJvbSB0aGlzLgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVl
IGNvbnN0YW50UmVzdWx0ID0gZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAg
ICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCks
IHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewot
ICAgICAgICAgICAgICAgIC8vIENvdWxkbid0IGNvbnN0YW50LWZvbGQgYSBwcm90b3R5cGUgbG9h
ZC4gVGhlcmVmb3JlLCB3ZSBzaG91bGRuJ3QgaG9pc3QKLSAgICAgICAgICAgICAgICAvLyBiZWNh
dXNlIHRoZSBzYWZldHkgb2YgdGhlIGxvYWQgZGVwZW5kcyBvbiBzdHJ1Y3R1cmUgY2hlY2tzIG9u
IHRoZSBwcm90b3R5cGUsCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlJ3JlIHRvbyBjaGVhcCB0
byB2ZXJpZnkgdGhhdCBoZXJlLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgLy8gY29udGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5cGVzLiBJZiB0aGUgbG9hZCByZXF1aXJl
cyBhIGNoZWNrIGluIElSLCB3aGljaCBpcyByYXJlLCB0aGVuCisgICAgICAgIC8vIHdlIGN1cnJl
bnRseSBjbGFpbSB0aGF0IHdlIGRvbid0IGtub3cgaWYgaXQncyBzYWZlIHRvIGV4ZWN1dGUgYmVj
YXVzZSBmaW5kaW5nIHRoYXQKKyAgICAgICAgLy8gY2hlY2sgaW4gdGhlIGFic3RyYWN0IHN0YXRl
IHdvdWxkIGJlIGhhcmQuIElmIHRoZSBsb2FkIHJlcXVpcmVzIHdhdGNocG9pbnRzLCB3ZSBqdXN0
CisgICAgICAgIC8vIGNoZWNrIGlmIHdlJ3JlIG5vdCBpbiBhIGNsb2JiZXJlZCBzdGF0ZSAoaS5l
LiBpbiBiZXR3ZWVuIGEgc2lkZSBlZmZlY3QgYW5kIGFuCisgICAgICAgIC8vIGludmFsaWRhdGlv
biBwb2ludCkuCisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENh
c2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAgICAgICBH
ZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhvZCgpOworICAgICAgICAgICAg
c3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpDb25zdGFudDogLy8gT0sgYmVjYXVzZSBjb25zdGFudHMgYXJlIGFsd2F5cyBzYWZl
IHRvIGV4ZWN1dGUuCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOiAv
LyBPSyBiZWNhdXNlIHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGhhcyBpdHMgb3duIGNoZWNrcyBmb3Ig
bG9hZGluZyBmcm9tIHNlbGYuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgICAgICAg
ICAvLyBPbmx5IE9LIGlmIHRoZSBzdGF0ZSBpc24ndCBjbG9iYmVyZWQuIFRoYXQncyBhbG1vc3Qg
YWx3YXlzIHRoZSBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUoKSAhPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghZ3JhcGguaXNTYWZlVG9Mb2FkKG1l
dGhvZC5wcm90b3R5cGUoKS0+Y2FzdDxKU09iamVjdCo+KCksIG1ldGhvZC5vZmZzZXQoKSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3
ZSB3aWxsIGVpdGhlcjoKLSAgICAgICAgICAgIC8vIC0gTm90IGxvYWQgZnJvbSB0aGUgcHJvdG90
eXBlIGJlY2F1c2UgY29uc3RhbnQgZm9sZGluZyB3aWxsIHN1Y2NlZWQgaW4gdGhlCi0gICAgICAg
ICAgICAvLyAgIGJhY2tlbmQsIG9yCi0gICAgICAgICAgICAvLyAtIEVtaXQgaW52YWxpZCBjb2Rl
IHRoYXQgZmFpbHMgd2F0Y2hwb2ludCBjaGVja3MuIFRoaXMgY291bGQgaGFwcGVuIGlmIHRoZQot
ICAgICAgICAgICAgLy8gICBwcm9wZXJ0eSBiZWNvbWVzIG11dGFibGUgYWZ0ZXIgdGhpcyBwb2lu
dCwgc2luY2Ugd2UgYWxyZWFkeSBzZXQgdGhlIHdhdGNocG9pbnQKLSAgICAgICAgICAgIC8vICAg
YWJvdmUuIFRoaXMgY2FzZSBpcyBPSyBzaW5jZSB0aGUgY29kZSB3aWxsIGZhaWwgd2F0Y2hwb2lu
dCBjaGVja3MgYW5kIG5ldmVyCi0gICAgICAgICAgICAvLyAgIGdldCBpbnN0YWxsZWQuCiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNSAr
ODYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZXModmFyaWFu
dC5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVk
IHRvIHdhdGNoIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdv
dWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRv
IENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gd2F0Y2ggdGhlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0
aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZh
cmlhbnRzIGRpZCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50
LmNhbGxMaW5rU3RhdHVzKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVn
aXN0ZXJTdHJ1Y3R1cmVzKGdldENhc2Uuc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5
T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcwLDI0ICszODcw
LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYg
ZGF0YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKIAotICAgICAgICBpZiAoZGF0
YS52YXJpYW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGRhdGEuY2FzZXMuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rp
b24gd2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2UgdGhhdC4KICAgICAgICAgICAg
IHRlcm1pbmF0ZShCYWRDYWNoZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEudmFyaWFu
dHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXpl
KCk7IGktLTspCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEuY2Fz
ZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7
IGktLTspCiAgICAgICAgICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11
bHRpR2V0QnlPZmZzZXQgY2FzZSAiLCBpKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGV4aXQgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgZmFpbCIpKTsKICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdl
dEJ5T2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxTd2l0
Y2hDYXNlLCAyPiBjYXNlczsKICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyBqLS07
KSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YXJpYW50LnN0cnVj
dHVyZVNldCgpW2pdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9IGRh
dGEuY2FzZXNbaV07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBnZXRDYXNlLnNldCgp
LnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2V0Q2FzZS5zZXQoKVtqXTsKICAgICAgICAgICAgICAgICBiYXNlU2V0LmFkZChzdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmVJ
RChzdHJ1Y3R1cmUpLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwogICAgICAgICAgICAgfQpAQCAt
Mzg5OCwyOSArMzg5OCwzNiBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFZhbHVlRnJv
bUJsb2NrLCAyPiByZXN1bHRzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ld
LCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07Cisg
ICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhvZCgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAx
IDwgZGF0YS5jYXNlcy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ld
OwotICAgICAgICAgICAgYmFzZVNldC5tZXJnZSh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAg
ICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVz
dWx0OwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgY29uc3RhbnRSZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHko
Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJh
c2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoY29uc3RhbnRSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnRSZXN1bHQpKTsKLSAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRo
b2Q6OkNvbnN0YW50OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQo
SlNWYWx1ZTo6ZW5jb2RlKG1ldGhvZC5jb25zdGFudCgpLT52YWx1ZSgpKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9h
ZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHlCYXNlOwot
ICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIodmFyaWFudC5hbHRlcm5hdGVCYXNl
KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtp
bmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZCkKICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlCYXNlID0gYmFzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KHZh
cmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgp
LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KG1ldGhvZC5v
ZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQ
dHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5KHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBsb2FkUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFz
ZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHJlcGF0
Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24s
CiAgICAgYm9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3
SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVl
ZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9p
bnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQo
Y29kZUJsb2NrKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVC
bG9jayk7CkBAIC0xMzIsNDcgKzEzMiwzMyBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZB
Y2Nlc3MoCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNo
ZWNrKAotICAgIEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNyb0Fzc2Vt
YmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVn
IHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJl
ICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgewot
ICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0dWJJbmZvLmFkZFdh
dGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0g
ICAgICAgICAgICAvLyBJZiB3ZSBleGVjdXRlIHRoaXMgY29kZSwgdGhlIG9iamVjdCBtdXN0IGhh
dmUgdGhlIHN0cnVjdHVyZSB3ZSBleHBlY3QuIEFzc2VydAotICAgICAgICAgICAgLy8gdGhpcyBp
biBkZWJ1ZyBtb2Rlcy4KLSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgb2sgPSBicmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAgICAgaml0LAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBqaXQuYWJvcnRX
aXRoUmVhc29uKFJlcGF0Y2hJbmVmZmVjdGl2ZVdhdGNocG9pbnQpOwotICAgICAgICAgICAgb2su
bGluaygmaml0KTsKLSAgICAgICAgfQorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMs
IEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgIGNvbmRpdGlvbi5vYmpl
Y3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAorICAgICAgICAgICAg
c3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRpdGlvbikpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIAotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOworCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKGNv
bmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKAotICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoaml0LAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAg
IHN0cnVjdHVyZSkpOworICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICBqaXQs
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVy
ZSkpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAg
SlNWYWx1ZSBwcm90b3R5cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChwcm90
b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90
eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0g
ICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOworc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQ
UikKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiBzZXQpIHsKKyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICAgICAg
ICAgIGNvbmRpdGlvbiwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNj
cmF0Y2hHUFIpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFJlcGF0
Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKQEAgLTI5NiwxMSArMjgyLDEyIEBAIHN0
YXRpYyBGdW5jdGlvblB0ciBjdXN0b21Gb3IoY29uc3QgUHV0UHIKIAogc3RhdGljIGJvb2wgZ2Vu
ZXJhdGVCeUlkU3R1YigKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90
IGNvdW50LAorICAgIEZ1bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRh
cmdldEZyb21Qcm94eSwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwKICAgICBDb2RlTG9j
YXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWws
IFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewotCisgICAgQVNTRVJUKGNv
bmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKTsKKyAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBHUFJS
ZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7
CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCkBAIC0zNDYsMzcgKzMz
MywyOSBAQCBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIH0KIAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAo
c3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0
Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hw
b2ludChjb2RlQmxvY2spKTsKIAogICAgIGlmICh3YXRjaHBvaW50U2V0KQogICAgICAgICB3YXRj
aHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAg
IFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsgCi0gICAgSlNPYmplY3QqIHBy
b3RvT2JqZWN0ID0gMDsKLSAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIHByb3RvT2JqZWN0ID0gYXNP
YmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKLSAgICAgICAg
ICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b09iamVjdC0+c3RydWN0dXJlKCk7
Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJv
cGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hw
b2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICBwcm90b09iamVjdCwgcHJvdG9TdHJ1Y3R1cmUsIGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKCFwcm90b09iamVjdCB8fCBwcm90b09iamVjdC0+c3RydWN0dXJl
KCkgPT0gY3VyclN0cnVjdHVyZSk7Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJK
aXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAgCisgICAgU3RydWN0dXJlKiBjdXJy
U3RydWN0dXJlOworICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICBjdXJy
U3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIGVsc2UKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9
IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsK
ICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMo
KnZtLCBvZmZzZXQpOworICAgIAogICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSID0gSW52YWxp
ZEdQUlJlZzsKICAgICBpZiAoa2luZCAhPSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGNo
YWluKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBo
YXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRoZSB0YXJnZXQuCiAgICAgICAgICAg
ICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0
KCkpLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvblNl
dC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAg
ICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0
dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8KQEAgLTYyNyw5ICs2MDYs
OCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWCiAgICAgICAgIGFz
T2JqZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQotICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0
T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRj
aHBvaW50cygpKQorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgcmV0dXJuIEF0dGVt
cHRUb0NhY2hlOwpAQCAtODI3LDIxICs4MDUsMjIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUJ1aWxkR2V0QnlJRAogICAgIH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNs
b3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAg
U3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAw
OworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAg
ICAKICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1
ZSkgewogICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwg
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogCiAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvdW50ID0g
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFp
bkZvckNoYWluQWNjZXNzKAotICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQ
cm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1
cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgb2Zmc2V0ID0gY29u
ZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAg
IFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpm
cm9tKHN0dWJJbmZvKTsKQEAgLTg1Miw3ICs4MzEsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4
ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90
b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCks
IGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9mZnNldCwg
CiAgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50
U2V0KCksIAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUp
OwpAQCAtODcxLDcgKzg1MCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdl
dEJ5SUQKICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAg
Y29uZGl0aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYgKzk3Miwy
OCBAQCBzdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVj
dHVyZShFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29s
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3Ry
dWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlk
ZW50KTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkg
fHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3Bl
cnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1
Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1
Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAg
b3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3Qg
aGF2ZQogICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYg
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAg
ICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNr
aXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3Ry
dWN0dXJlIGhhcwpAQCAtMTAyMCwxNCArMTAwMSwxNCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0
UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMh
IEltcGxlbWVudCBpdCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMwOTE0CiAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFk
ZXIoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobm9ybWFsaXplUHJvdG90
eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWlu
ID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgLy8gZW1pdFB1dFRyYW5zaXRpb25TdHViCisgICAgaWYgKHB1dEtpbmQgPT0gTm90
RGlyZWN0KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93
bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1Nsb3dDYXNlKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0
dWJJbmZvLnN0dWJSb3V0aW5lOwpAQCAtMTA4MywxNyArMTA2NCw4IEBAIHN0YXRpYyBTdHJ1Y3R1
cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG9sZFN0
cnVjdHVyZSkpOwogICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAg
ICAgb2xkU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgICAgIAotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3Ig
KFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICpp
dDsgKytpdCkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCks
IHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRj
aEdQUjEpOwotICAgICAgICB9Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRp
b25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywg
c3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7CiAKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCkBAIC0xMjI4LDcgKzEyMDAsNyBAQCBzdGF0aWMg
U3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgCiAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9j
YXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQpAQCAtMTI1Niw4ICsxMjI4LDggQEAgc3RhdGljIFN0
cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICAgICAgZXhlYy0+Y29kZUJs
b2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAg
ICAgICAgIHN0cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gb2xkU3RydWN0dXJlOworICAgIAorICAg
IHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTEyODEs
MTIgKzEyNTMsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAog
ICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgp
KSB7CiAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3Bl
cnR5KSB7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRy
YW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVy
ZSkKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFl
bWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0
dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4o
ZXhlYyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAg
ICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAg
LTEyOTQsNyArMTI2NSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZl
ciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2lu
ZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEyLDIwICsx
MjgzLDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAg
ICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAg
IGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3Qu
YmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlk
UHJvdG90eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xv
dC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5i
YXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAg
ICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAg
ICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlv
bigpLm9mZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7CisKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsK
ICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1
YkluZm8pOwogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAg
ICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJ
bmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNs
b3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LAogICAg
ICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLApAQCAt
MTMzNiw3ICsxMzA5LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJ
RAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAg
ICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xv
dC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFj
Y2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFp
biwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRp
bmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRp
b25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTM4MCwxNyArMTM1Mywx
NiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgICAg
ICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAotICAgICAgICAgICAgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1
Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywg
cHV0S2luZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKSAKKyAgICAgICAgICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlv
blN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywg
cHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAg
c3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgICAgIGxpc3QtPmFk
ZEFjY2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAogICAg
ICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAg
ICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwK
KyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCwKICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICB9IGVsc2Ug
ewpAQCAtMTQyMywyMSArMTM5NSwyNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVp
bGRQdXRCeUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0Nh
Y2hlYWJsZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0g
RG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7
Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVf
dCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAg
ICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vzcyhl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7Ci0gICAg
ICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAKKyAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFs
dWUpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAg
ICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90
LmJhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAg
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9
IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAog
ICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAg
Ym9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZv
cihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0
eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwKICAgICAgICAg
ICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50
U2xvd1BhdGhUYXJnZXQoKSksCkBAIC0xNDQ4LDcgKzE0MjQsNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlk
QWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNj
ZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBz
dHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1
YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1
c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CkBAIC0xNDg3LDExICsxNDYzLDE3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlS
ZXBhdGNoSW4oCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXRJZ25vcmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90QmFzZSA9IHdhc0ZvdW5kID8gc2xv
dC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVfdCBjb3VudCA9ICFmb3VuZFNsb3RC
YXNlIHx8IGZvdW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAgICAgICBub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgZm91bmRTbG90QmFzZSwgaWRl
bnQsIG9mZnNldElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlw
ZUNoYWluKQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7
CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5
cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAg
fQorICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAgICAgCiAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CkBAIC0xNTE2LDcgKzE0OTgsNiBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZTsKICAgICAKICAgICB7CkBAIC0xNTQ3LDE4ICsxNTI4LDggQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgp
KQogICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRj
aHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4t
PmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsr
aXQpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3Ry
dWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJl
KiBwcm90b1N0cnVjdHVyZSA9IHByb3RvdHlwZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBh
ZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlLCBw
cm90b1N0cnVjdHVyZSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAg
ICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpZiAo
cHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9p
bnRzKCkpCi0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVBy
b3BlcnR5KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAg
ICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQorICAgICAgICBjaGVj
a09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhl
Yy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hH
UFIpOwogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBzdHViSml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdh
c0ZvdW5kKSkpLCByZXN1bHRHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE4
NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJl
Q2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCi0KLSNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlQ2hh
aW4uaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIDogbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUocHJvdG90eXBlKQotewotICAg
IEFTU0VSVChtX3Byb3RvdHlwZS5pc051bGwoKSB8fCBtX3Byb3RvdHlwZS5pc09iamVjdCgpKTsK
LSAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChT
dHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKTsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpKQotICAg
ICAgICBtX3ZlY3Rvci5hcHBlbmQoY3VycmVudCk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hh
aW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBoZWFkKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAg
ICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkK
LXsKLSAgICBpZiAobV9wcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBm
b3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGFzT2JqZWN0KG1fcHJvdG90eXBlKS0+c3RydWN0dXJl
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUo
KSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVj
dHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlKQotICAgIDogbV9n
bG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBl
KGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgbV92ZWN0
b3IuYXBwZW5kKHByb3RvdHlwZVN0cnVjdHVyZSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hh
aW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQotICAgIDogbV9nbG9iYWxPYmplY3QoY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlw
ZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
Y2hhaW4tPmhlYWQoKVtpXTsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhl
YWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0
dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5
cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtp
XS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKCkKLXsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjppc1N0aWxsVmFs
aWQoKSBjb25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBl
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSktPnN0cnVjdHVyZSgpICE9IG1f
dmVjdG9yW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50UHJv
dG90eXBlID0gbV92ZWN0b3JbaV0tPnN0b3JlZFByb3RvdHlwZSgpOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXRjaGVzKFN0cnVj
dHVyZUNoYWluKiBjaGFpbikgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmVjdG9yW2ldICE9IGNoYWlu
LT5oZWFkKClbaV0uZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IGlmIChjaGFpbi0+aGVhZCgpW21fdmVjdG9yLnNpemUoKV0pCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpt
YXlJbnRlcmNlcHRTdG9yZVRvKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9y
W2ldLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKCFpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF0
dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3JtYWxpemVkKCkKLXsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGFrZXNT
bG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0KGkpLT50YWtlc1Nsb3dQYXRoSW5E
RkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotSlNPYmplY3QqIEludGVuZGVkU3RydWN0dXJlQ2hhaW46
OnRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fdmVjdG9yLmlzRW1w
dHkoKSk7Ci0gICAgaWYgKG1fdmVjdG9yLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gYXNP
YmplY3QobV9wcm90b3R5cGUpOwotICAgIHJldHVybiBhc09iamVjdChtX3ZlY3RvclttX3ZlY3Rv
ci5zaXplKCkgLSAyXS0+c3RvcmVkUHJvdG90eXBlKCkpOwotfQotCi1ib29sIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46Om9wZXJhdG9yPT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3Ro
ZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0ID09IG90aGVyLm1fZ2xvYmFs
T2JqZWN0Ci0gICAgICAgICYmIG1fcHJvdG90eXBlID09IG90aGVyLm1fcHJvdG90eXBlCi0gICAg
ICAgICYmIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOwotfQotCi12b2lkIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OmdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2
ZWN0b3IpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSBjdXJyZW50UHJvdG90eXBlID0gbV9wcm90b3R5
cGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAg
IEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSk7Ci0g
ICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGF0KGkpOwotICAgICAgICB2ZWN0
b3IuYXBwZW5kKENvbnN0YW50U3RydWN0dXJlQ2hlY2soY3VycmVudE9iamVjdCwgY3VycmVudFN0
cnVjdHVyZSkpOwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0gY3VycmVudFN0cnVjdHVyZS0+
cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmbV9nbG9iYWxPYmplY3Qp
OwotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmbV9wcm90b3R5cGUpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fdmVjdG9yW2ldKTsKLX0KLQotdm9pZCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAg
ZHVtcEluQ29udGV4dChvdXQsIDApOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0Ci17Ci0gICAgb3V0LnByaW50KAotICAgICAgICAiKGdsb2JhbCA9ICIsIFJhd1BvaW50ZXIo
bV9nbG9iYWxPYmplY3QpLCAiLCBoZWFkID0gIiwKLSAgICAgICAgaW5Db250ZXh0KG1fcHJvdG90
eXBlLCBjb250ZXh0KSwgIiwgdmVjdG9yID0gWyIpOwotICAgIENvbW1hUHJpbnRlciBjb21tYTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXBJbkNvbnRleHQobV92ZWN0b3JbaV0sIGNv
bnRleHQpKTsKLSAgICBvdXQucHJpbnQoIl0pIik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faAotI2RlZmluZSBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluX2gKLQotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2su
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFZNOwotc3RydWN0IER1bXBDb250ZXh0
OwotCi1jbGFzcyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluIDogcHVibGljIFJlZkNvdW50ZWQ8SW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gewotcHVibGljOgotICAgIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAg
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKik7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBo
ZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4o
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCB1bnNpZ25lZCBjb3VudCk7Ci0gICAgfkludGVuZGVkU3RydWN0dXJlQ2hhaW4oKTsKLSAg
ICAKLSAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlcyhTdHJ1
Y3R1cmVDaGFpbiopIGNvbnN0OwotICAgIGJvb2wgbWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKLSAgICBib29sIGlzTm9ybWFsaXplZCgpOwotICAgIAotICAgIGJv
b2wgdGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKTsKLSAgICAKLSAgICBKU1Zh
bHVlIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9Ci0gICAgCi0gICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KLSAgICBTdHJ1
Y3R1cmUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOyB9
Ci0gICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgSlNPYmplY3QqIHRlcm1pbmFsUHJvdG90eXBlKCkgY29u
c3Q7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iu
bGFzdCgpOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZ2F0aGVyQ2hlY2tzKENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAg
IAotcHJpdmF0ZToKLSAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7Ci0gICAgSlNW
YWx1ZSBtX3Byb3RvdHlwZTsKLSAgICBWZWN0b3I8U3RydWN0dXJlKj4gbV92ZWN0b3I7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEludGVuZGVkU3RydWN0dXJlQ2hhaW5f
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShy
ZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEyLDcgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIGVsc2UKICAgICAgICAgbWF4VHJhbnNpdGlv
bkxlbmd0aCA9IHNfbWF4VHJhbnNpdGlvbkxlbmd0aDsKICAgICBpZiAoc3RydWN0dXJlLT50cmFu
c2l0aW9uQ291bnQoKSA+IG1heFRyYW5zaXRpb25MZW5ndGgpIHsKLSAgICAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9u
YXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CiAgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFk
ZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHRyYW5zaXRp
b247CkBAIC00ODksMTEgKzQ4OSwxMSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRl
Q2hhbmdlVHJhCiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
RGljdGlvbmFyeUtpbmQga2luZCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlU
cmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlLaW5kIGtp
bmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkK
IHsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAg
ICAgCi0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwor
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJl
ZCk7CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwpAQCAtNTA3LDkgKzUw
Nyw5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2kKICAgICByZXR1
cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGlj
dGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVy
ZSogU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRG
aXJlKiBkZWZlcnJlZCkKIHsKLSAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCk7CisgICAgcmV0dXJuIHRvRGljdGlvbmFy
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgQ2FjaGVkRGljdGlvbmFyeUtpbmQsIGRlZmVycmVk
KTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvQ2Fj
aGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEZWZlcnJlZFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUq
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBzZWFsVHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1
cmUqIGZyZWV6ZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKQEAgLTE5NCw3ICsxOTQsMTkg
QEAgcHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlv
bmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KICAgICBib29sIGlzVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSA9PSBVbmNhY2hl
ZERpY3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0aW9uYXJ5S2lu
ZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKTsgfQorICAgIGJvb2wg
cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gZGlj
dGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kCisgICAgICAgICAgICAmJiAh
dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICAgICAgJiYgISh0
eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mbygpLm5l
d0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBw
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvKCku
aGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvKCku
bmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCk7CisgICAgfQogCiAgICAgLy8gV2Ug
dXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9yIHN0cnVjdHVyZXMgdGhhdCBtYXkgZ2V0
IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBwcmV2ZW50CiAgICAgLy8gREZHIGZyb20g
aW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ugc3RydWN0dXJlcyBkb24ndCB0cmFuc2l0
aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFwcGVhcnMuCkBAIC0yMDIsNyArMjE0LDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0
T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMu
CiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5
cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8o
KS5pc09iamVjdCgpOyB9CkBAIC01MjgsNyArNTQwLDcgQEAgcHJpdmF0ZToKICAgICAvLyB0byB1
bmxvY2sgaXQuCiAgICAgdm9pZCBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlv
bihWZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0
eVRhYmxlKiYpOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCk7CisgICAgc3RhdGljIFN0cnVj
dHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlL
aW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRy
KTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzNiw2
ICs1MzYsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxs
Q29kZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShj
b25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAgIAogICAgIC8vIEZJWE1FOiBVc2Ug
QXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKIAo=
</data>
<flag name="commit-queue"
          id="282890"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>257715</attachid>
            <date>2015-07-28 18:23:50 -0700</date>
            <delta_ts>2015-07-29 14:26:09 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews103 for mac-mavericks</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>745793</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
AQAAJgAcAGZhc3QvY2FudmFzL2NhbnZhcy1saW5lRGFzaC1zdGRlcnIudHh0VVQJAAPwJbhVpiC4
VXV4CwABBPUBAAAEUAAAAM3OPQrCQBRF4d5V3A0YEiMhDmKTiBCs1E4snuaCgckbeZn4t3qzDMvz
VacZPRYlstKlmcsL8DVkaZ74cBOPeuwfB2pLOxl5XhXLRXrBemsWbONQ7aqgke94ZNx3ylqGu0On
T/Fdi3YqiJl8HCTCU4aIoAQ9e2pEP05wJTTo/EsLyaz5p5kfUEsDBAoAAAAAAIKQ/EYAAAAAAAAA
AAAAAAASABwAZmFzdC9jYW52YXMvd2ViZ2wvVVQJAAOEJrhVjCa4VXV4CwABBPUBAAAEUAAAAFBL
AwQUAAIACAB4kPxGCOrnhJ8BAAAABAAAPgAcAGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS13
aXRoLWZvcm1hdC1hbmQtdHlwZS1jcmFzaC1sb2cudHh0VVQJAAN0JrhVdCa4VXV4CwABBPUBAAAE
UAAAAJ2RT2/aMByG7/4UPk1QVVOchARb0w6UFTFVFVpRe0S/+A9YDXbkON349gtJR8y6FmmXJLaf
9/Eb+95i7qDe4dJusbKNEe3T4Xmzr35II6RbOykZzdI0+YxQ7YVtPOs+pHMMEYxx9ItEySTmMZH4
+8MNY/PbBWP3VsirYDw7eHnTzq3A1dIxVloQX7rlhfSzw1I8gtNg/NdRY2q9NVJgbfz138Zr/I/l
cwPm1tT+0xjFp3JERKr4oMwOjCjlq2bUif+7xYMH39SnEslwQiRN5AclquN7Vlr+fHYEY5QOCioV
XFIcJ3rNGE2GKMQZvRRtE1mQSEXYtyeG8cJBtWv/MP+TyEjBp3mQWJVgGON2X+lSLs165ySI5b4q
A8udNds7/SK7c5Otbhroppm6pHtfFd5az87Bw9UY0dMOUOSQBNiTdc+lrj1jrnnrP5OQ6FUCWZZP
Evy0vmXMd8Q3491hZdu7G71YLY4wGWAeqR7+6dX6PT4+8rlSiiaqoFNK8abq5ZvCigMiyRmQxzAA
tXcN9xtttEckDTmhOMUnCpxH6DdQSwMEFAACAAgAeJD8RvY8wpVwAQAAwAMAADsAHABmYXN0L2Nh
bnZhcy93ZWJnbC90ZXgtaW1hZ2Utd2l0aC1mb3JtYXQtYW5kLXR5cGUtc3RkZXJyLnR4dFVUCQAD
dCa4VXQmuFV1eAsAAQT1AQAABFAAAACdkUFvgjAYhu/8ip4WMTtQUJBm2UGdxsUsJpp5NB+01UZs
Salu/vuhOKnb1GQn0vZ5n758xQgh7xN7QdtPfczQ67RHSH8wJORNUda01t29Yb1ybwK6YJqQTAF9
Oh4PmenuR/QdtABpnhtbWYilZBQJaR5/Gh/RH8eXBpQqWZgH1/HP5TD1eHKjzAokzdhJ0ziK/91i
asBsi3OJoJ4QbgXsRon88O1mKl1fjMB1WrUiZhzuKQ4blcZ12nUU/DC+Fy0ToZVoUbtvRdTroYZ8
Vf5h9J0IcZJ2IisxyUASkqpNLjI2krOVZkBHmzyzLGMll2OxY8e5sVLXsXSdkN/TXVfZr1axfTDQ
dJ34fAMkEQQWNld6nYnCEKK3v/0XEuydJBCGUTtA89mAEHMkXqTR+4kq366xU4IeYFzDqccr+MPw
2TXeP/AR5zwOeBJ34hgt8kq+SBTdOzi4ACIfaqAwepuahZDCOLhlc5SnMTpToI3zBVBLAwQUAAIA
CACCkPxG1z/+yJEAAAD6AAAANwAcAGZhc3QvY2FudmFzL3dlYmdsL3R5cGVkLWFycmF5cy1pbi13
b3JrZXJzLWNyYXNoLWxvZy50eHRVVAkAA4QmuFWEJrhVdXgLAAEE9QEAAARQAAAAtc6xDoIwEIDh
3ae4jam2hYAJszgRTRqdjCGlPaEJcuRaYnh7eQnXf/n+xpibqeFiw4QeEgGj9ZDJR0SOsl/D5HtK
sg09W95kS0OU52CHmWIKzuBCnPayfhaDs0e+M2KXK10KdRK5FkoXVVl1+I1aFUfHNo5ZDc+GeSbI
X3AliKsb4b37QAw+MLpEvNV/njj8AFBLAwQUAAIACACCkPxGBfhklXABAADAAwAANAAcAGZhc3Qv
Y2FudmFzL3dlYmdsL3R5cGVkLWFycmF5cy1pbi13b3JrZXJzLXN0ZGVyci50eHRVVAkAA4QmuFWE
JrhVdXgLAAEE9QEAAARQAAAAnZFBb4IwGIbv/IqeFjE7UFCgzbKDOo2LWUw082gqbbURW1Kqm/9+
CA7qNjXZibR93qcvXyEAwPuEHo/92IcMvM76GA+GI4zfFGVta907GtYv9qZE50xjnCpCn8rjETO9
45i+Ey2INM+tvczFWjIKhDSPP42P4I/jSwNIlMzNg+v4dTmIPL66UWZDJE3ZWdMqxf9uMTPE7PO6
RNCUoJ2A3SiRnb69VCXbixG4TqcZcpdxck9x2qg0rtNtoqEfonvRIhFaiQ61+1ZEsx5pkm2KP4y+
EwhGSRxZiWlKJMaJ2mUiZWM532hG6HiXpZZlouR6Ig6snBsrdLGli0N+T3ddZb9axQ6IIW3XQfUN
JIpIYGELpbepyA3Gev/bfyGB3llCQz/qBmAxH2JsSuJFGn2cquLtWgcl6AmGDZx4vII/DJ9f4/0T
H3HOUcBXKEYILLNKvlwpenRgcAFEPmmA3Oh9YpZCCuPAjs1RniBQU0Qb5wtQSwMECgAAAAAAepD8
RgAAAAAAAAAAAAAAAAkAHABmYXN0L2Nzcy9VVAkAA3cmuFWMJrhVdXgLAAEE9QEAAARQAAAAUEsD
BBQAAgAIAHqQ/EZhKvWZpgEAAAsEAAA4ABwAZmFzdC9jc3MvbmVzdGVkLXBlcmNlbnQtaGVpZ2h0
LW9uLXJlcGxhY2VkLWNyYXNoLWxvZy50eHRVVAkAA3cmuFV3JrhVdXgLAAEE9QEAAARQAAAAnZFd
a9swFIbv9St0NZJShr/qDzEGS7OGjFLCEtbLIEtHiagjGfm4W/79nLiNlW1tYDcyOnrOo9dHD5YK
x5streyGKtsa2a2OTttd/R2MBLdyAKxIkzD/SEiD0rbIyOLLckle1q4GzjESUkqDX2GQQgZRCPTb
8pax6d2MsQcr4crbT/YIt11twV0DjrHKcvnpeDwDnOzn8gd3mhv8PGpNozcGJNUGr/80XtN/HJ8b
qLCmwQ9jEp3CpSpQ5TthttzICl40o6P4v1MskWPbnELEw4TiJIZ3QtSH76Sy4ulsBGOSDIoSFL+k
OBR6zZjcDK0iSotLrV1H6nUk0s/bE8N+5ni97f4we+1QqRR55nUsKm4YE3ZX6wrmZrV1wOV8V1ee
5d6azb1+huPcoNPlni5P1SXd2yr/1Xp2ypFfjUlxukHJjMce9mjdU6UbZMy1f/vPJGHQS7K4zLOb
mD6u7hjDI/HVoNsvbPd2o2er5QEOB1gEqod/olq9xUcHPlNKFbEqi7wo6Lru5evSyj0J4zMgi/gA
NOhagWttNJIw8TmpREFPFHdIyG9QSwMEFAACAAgAepD8RtBlo3NxAQAAwAMAADUAHABmYXN0L2Nz
cy9uZXN0ZWQtcGVyY2VudC1oZWlnaHQtb24tcmVwbGFjZWQtc3RkZXJyLnR4dFVUCQADdya4VXcm
uFV1eAsAAQT1AQAABFAAAACdkU1vgjAch+98ip4WMR54k5dm2UGdxsUsJpp5NIW22ogtKcXNbz+Q
Dco2NdmJtH1+T3/8awMArA/b8klAHJuAl9UYwsl0BuGrwKSvrUdnRcbl3hLJnEgIU4Hw4+V4RtTo
PMdvSDLE1VOv4DnbcYIB42rw0zgAfxx3DSARPFcPpuE05Xxq0fhGmT3iOCVfmt5F/O8WK4VUkTcl
3HZCrueSGyWy6jtKRXLojMA0vFYRE4ruKaqNWmMawzaaOH50L1omfC3hYb1vTbTrmUTZvvzD4DtB
fZyEgZZYpohDmIhjxlIy5+u9JAjPj1mqWRaC7xbsRC5zI6Uu1HShT+/prqv0V6vZCVKobxpRcwPF
AXI1bCPkIWW5glAWv/0diW3VksCNw2Dogs16CqG6EM9cyfNSlG/XOwmGK9hu4cSiNfyu6Poa71R8
QCmNXBpHYRSBbVbLt7HAZ8N2O0DgoBbIlSwStWWcKcP2dA7TJAINhaQyPgFQSwMECgAAAAAAgpD8
RgAAAAAAAAAAAAAAABUAHABmYXN0L2Nzcy1ncmlkLWxheW91dC9VVAkAA4QmuFWMJrhVdXgLAAEE
9QEAAARQAAAAUEsDBBQAAgAIACyQ/EZkr4JTQwEAAFcDAABCABwAZmFzdC9jc3MtZ3JpZC1sYXlv
dXQvY29tcHV0ZS1pbnRyaW5zaWMtd2lkdGhzLXNjcm9sbGJhci1zdGRlcnIudHh0VVQJAAPkJbhV
5CW4VXV4CwABBPUBAAAEUAAAAJ2Ry27CMBBF9/kKryqCWORFHlbVBVAQFaqQQGU9xA5YGDtyDC1/
35AAMW0BqStrPPceX8+4CCHny3Wo64PnUvQ262M8GI4wfpeEto26d9C0X95NQRVUYcwlkOeqPaK6
dxiTD1AMhH5p7UTBVoISxITu/CR20B/tawJKpSj0k215l3De0smWd8KsQRBOT5hWBf53ipkGvSsu
IfwmRBb49E6I/Hj2uEw3VyOwraAZckQzeIQ4XtQY2+o21tgLk0fW0hEajoCYeWtFU48U5Ovyh9HZ
4XlJGkeGY8pBYJzKbc44HYv5WlEg423ODcpEitWE7Wk1N1riYgMXh9kj3G2UubVaOwANbdtKLi8s
kwh8Q7aQasNZoTFWu9/8K4jrnCBhFERdHy3mQ4x1pXgVWh2mstxday8ZOYrdRpw6WS3+1Nn8hv4b
UEsDBBQAAgAIAIWQ/EZXYibxnToAABLpAAA5ABwAZmFzdC9jc3MtZ3JpZC1sYXlvdXQvY29udGFp
bmluZy1ibG9jay1ncmlkcy1jcmFzaC1sb2cudHh0VVQJAAOJJrhVCya4VXV4CwABBPUBAAAEUAAA
AOxcbW/bOLb+vP4V+rRwpiOHbxJJY24BvXay03ayddoZYDAwZIlKtGNbHklOm/vr76FkO5KspHW3
2L2YxAViV6TOec7heSMl8rLIY1WWU2P/8berzTu1TlRxVShl/CZthtnvo8uournvBJ/zD/lyu1Ll
+YefX79/E5x/d969c3SRqHWVpZkqpkOURx9UUWb5+p4oGnl5ooyru43aX/xV2KbNjPHbqMpu1Rmg
KICocXkAfXlX3eTrBiX9ffROlZt8XWaL5Y5EeWP8hiXgf1+qwrjw77lZCI9GflSp86tsdWBIELZM
xE0iDCymCE8Jm1DGDbiG0OjnmdFF/SaKDbj4q4HRRE4sY4xpSNkZ4NjkRdXqjPHIWefru1W+LY33
72sgTDooDLBj+tLXHF3PxAR5po2JiwQLKQ3IaDTyiqi8UYlxdVOoKIH7KANdhq+MX/Lij2VWVvUP
kK7pMBoFn2K1qYDvXpXBr97cdfy543nBbGaMZxevZsGrD2etnlrzoM+fgndv5xdvPzivL6C777/T
/aPKQJ/Q7rNYRMlCqXQ0+vDGeKeu4ebSeKuiAvrs26Yj03xpjLSC5vOr4Ncro//ZEcMoUan+Yd5f
SKmAH8ZvMBZC/PS7UZifzouPn4zZm//xfv5lwO5GI2ezWWZxVAsy26gYjC42LtZpXqzqi9OR986Z
/Xjx9pVxFcyupkYaldV5XJbmdZEl5jK6y7fw/3y12VbKzNZVkYENxebHLKluSrOMi3y5XETF5KZa
LUejRs8Gmk4NPys3URXfGH9u1RZUDTQmEaBRk1WUrc2qGREEEi+zRXlXVmo1h6Faq+UkuYNLe338
rVEwT9NUMoGwUBGoTt88X+dxtI7V0ngBRjbCHVJxl8oRKVtGkYilMS9rxEDBHpFTKUiVLAAMkEiz
5RIDFcJG9FQqVGLbSK9VVQIBKUfsONT0Pn87GF1tJmmqkJF07hjDUH1vxDdgfDGYYfXdd2dAnGJC
jHGX9mS1mmJsi7ORdRrfFGGaqt4db2Bsh3ljStAgb0bQ2chulAa6SgYU1lOaUCJWVpoYZRVBKAHa
B8vD068wKWVrk/oIoeLPun+hqm2xHrKqTWO2HXJtajRdRCkSxr7j/OOfzQ+tfIp6FvYF1JJ0IRsx
26QwPQhMHnU1rdJdo7mK1tG1Kk7XD7FtYvyhbiG9QMJpa2VP+zM2ztNIMoKN+b7/fHVdzLP1bf6H
0j5D5V4xJxDE1O4RPKjHIgf10KdmD+ypCWw9NYHtadvD387ev3vt5eu1inU+f51Hyek+ztMkwpGx
irQnldfzqog2Q8r4AkJxgsWBENCwWa2Ce8BeXqgw366Tpig5ppEimWILhscL321BoHwzU8VtFkNu
iW8u8ybgC1zn2dPIWlS2ycKXJoVtXKfck2gJxS2jTelQXMGwI1nn0nuCfWJHwy6SRZpy48VvveEc
N+N5ZkDBU+bbIlb6gmY5/V1zYqLOnKdxAgsDNbydNfY0n+t6bD6vjQyLET/VYKWQ8t78F3lyV5MS
I3EyJU6ie0qH5E75SJ7uRVDbHRE6+BD/mqARUR00SrX6GGXVvMyu19FXlp6KJDEy1tE6L5dKaVcj
6BAq4hcvJni4COoIiRFeUAGhIplO53M8nVY3WblLgtNpTXgOdf74vkN8U+TrfDpNtkVtIj8s8/W1
of983yJTt/2Al9+DZPvP8qXxsinm/q5rOW71vO8f0W00i4tsU2nfOS4Wlc2VEomxWEXLZR5Pp1qF
72EOvAyjZalaGLfrDKqYOXT644dD71kFmOI3MAX59PLvbaxfI5GW5XtjkefLWhbMMEz77hlMbqa2
ddaLCF8iH+SBe/l+VNEGBiGOoGq6/s/LpwWDqfn4A4SRHCZnU4uc9WLSl4gkE9YXCYwg3hZ6qWG2
F04zs4UxhkiiJZgvolJNIQCc9WLT5zkKxEjLSJzybh1fRWVLUxrE98ZtniXGuIfsu7Px2cvpFJAV
d5c5zEFqYJIa4wMdUATEuLM6xp2Gi0I4+fdw7YJWcA9P966nRrIHkQBE8c3CsPx2YRijbxuGBZQy
Xe1Pp2+i4o9sff0V8ZnDNHo+32hN3szjWx1ivrKiW8R0ca8BMHko6xpqnPBT4zSKacJo26mBXqa9
eX4bFVmkF+TqePhAlLi/umoCROPcp0ZgyhhHC+MfM286feXtVsxqvmFevFWfqssb8NvaZ0CTPW+m
3D45JGqGkegzvI6bX/VCgWYmIHLsmyfxZjOV/CtCFeMWNX65CnUWfMjNMAdHS7frurKKljpEsdNj
FGcxShtWH6v06mFuljFuWsGaLxtUZS0g5ujsaZRZ8tm/n/372b//sv6N0bODPzv4s4P/dR0cPzv4
s4M/O/hf18HJs4M/O/izg/91HZw+O/izgz87+F/XwZ/cGx/4yb3yge0nJzF/chKLJyexfHIva6In
J/HTeyGXPDmJn9xLtuTJ1VzkydVc5MnVXOTJ1VzkydVc5MnVXPTJ1Vz0ydVc9MnVXJR2doHohTRn
nTV7OidFvcHOLFVx+/97L8g/tyDh/96vAh7RWKSEcm54znTa7BqcTme1VNNpI93ufffWkqDsv5v+
JUwIqHQ3dGm9K4RY9VLst1k9tL7d6qH9jVcPKTN2m6j1PsKHd06jE1dwGY9SpVdwa+p67Il+yRkG
TVtos0ZL9XvO+DTCmERqYTcL3gB3OnXvKqV3aF9GRanNYrOM6k1Q47rLz4t/qbi6LPINML7z9g8F
Zqpq7WYgzO7Z5edh0Ihg1YLxFiB89wisJUD6oVmmV5V7d5F80I8l1tXL8Xatd5KoxKh3zfYofm8M
NHcptASh4G5juLnLvNY1YXrJn56q7AVKF49IdROtk6Xa4Wm2/X61OHoPxLZsSWPpJyQPSGNJfPKz
EkxSRtVjpqO/Xf08qDModVRBHDzlATSU7ndPn2RBXKXR59DoCw2iGgXB6CEQjKHTH7RAcCK2/ByI
mjexrdZ2Ets6fReFfhSUtPXfEL///yvINDfNkzf8oLIxRc3miBM4EyJjwVucLyFI6GeEq022VBfr
JsZdrDbLFprX+fr6dXarasNUTaCgjUXq23deBWDkyWCEnX4OzMNA2k7V9PWjKqpzn2XJLj4s6Fm9
aeMUfJB9Itpiss8I02mxPUbXg8ARN8bvVHpZ1WYigT3+jz1mxOS/8pgR029VKIDZf7OtOtY3LxTi
3WkrH7PqRh8/s6sNjNoujbHNzEVWnU1HhlFEn6YDB6NAw6LT0HxsMNAiHmhAuiE5NGikPBYi4VCM
6pbsgVvKfQO1mmv1t+a+ad2BcYKZEDX38riBW5qJUYhjJkxXQ4U8usWqmWD0ACyMjxp06aFbyDEu
KXQD7TdILOoG1mmIbVAKqZlYA9yxZpJ1ZDzUaEaRLnu3YEQQZJK4IEOjCLRGr/PrLI6Whnf5vjnu
h46CosiL+rCc3QFAhzvt0ZWeQ7zdrhb7A48wG41GbraOijvjYhVdq3I62p9/8+lw9I1hGu2LKdUW
YLzonVEyRmfGDzYKSOBSbIYhxybFvjCF7QUmRhYSFiGhT5yXnz+YqcNuwQcwLAADM16AG/2iFjqw
XKmymt1kq51v1WioD+mYUmqGgWQm5aFjSuRYpoWkjyTGMnDDITQPUe3hSo9wKQTVTZoc4dpu9GFL
bWi+9ChzbNskru+YlLDAdFzGTVCgLQgnAbLJF0BrEx51gAhyjM5WRGvt4eA8thF5ATfB1wRP8AsA
yi3Pd1xLmI6HQYdUYlOSAHTIXCIC4gYEDeqwS3mSFtFK6Tn++e7EqfLc6fXp4I/4gHYTKdM0buMH
XfyUVUO4vdD1mO3Yposc36Tw2xSEeWboBtjxCRECySHcDcVhvE1bG2fK0riPU9s6hmDew/mQgkNH
Mg+CmelbHJk0lL4pXIpMyX3Pt21uY+shoA9rdtfYggrWHrEjqDhSsTbYI5W+VtdRfDdoEGGAHBcR
sFchTGrz0HRscPaABQENuATA4mHFNnQfU2/To41cpOjImOEiZvqshhbyj2oB05ZKras0W1ZQqB64
GGNrguF++KuDFHYECzEykUsoBKmAmyIA43ZsIQOf+YGoTXpW5+zz19migPh4fllkt5Bgwz3NslFy
zc+B4ueuzMqWXMeNLZGIBeVdXyRi0TjRkVUXDCsVRwtQOYJ/u7BhSTmRAN9FEoIGk6awIGrQwLXA
Ix1pujwAb5QedriOsduy0NHifIjYqGGp4ziMLF3cQzlctJXAoF19EpQxJlROmB57x2fUla5peQFE
LY8HphTUNh1kSyRD6TmW3WKtb26xEpEuGXqs4GKEa6nvB/Ii1msD9WEjJTC34AYCQ8cBAVSlGBPg
G7q+BcLDH2HpoRQ+Cxi27SAMvmTs2iyGrbHdoytERAaEiOPaGnWtB7PxRf7p8MLkmHAxwbg2PYYC
FDoEmYyGEE1dxkwRutwMEEdQxAbScWV37HrUukji5BhJCuUEaZDki3/FE+dgP1aDwfF56EvBTMIx
2A8CIA61sWm7BFHIiR6nbhdDm04HQCoGVKEPZuk65pvtssqqfBvf7BNWyzMJg6GltXvuf+rUDTNi
4kpiejYNTWo5EBAhIpoQuiFpk1BQKr5knB9h3R7so25dMaU1JObiMOK76n4ZVfpEv8O4s4lEjTQe
9anvQLgEmXS2p+A3gWf6QrrSwTZHLm2pvKF3/hDlLjZ1jG2BSLwPJCEEIX0IYgnzqT0wcCBtB5w7
iAlkOo6lM6QHtZprC9OWUkDSt5jte8cqbum2dajh467UvudqNtzn3e5gnfJ8EPSoK14yILMuSztm
tyiTyeHMIn3o2kqfzDkmE30r/AUdEJ9wl0lhuq70TOpDRnOR5Zgc4plwhEPskD6qgyP6w9IddevK
0xwo2ZPHYvsx1IcOLW8n8uDJOhZj7BEPvMQMsWebVMIflwUwfAHyGPYZ1BVW1427ZLoIrCErslVP
oz+pAuYOOQRlWitR2zYkUuGEgWtiKSAnuE5oupAHTOmHXmBZQRhK8qgK90SHNbdv7cK10wG4AvUc
MiqXB1/EHEKo1pttWaFLwQMt4kFkCQjgxcw3XYgrluMEoWT+Y754INpFJPAAIu2FHQXmG7WOl9oG
6cSStRnqHwBLhjolQB3lQbCAgEegDBRQCwYwmML3cGi5j6vxZyDtvR5WYtPWBZygAcAJ6aVisNjr
Ir+FyhUfRpyT0PJcj5ss4BDSONNVANQDHoWZGqbgOuyLcvCe9gMhedfaQ02HUCf7gY/LNFH7MQev
mnA0IToAO54ruM9NR2BPzwYs07WZ0OmEh9iVvmC46ywtSl0EamigFevp7UYtN1pndEKhL7N1vA24
TW2Yh/iIO7rQd2BO5TNTK9PnVJfP9qMj7EXFIl9/NsT+CKyHO+mWnjBDbq+SntXqQK9m7y51Gb03
AgcMIEQQL3GoCzEOicOVITUF4yEFt5dNSvusEexpDyPet3ZQL8TiGPVCHAowP4uu13mpj3JSZalX
NbxlpkPzPv0hHfqZ57so5K7pIQhZlBEGcYtKk0nLlnaIfBcHXZN4nG4P4kCGWiiRpouOYgOYYdnW
RFe49bcu712HQFEmTcyYNlXHNXWmNpENMQxLAlf9x80EJn5fno+DBxQfdOSJaXwsD1zsWX1joaBh
i2kzsXSZEYQwI8EeMj0XcchTkF1dSHimB3VwwLFPA1t+tdk3bT2oA6qPbdbLDWtVaWL3tRr4KqAV
MOo4xFBoWp6ns1lg6ksw2fUEo5RDpcweyw4dsl1c9oCvxdLuB1yVZFG9poG1VXCkkwOhAaUMSZh3
gYVC6ID6MeDUJC5MGYJACEG/LOLuiD8QcXetXdiSH8NOdxPVHuyrPF/CXOWQKwiH5KZzrufaoQ15
wfRrm0Z6ykrBsMG4oWrwLSwEe9QG2uQfAb/rMepiVQMCJLIX496qytlWN/sQZ9XloScwDmybgLZ1
UnY5TNeg2gGHtHybsJAS2/0Sve+IDyPfNXZBJ9ER6BjK3p7WZ3G01Jvq9NHxF+tKFWkUd1K1F3Jm
EahvOQVzocInpktdbHLCfQsm6zJg4lHF37+18dlQMgjmgXJ4qGtbATFT9rECmA6gjRf/CbiidZWt
D9me16WJgx3iejqoU5jTOATyfOjATDsAWV2o9r162njsvn16PTDyGIyFFr3RKDdKxTeT15Fe9Zmp
laYXv4G2bH0dtia8ejHArms//UOPErEFh2reJBSKAhq4YGYW90zXwQiyKXOs4PFRGmQ5rPrBrqOu
YPGAtEztVR9tq/yQSkWTtEIGkcmG2YdrI5iMCAGTEQvszLXB/gIOwjiim0zvqXSZs3SAuXWI3tv1
x2ydHCo8qw7aHApkj1rCJJBrILyQAKxcWibCluUy7rkW44Oj3qbWhREfV8exjaw0tdsj/uPF/TIV
npCm1BO6OmIQl4lwTWnpwGFbekRhhhbYkAotSOre0DLVvzm3vkfzQPl38X+8XVlzHDeSfuev2MeJ
cKAH9/GIU6MNe3zQ0u7bRh/Vdocp0sPDI+2v30z0VahCkx1rhV/UVBcIZKKAzO/LTIC9eBao1dlq
esOO7POPdPvDccIlB0BbAXUoRvCQSUqZwgsH/mcjaJllFlHLAojFvK7gej3cDY+wGt/U649hDR30
mzXyNWoZ1lnGhgv4qGrdLV/uTzec/81KvnB8Hx+T1NMIwFBwhsQad6MHJYNKyG5Z8tZ3V9O4x1YU
LjuiLKfWPD7cPTzefrlfwzwDS8dfqJ8ICo3SwVFLnE+wwosCdggwgBhPA9VWALfhX309neS5gL2O
jxtdrZzDnLUbaJ32ka7ln3ukBAAYUQICYPysgFEmr5lBsMDhJQD2dcoodLqMMU+9ka/reur7gtzH
xzetiHNet17qE6moqPr54RFgf4dfhuScAIhIcoJNIICvk4DbXwTtozHZZhVb+zfrr5FmReeB1fVa
8Alo2QxPvz0//P40MkK2Es76icCRq5Ajp6RY3KaFA5RRmhLrKHhKBUtK0WsATNoPdFw62KA/uZ2G
jWJDB42th42ZJKHiw6dPD/d7QCZH8TowOV4KXYgWDIAwrH7clpzwDDukFKHB61yjz7n/S2v7+Hws
/Yau5t5pU3HAdnpx+dkx1DhPjfEYr50JKpPCDEhPUwEYXDgwDEVFzDkDlf6T1G7cohV9M48xbpgY
JqKfOq1K/Neu7E4BUwpLfZ9BUFj+4HQiBmw+wnlNnM6OJAveIBYRgJu8qQf2fVkHfHrTitqZeiZP
XuqnJeD/+/VwJvkSmYfUTFoeHVCNhNtRYEKYC6KcATflkwyUvipqLYt4//0VQetWglZ4KzvC21OQ
/rv6xzZOCSOGi4VyxitJktQAlKWADK0pithsLC9SGyUm8Ymml8n4c068ERs1MSc48VhChrNn0PvY
PSmGEQ2gUE+ySGBFBOBrT5kkmtMQgMPx7PSb7xs7vvy+8elNK53uiayP9vi34cunXx5P9N3WIJ+3
yYJrjIWCmCEJYPGeEgBimXnBvU598D/uayKE6QgxsOm8YUXW/g9qDY+HBBLO4aLufFGTthwkARYJ
E8fBgXP4yepiCQWAaoXJNKerGHxvqAuz2mnZKCfpnNXAl8vjojxENI4JyHkykyYamMie6IABTQ/u
L2SNQElaJcEKBGNei5U0PTeiuU1nvyz5ejLvt18+rR5Of1cLnF+NOnGATNUpG4BtNsB0h8IwRCkK
sRZAuEHwKmkopVzlLJphLhDacZNGldVqDkM3a2QSM5dRQxid4IkPRlABKAh2GhEM8ZADVhEyrHfQ
0GgZ3tx9te/L268+vmlF7Oy/NZsu/bR7rMXIXw5OZzEiuocNwECRQx6Uc0DWXFDYoZh6tmDOvJOG
KB+TB/9HU3jdkMyG64OQSatGse1qvrYGaqaprm8rmB95ccMX3OJ+rj8g542GR2pdrX4Aq2gkCZaC
kaSSAU2QrnD59QK1rTyXuP24zU2r4Laj9XLoeAD/Mf4jYRzM7CNhYAIXsvoBSQF7uQgWNbkCLokB
kEyYP4tKcauKsdReh74Oo1xekPVxowEb5pR84LOQWM0YfPRlXPoD5sDsY3qLmvkGaJ5oUZHknMC1
KqsBEMM/AiC8cdmmrPTVuYuP/pXUxUff6MA7MeBBsk1NC4AR3K1f1hhqO9dsgKkVSIp0oc4kbwiT
JoL/8AygIwBfw63XEhxeirxFA5O+btohh54cUzA44uh7Do55X9zSh/+JWo9UYDIjkBzirMeQuQKW
WrImsNOV5Mxy88am/kqhgP2ziZ6dVS8xBnBIFy7Xv54Qo94TuciyVgEmFqZYJI8YAkNxXDDlovfg
87o+bdRVK0KH+8OXq6OXPRw4ePyfc31ofeEyJsc0GHwWgAoLzT0JkgqSwap4lrAak/UFmXbYiGPY
nAYM4F4mduDdcD/s/9TJ8u7AUo88gGlajYGWRrpAAcIAUN17fxekA++atOaBOkHlNZuoM1T//XYa
tqoJ1lFtxXvkrAUOAgwD1h/BlMJPOPuWM0Oji6AN8maGkZcEXCdyJqMLhvNeUUPf0l0BH2bNWsVW
oqPYelo1h7UFv9z9x9/cQldt6ifCYuUSzYDZE0NYLBlwZikMCWjmMuxO8wZ+wOqBd69UFrxrKgsG
26klGexqOcl9/mPYfdos71p+X4TE1QO2pFgMKwJTA3JsCOACIENAhIo118z7ofNLafD6sBV6teoI
vTbThC3+W24j7LHH4emprh6la+SwRl1QBwoKKFUSCI2xOkAD4CWTJ8aXKFl0FJjz1d6lGesVR9O0
azVb255my8nqyeU9nia4P9F93AVJKyD6gGsM1lAXeBsuOEGk4Tl7cD+OX1Uoe+y7L//x6UTq7vs4
JSFGf6H0VJ0qgbWalAwpMMfgiCwwZi0ymvIMrwEYFutX2Z07a2RwrIM43PpUZfTHd7un9SwyTiUg
JCMUAUtrMXzsiJNAPYyOAA/BrkhZ/qrI+FnAVrF1x1IuZ1DqHAt6/33NSPODnXTULKCHBUM/QJUp
KYCfVDphuBx8lI00ECsdGEugXs6+HtSqnV+owf1+ko4etp3EDHzpjgjqmIZ/eN5tR/WObMH3DMQF
IYMsmRRVlzQsFK8KJVL7UoQyTPBXKzHHHY8F28Kunwm2petNB2B/eN7dPY3DakLW9ZuVCM6AbJlq
cPmiaGBHkZEkc+Se0xJcudbp1DEuO5v6uJGfqY78TK2mpbxIFHGFgqFZ7e52z1+OhFXiYkiCumRF
Iqp4IHjGY94rJwJMO3kbtA6Wv53ob/p/Jd3ftJtos+5pMz3rsHzZ7B4WL/e756eFx58/3NfKC1jd
1ZyzeqYJYwgMNrRSHha40gAJBS71rB33JuVg3tjQx54v2O/j44kGm44G55rjd9/WyORxiR+dvcqU
B2EjOFBRk1eZWCM12EAJHMGGUCL9fzv7ffPdPtzZCNCKvpUd0bfrenYHf7P89+2vy8dhMxUecHcE
ZGJJxBCtoBgkA5tJNCx9mTHV9UaF3PXCtyI04nM6D/rBl9Nq76fnJayaowY1xIE7ICprM7WcJCcD
rBbgyA5L/cCDWgHGh/KUXw2KnbudSNVZ0dzZyf7c3f82Lq4/hGBAJXTnXtFgwX8DicFiEA60VykF
BhAMoi/UFmm+RgHi+/sLmTd40OgkOmRkK5Ce7bnRb59HTl5yrJdQ1VKKqI0NRpFiMAGRArgbQFtE
WmmFT0qmJt02ivR+7nl6GLOzYsF/HV95+NbfnhMLTlaOkLITXjmKtk4hJefEMx2JSiYZoZnR7q9y
9Gf5bloNRE8tcZHmo+nD9TL6hlWOr6gLATOxPmsge1ongFYJuF+gOgGmiUX9OY5/ft5ooFVHA62m
xXwrvJvhtBk17sMSrNIRADiAP4+wBA95uUBYVjLgEcti+Wv7cNzlRCTVEUlvOpXeT/Vs4+7+l1Ns
ulZEBgGGDIuRGcUkJssayCWQfGrBozhfhKHsa+xDtIa3RxEu07dTk1ZNPXTUNGAF9398cvW/vJ4o
O27PmrIKGAICTxmYAOgLQJhYqrFM0VmDNXNcTrLgTS/t+KZj77Sbpqw+rHb/ejmgEEx8c4uCRCzq
NkKSmC1QMFHL+5GHBU6TU54Vd1Xk/9h7f/KOTxu58TKDmdxGng723S3vf9mdrBqrh9qckjprkK8Y
AazXB0qCiAlwYOYlwdIQaXIqbNzLZPjOazNKb7f72xHiu/jd7Si+6NxC7G2qBg/FOIaZLJ5IjlSh
842EOeGKoloConsznF3vDtmtn65IlzaSNDpYPi9+2FrBJiUk38IcHM9W4uvfh6vrJzq7AmyPBU0Y
q5EEx4nDfEN0GL8Bc8CT/OoVM2ORLoXozy0apV1v3TilR3HCTw/38fHL7+fqO0DsEpe7jQDuoq9q
RjwUGWEHgmMHW53AOluTWboUK5x02si0NB1TN8j1dphF1PyHCPIsuFrUXzj8VE9YmRSdxmJGC6AD
Xi3xFOhwhHeQFPVcpOtzBh/iKxmDD/GmlbMDoAejjkzxp/c/dPdBAXBBFQA4VjiyMJUILBnwHrEI
arTBMwNfcx+M5Gjlt53J35oTOPrPH/ik1iFkVYrRQFRyxOxawOJXhaYPrHBREfa3/Uq1DqfBRyI7
auUMOcOXdhpc/jFhyFVV9uswkxZhqmFqJUm5YIQyFrB/eO4BM8k0aZm1/up79ccL2acfU6vT/GAX
fsmPy+hx+PTwx7Dd3Z3LwkQNukpRHDh1x21GhArgkBcJNAD8UpDO0Fy6W3La30QY0RFmeSpSW3/z
zXK1O4Wk3D7pyrylJgmijQDsJsEwBGMKMVJkoCZMp0InZ59G3bTjLzed8TfTMwxpt78Q6JSA3ZfH
ViJSq2OVcB72GNgEBVtM5Uy8p5YkgJPZAmfi5isecZlLcylrPG3X6r7pLe7NNI76c4zjAnygBRSA
jyPSlASm2TDigOXCxgxg/qwoksVrzB9025caHkzEXHXExPrLySt6+s0/rnbPj4ccCD+UpNeTapIB
ylWCGFimsHjBDgaOAJUV2KpW8WDNG2n6pvdL8900arUYOrvOrafoDxOcL7VCrS4usa9LAYeXCnpC
TI0eyIoBg14cFQzIGkArc3Uc7f0rQbT3N614uiPzRkyuXDnEIZb3xz2xP0TruZEAU63CsA2P4G/A
ceOZdx41bPrkryoPOnX+agxk2U52p9oGvtxOSz3O4eCaccBYNsPYDRIbJ+lC1+SHFBHYIDgdhRXU
eJtJoCWT6GVwJkrhtL06+VGHeCXpUZ+3qmxn0NExpe38QOP+2ph9gQrXasFrdDhFJoDnEisZ7FYr
HHECi25yAhcE7C2kN8v2LwSz4+HZTSPZVnXE3U4Plvjvb/+JcedRpdMe7JpDLhawFAtW4/VBBZPF
eLw1iEyYjYp5XUKM1xU0tANdmPq2UaOQm1eZwpcH63Mm15v7p6cTB1L8VHovio3a4zFBKjHAai1s
CFtIcjEXWDxeUvUaaR/124i10eu5WBszXRbIhk+1Q736pUKtpixbIGoZL3PgHGNpimjPYe8LY1ws
bwYoTyNcpuSnJq0WZlaw5zhbmwkc/7jbDA8Xj+JJ7VwIgAGMsHgc0+J9TmDbrYYPVSjwiNePY467
72swbjFWgCszNzRc2WmOIZY3X4QJkTInYYUHiXXtsZ6l5oQLFbNKWqXi/+yLaE4UXNF+0qjV3K47
mjvVP0H29OX++deh4ZCYJjc1+VY/6w0posB7NAR2CThpDrbKgmMm8BJdsVYFQ7/+kZDbKuDtXL6m
GLJt1E6E052JWE/r0H4CFPw8fNwN/x7dA1RXsqvx31ongLGShFXdkjESIrfEK+0dTEoOyV9j7+bD
XOI+03atUuvtXCntwIGqKU/+efgMfkdos+D4C/sfkLsBzwHjkvBcrCMCg2hgajJQT1FSotwU8Tbr
xM4vwxV8etNKKHpiL4/UZv3w+5cxsWFUHA11LNylUjQBFA/iYhTcAm+DFZgBhYGr5NleiDiM+5yI
s+qIg4UKzVVq725v25oRKbNjMmQAGlidnsEeO6kYQA6XkWgUr17fCNDjhYqj29tWwo5344adYnvr
l8e7hTwdSLULJ+tsWVvgBboAs8UzVori8WebCDgNoGA0WZ8mV7WMe7ppRxs6Ishp6j4Nq5df9hVF
yL0oYnv4F5PMDDAMLDWiuPAAFYCTBp48cUlFw3ihPprrTgSdR7h0FOjcotVB9nRQbHK33/vvb18O
B5od29cd7PF9ojTnQBHf45VKWLnpaIQX7kzg0ups3zD+p54vVR0cHrdSqzm05Ha5j6xOU8rPB/9Y
c7sjX9zklR0gTcA4RHk04AUwP1gBQyLTQSujNX/rjOio81dSyz1PbNedrW/Xp+DYy/PudHWOQIub
fJRex0I8C2BxrZF4kMwRD/AONnwSNE8O+J67mIzccQB2GI4jf366ex6dhKkpVWecdMCLtBARazYi
3n6ApVXM0eACUOjJ5S3jTtrRh46ldgpGZ9Myr6lr9D/fouHeW21RYTeG7a0Dcs99BizF0A2hC+bA
ObWiifNC/7obtODBTatWT1czu2wPg35x+fvzC95PuT92ejh0miksREwGAG9GIx+IDcGT4CwVSfoU
ivwq+eKRBBd25KhFq6PpbMqlFJP3iaGG/f228+MJwhysSsTq3gwLTOGFNsBT8R5OdG7WxwjAIsWr
6lnPY10Oe+yfN5osTccorpC5HpjTv+52z4M4bQyFgTRKwWuG4gietgGZMwXAYBXhUgEAdI6LONmV
TTc37VgddrFyJ+f29HS3gBlb2DNvwy3AopWyAEUzEUvpucJjKlj9FWxKjCWV5USCtp9WhuU87MPn
h2U2y+flZniuOPtpXe9V3d/aIdQ+NR9d8UAM8KR0xiPEeAZIg9nIsjCg9tGrwq56lzBQOg50+RKM
WbObVv6OxVvz0zmrz7+figjBKCPD4fV+JUljAnhfJJ4oLgn8tGRANUUQkYKz1rx/Ec2pu1aI3vLa
CD07zvO0/mmAKd3UrLWts4qgB8BIvakieSyBl+AGEGtFbfBmHJjYEvHcBEAxk9+KDJ4HuLhBzk1u
WnlNRwk1PRYWf325x7+rfhj+VLiu9te/BitVisaTxLAygMEKcdpE+G/JFKbVdquMOuHBdpgLwLtt
1KozL/FyfLsCOtxcoP/T8t8Ren5cLlYv+Hc+6mJHQGdUjf0IpnLijhiDJxYcQHFHYckAlQ9OK24i
7agzjqD/fTrC3w831+IVbevvb8/Pb1pJ1z3xZ3dCPawflhhqszX+jxDU0ewcXsYmwVwIcON4KlKR
BPYrgs1wzL6VaYYuLxEdeDQRcz7Lop58coczNw/3fyxOuTRZl0iQMjDYbT5iysQakJXmRHyG9SG4
l0qL6WmbUS837VDbzvirU87m8/JxdFUsrUZVGe493qnsLBapZgaMhnICYnkrMwXwMzn6O+qkHbyn
PKPbE2P55psR2KpvRxZtU4ngRKjBABFAbC8lHqCOqqScDzHQNl3UHZxpOh+ci9Op5/U+7zx3KjkB
3bVaEUbB7Amp8XIRBzsUnHL+v+Ku7LeNHOm/66/QywIeYNvgfQTIA7tJZjyxE3+xk5nvyWjrSIz1
BR+zO/vXbxVbaondlOzdMXaFIE7UNFlkk3Wx6lc1RyCOob006mqSDzovUTJP4aDQOAuD+bql+3YB
O9RGWHPQdolFa5cgIJSLQJTVKm1mLQfxGTs6HBC1KBCl2j1gAgkr6RaTJkCMdT4x/IlvzQcM47OV
oSk01deVc6At02gbAXYRGJ321Qkrg9FeRhpYt8zmJ5djuccV5oHkKK3t7G/P91nQ4qHsoqUOuxt5
akEJNaCPCY2BdjoovIwHNlc3kcICKGNfNbd6MNL2bLpnk5zUsT+C67bdRtZdVcTpo3k6VdJwMOmY
5JVyCPfrXA1qWR0rqqkQBHRMMFL/h8i620RnMzbjeA/LL/Xw1i3egZRY3USsblCIVIcUFQQmuLAM
Ex8Uxphi+IFFJL0a9p+iKtYh7o9B2HRevkXZPJ/kVBY220K0y1lG+u9J854erK5PkpnjmaBgyqAH
WdhOHzCW+yo44P7UWNJY8mZxnF3MdDl/MT2b5BMobMFF2+4H7Th2n9BDtoIe5fxQoK1AI9XRUVaB
zSoQTwLeDGaoNJIrUNxkdOrl+C7sew9oBzzN6W+L9C/7IPajOIhh0UFSkD680oJgFJpHpGzQa2ho
JCVOOCLlG8Ww9IPnJBduEPlSjTz1i9nzw9XTH8vsLKR8aUkZS+4BEn1jIrABmBuYlXC+KmckqyRw
44aT2rkX4F7OVoPsPxOu0C6b0vLSFKZ0uRzCl2fFiQ4kXwEmOwTIlhIR3aTEXMgACiYGKyodQOsn
JLBmL3j5dr/bhAnWjlAO8cvhfdD9w9U2rvbhKf5/7apg6do5ABnRgZ7kHbKd0DBE0KOVVExS0+Cl
15u4Kk5zUrZbpUeD6c0K00PNb5Wr1D5es43miUWsEHIyMKCcVMrUIMiVcVUdeaiECY1moOxrXQ8r
BGx1kxNQ0P4Eb/vo6X/cbI/PUugH9Q7tdmCBASPrg6iMAdWTaGoUw+sbHQeq582O0XkrC6PPd4cV
dG/HzW+ubhH5vb/rJn1qpYqe8BAxQgIXBwsC1GhIeNALjXVCsShfh+gxHmkXsMe4ZTZLqQprLE0P
VHkKZm7O4qiktbOsAUaMqfw16JWwwmCwwbrDUTLWe/5GLK4fPCfZ2BLJfUp68+3k7PT6+fvV7aBw
0TpPp9ZMBCFEpVKWF0U4V0NFBdoyHDdMjm7eKE9nByn5dOyYYwt1OUTkbn/f5tWdS0BhSYzuRisa
xjTWq9JGYokGhrlHHlNKqAFdTjL5Qviz+/YSm95uMcmJLZwUvRCDi/2U84am+cPd9VkqllVIIowN
vJsGL5cChlBErSoXFcpTGzkBplhb9Wqo4GywPYl4WbtJPosCDwS1YyB7sirGea6PDT4YzULFnIXN
5rTBaj1gi6cobgsagTX7xM9215OcClsibRh8A8IVq6n9+gD/xRXfVD7wcH4dBlCwGqH+hIMtI0Dh
JcpLEPx43F/lZcxH2Cnit9rk8xgnL1lQfOUg7gwVtJX2aw9FV/2iUVyFBiiOFJQtxLmwIcaKCMmE
Bmbro3wrdOB++N3q40j/hVmo0tT0MOby4fnxKfzeXj+ns+W+b9f5QH8wh5eDoGmVcAELwVHM+kUh
pzDkVDMe2KvyQUoD7QjLLLQcTK0tTa3PMuxoOaw3tqXFChYp+AXrVskIRlUTPFbgqqvaKZAnumHW
1i7oYbpI3tmAjsIBvUR19zKH2sIe4Jwvr74/b0TzqnAP7cv2cOvgnBLQw5JrzyHkFigSLNbcOC1N
DPu5aGGcfYI5a5jN67LgfIIvxci7ghkQpy2wiC5IOYXBWlSFVA22rIu+kiRimYtGV9aBGkwVa6gO
XMuav4VOuU3CPjTKrsVgkgXBcakvd4GLIaDl3UNy7Xchs8CgU/SpMQosq4rCBgKZgWF3piFwWiih
XHLiPH2t8ygf5wXEsb5dPitd2pKzdpMK87CYZYkwVHUnI4JKyDEQiArUDwkBo6VmdUWI9zoSi0Ur
doSl5F3m9IyxKKyYKz24+d8qcI84rHgdxTtDsAb9FIQwqzxHpDABHNcGx6paOMFZKjfh/hSf3TzP
CJ+bgmY0N2KdDLaSkLPstPUZMaDrJSAia01TqxQhIjCREv4Vpa6kpw6hrGGD7DX/Cr3nRLYF8TUf
IZO5+/uzDi9wWwTbyLRvgNU0UsELdyFWlnle+SYGbWC16auxVla97ww3Xj0f0L4s0D5fLOdse4Fv
Nvd7Qnd+shq2YwAVrWJaJ6yHpgLNBi0ZgXiqnMBi71vVm8JKLuxYoZEJ2W7EDcYuPCNXFfY0s7Bf
vasoqo08aExrFqZiKjKKNZJY/XIk2kuqcN5mkhO8LMzCsN46gV/9dpJXdJEmHf9QN1w1cMTAiFIY
RIfx9OixD5aAjNdBqvhGdsmIiHwOhTwdSeZkcLNXdGx0DGQF/52ABo1HZ3JARAQWu1wi28imAmur
qa0WwbwgiP4Td3JPyx5vx5DhgEo1FroS63Su3t2H469DW9IFAiwQHUuhm1ysHFPofRVSK6KoIvKt
ACu+Fl6VaAuHRks+iN38+aiP4kqVUNF4TLlrcCzwJDcgO32KAQL68XLCiMi9ZJo7/zZVnY72Rnr1
jyf5PERpcravMtrOftxtIPCR3VPPLEVk6oZgJgqozZXjoARhkIfmtYxd6vSYMW31NaChLdCgeySn
X07Dh1EiIwleBMyHjlguhmMVaeDqYJeolA4dm/rNEhnXo2dEmzFCEn4522zk4T4GhUPW0cYK63Wg
4xrvbIOp4LQCM3XESevfah8XCZ4XCJ4P1d1Pi6d4tvZUd0agCUw1xALTDBZzXsA2shSUEyWCs+jJ
oXx/slfqc2dpm3iW0zmXJTrNctmu8tN/O//jflHMzHWsFhb3Igs+VLxuMKcSzW8gOhAqlaD0bTPU
M1ryeSwKbMMqsufy9vDz2SaYXWFITSqsTNLcpIMDhnWRhGMCIw5k5dD5ivVLvGp0YJK+XUrkhpId
OShnpTh3aQtZDPhlAYJ1IG6mB8IkQHG0EQOPhGLkLpZd5NqAjcglhro3AkwPUFk5fRtxVmi4PR+l
F2P9WBk6DKa+vLsB1tSFnFPbGboJhlOCSg98CViUtlgnzNZVBHkWhCMh6lflddYwSvlC+u4mo9Uw
WqCV9RA1d/OtyocpkKMhxIlQO2DdNRaSk7yqowfJRG1NeIxeqAFk7FYfg7F5aWy9HvtHB6hYtY+3
fTAJZ5tkARcYjTGCwoIapbVNVSNuTwBtMgZYSSYGhIw7zOmx8wI9M1bAWku5SGt7jFKdYuuE0oJz
eGXAmknFZUREbWkqwZjhrOa2puzFw5Z63q3dpsc51YWYa0zBGPkb24fZj64C3OFq0638dbDBsFga
AbangQGqmlQWdNsUV6C8BS1XyLdjEj0huzySq8fZJO0YHQe+VD1s/z834UYpek2wQBoEZW8cQsY0
CBinQAR5JoKX3gvLBtFG/yzFGsEQujDuclgRto+0tFavEbtU9JhYSCpRY6pnbWVVW9Iglj1IROJ1
l06w28AtkbOkJXL61JrmQ1/27HGDrJ8w0EzAIIlQaYmVtBiXsDcdXhorG0A79ro2/41ohIEkHJI7
mO3YQaJa0l8oXT7ebJCCEjwCaxyyJ1ZRLhnaNa4ysMxoxmsvPNjteuDC3Opjkg8zK4wtNxDPz/eP
mztOrlkHIKbAvuAS67DXIG4dWFNgPIuKEmVAjfNOezHMyNn0kxNwWdh57SjMKUGcfj3qrLvOgcHT
oaahqX1ymSr05sIHxGHAiCFgu8xH518nSVYD7Dyv46a7rbutBtlcU/Xd4VznYgiNd9NeX9/NNvCs
h7TL2nTAHmqBHngTEDGfBSxtyipmPaegFVBu9qb3bveb02WWBbrs8Kp5HbTx42ptYCO3QqsHS56D
HeoqEsDs4FolZHtEyvPcKlDOXoJOeaUVt47U+PlofyTHz0f5/AoXhJrYfXWHVrVYV+5IovUh1SlS
K/0rVUthwTKEKQ4YI+8FMBrkvJTCWAYUNEWbtxMmG2r2FXIdbjhNCtlCmuAtSZYqduzdaVZhUXS1
GugKqk/AeyQSGDuTGJCHqK/GogiNeInoPGvkfgcsDrDjqMCTnOTChYqmxA7F/I+2c8RT3rni00/0
YVsDugnYkAzdIJwJUdV4VxWdpNHXCqbyqtzW1QA79ln3MCOcmsJaUzOMrv/ttFm99T6wPjH0oIBb
6SoGhHTBTDFLvQCGrj2JIOTr+CoAi03vZcI3zwe0zwu0Y5HXRfEi5OgzWCSkS28QMgXeaMY1+h9g
U0Q4DxKdDsgMGt0wAtq8Io68rszKLsfDVoOMeEYLpxtU0bEHHO/Z26vb/Bq69lwwgpWrOaK1WNAd
wDT2lYlYbAx9QCa80gfe97/Tnupb5DNgtjSD/sbm+XaWVWpSDMwHBCLCoCJMQgXryRFER1K1pQws
+R1lWvuO8uELYkkrrFWzSMMfu1PXfBwBeOqgHWrUFVWoe1oKJw0LPSqFQTlGgWmr/ksAntsUTvJZ
XBamtqpgMQIOeFjM7r7fXuV+d4wFZcnZkH6itDM1woNgAS9McAuRVpaA7msQZNdzWBL1JgCUHRDA
lxJRY7yArWb5CrCx/1AvhdV2ZOytfTtoOaFjJUn4jf8I7Iy6UUpUBKEieKN95TD5xNa8dprDviPN
n/QfbbfIZrEseGL1sh2GVnfZwwnODv/VvTq6enXpsAfKgxGkijUI7OQDq5soK8KpYhbO+mtKCKa+
9yDp4eOc+rYgGpazHtZlfvV4n4rP9Tq+7Y1/0PccxTSWhtfwF8IyaURdF0wTD3qXD+Ur2bzPnJyC
s9MQOR9hlT+181U5uxVgjsEihilzUqAhHRyoO3glC4pQBaKbVSHoUBMEeAvq7bSfNSW7Qqi6p5N8
OuPsEENXZewH2bvbAgclw0o2dM502CNNZC5gza2ISreAXa9p5SOBd9AYQR37z53pq4eTnMqxPDMS
oaqzkJLfr1JNiwhGZW8Vre2irhiIYHXEDUNqLMQr8XIXwYEsrTWYaPBX86poz/UIO17T6mk2BVnQ
O0E9GgYenYJNfPdwg1Uft5FIRSqeiEq2rxvNBToHRcKpSWWEgfGCGgd2PjAfHV6VulIYaMe93Ljh
JJ+DKUxM9WU0z4/iMCQ/1o2EX6orLEUOthEihgsRKl1z+AOaHWfhjW5jNqPnRKuxn9aYmRqg+a/N
u3V6h5QCc7tFh+1V8wYsGotJdZghhclR1oKaqpREwHAK/Em8Khp/v+WWEW7HZQgsVhpb28v3s/Z+
c9UhUP0HrRkUUAnnE7WiBMNrTYNmGbAkEhru5SCle7uTfHSjS6P3bpn79mYr+rtzMPImIEquT8ga
xNGqplFV0WChYCthkQbB51t9DMYuzbzl63se9y12Uqh3Fyfjx7ughZIBjFLExACtEpUSsCokiAnQ
CzEN709G4WYbLicjn0EhLsXYTdZE8yWePV89LTKYjBhhAjI5sgTSbzANz2rQc4F1N95qY/2gDnTW
TU7BrETB4nJQ6+Tqdtkvo0DMzw4SzgNjp1JVnhlQFIwAkcsaXjUEjOEAypPfHza76XUyCf9YpR2e
3M03KHRnzzc3sPrvgOamvb5+nN6088X08o/p3dMPsFDuH+6wOsficfrUPnxfJBj0px/AIFcP3qW5
PrWPf7sAjnVxfzV/N+3A/Lp8kYsZ/P20eDcl218+Lp5SiYTV9/nAL3VP/lz38J+tWcEKpPHw3hsM
otJ4TGki/70xJ99Opl8W37P1/QKtPt9e/zHFAHh8crec9jfC76bnd0/t9XvGzSE9mT4sHq/mi9un
96DXHOqTA2H/8tP08e8YNTy/uHt+ugDanm+THw1GnL/H0jji5EDSv/w0+RX4V3t5vYBOkIC+a2jx
Yfp3ePi0uH2v7KGC9tBrP5QRh+bkQOUDvScfDwh8lQ12yD8cWAFDTSdfwoejz5+m5/9/GqY7Pt+O
vpx/dceT95vPrqarx5PmwxTzSXGvPT6BUH8sNaZGq4/Y9CqFQ+/7UGNEavqYqoV0v/G4o61m0BT1
51toll7Ujg+YvtDUrxRckGC3cDq6QOFh38IckpPJVrjW3g/Q2oV4H33e245ZQT5Ofjmb/nJ0Pv3e
1dWD2c3u5sPlAJ6LBJSbHsACgwq8mP+ETbVCWte/uH40hQ3dzudYmWwK80Wv0daW+GnyMYXnTx1+
M/0MassOks3HyYk7Pv7c7F8BBoJEnqybHrSYuPPTztYcXsPJ4gZBBs/b7zBZurtnIODs/46BU0/v
cYVTvccyCRJ219k52PPTD1/dF7+7S0yaPZmcPcGOnb7wYXjGgDlcpIm587Bnzyo40ZNfF5d4h3iS
lnpXUwV20cnk4sK7c/cSARwJuLg4OnEfwgttJYPFurg4Pvr0MXjYNrs/FpkWND0Pv53v75MKghvx
4uLrp6Pms99PghRwEm4SL5oi2tzuDYDXgCeT1em+6bbC3vP1bzCj88/n7nj64ps9pB+6pn+dwmZ9
fsyOTndk1msA/BNY5+RfUEsDBBQAAgAIAEKQ/EbNMgwtRwAAAGkAAAA2ABwAZmFzdC9jc3MtZ3Jp
ZC1sYXlvdXQvY29udGFpbmluZy1ibG9jay1ncmlkcy1zdGRlcnIudHh0VVQJAAMLJrhVCya4VXV4
CwABBPUBAAAEUAAAADM0UlAwqDBPS0uzNE5LsrSwtFSILyjJKEpNTIlPyk+p5DI0RlFgbpSIUFBc
UlSaXBKfmZdZwmVogqwuJS3ZUgGuKrGohAsAUEsDBBQAAgAIAIKQ/EbXP/7IkQAAAPoAAAA+ABwA
ZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1lbGVtZW50LXBhZGRpbmctbWFyZ2luLWNyYXNoLWxv
Zy50eHRVVAkAA4QmuFWEJrhVdXgLAAEE9QEAAARQAAAAtc6xDoIwEIDh3ae4jam2hYAJszgRTRqd
jCGlPaEJcuRaYnh7eQnXf/n+xpibqeFiw4QeEgGj9ZDJR0SOsl/D5HtKsg09W95kS0OU52CHmWIK
zuBCnPayfhaDs0e+M2KXK10KdRK5FkoXVVl1+I1aFUfHNo5ZDc+GeSbIX3AliKsb4b37QAw+MLpE
vNV/njj8AFBLAwQUAAIACACCkPxGCN0WsXABAADAAwAAOwAcAGZhc3QvY3NzLWdyaWQtbGF5b3V0
L2dyaWQtZWxlbWVudC1wYWRkaW5nLW1hcmdpbi1zdGRlcnIudHh0VVQJAAOEJrhVhCa4VXV4CwAB
BPUBAAAEUAAAAJ2RQW+CMBiG7/yKnhYxHoCiQLPsoE7jYhYTzTyaSlttxJaU4ua/H4hK2aYmO5G2
z/v05asLAHC+XAd6DvVcCt7mA4SGozFC75LQtrHuHzUdFHszrDKqEEokJs+n4zHV/eOEfGDFsdAv
rVxkfCMoAVzozk9jB/xx3DSAWIpMP9mWdynnMuaw9Z0yWyxIQs+a1kn87xZzjXWeXUvAekLQh/RO
ibT89hMZ7xojsC2/Vqwpw48U5Ualsa1uHY29XvQoWiR6RsInZt+KqNdjhdNt8YfBNcFIHAZGYpZg
gVAs9ylP6EQstopiMtmniWGZSrGZ8gM9zY0WutDQhT32SHdbZb5axQ6xxm3bii43wJAEGBrYUqpd
wjONkMp/+xsS1zlLAj8MuhAsFyOE9Il4FVodZ7J4u9ZBclLCbg3HDqvgT80Wt3iv5APGWATZOgqj
CKzSSr5aS3K0XNgAAg/XQKZVHusVF1xbrm9yhMURuFJYaesbUEsDBAoAAAAAAIKQ/EYAAAAAAAAA
AAAAAAAeABwAZmFzdC9jc3MtaW50cmluc2ljLWRpbWVuc2lvbnMvVVQJAAOEJrhVjCa4VXV4CwAB
BPUBAAAEUAAAAFBLAwQUAAIACABukPxGBLVDNp8BAAAABAAATgAcAGZhc3QvY3NzLWludHJpbnNp
Yy1kaW1lbnNpb25zL2ludHJpbnNpYy1zaXplZC1yZXBsYWNlZC1hYnNvbHV0ZXMtY3Jhc2gtbG9n
LnR4dFVUCQADXya4VV8muFV1eAsAAQT1AQAABFAAAACdkUFv2yAYhu/8Ck5TUlWTbVzboGmHNGuU
qaqiNVqPEYaPBNUBC+Nu+fdz7C4m29pIu9gGnvfhNTxYLBxvdriyW6xsa2T3dHje7utvYCS4tQNg
NEuj7CNCjZe29az/AOcYijHG0c84giQVSQz46+MtY/O7BWMPVsJVMJ4dPNx2cyvuGnCMVZbLT/3y
AvzssJTfudPc+M+T1jR6a0Bibfz1n8Zr/I/lcwMW1jT+wxQlp3JERqp8p8yOG1nBq2bSi/+7xaPn
vm1OJch4QnFK4J0S9fE9q6x4PjuCKUpHBQXFLymOE4Nmim7GKE8yeinaJbIgkcqw70CM44Xj9a77
w/x3gpBSFHmQWFXcMCbsvtYVLM1654DL5b6uAsu9Ndt7/QL9uUGnKwJdkalLurdV4a0N7Jx7fjVF
9LSDKHNOAuzJuudKN54x1/7tP5PE0askL7L8huCn9R1jvie+GO8OK9vd3eTFanmE4xEWkRrgH16t
3+KTI58rpShRJS0oxZt6kG9KKw8oJmdAnvARaLxrhd9ooz2K05CTSlB8orjzCP0CUEsDBBQAAgAI
AG6Q/EYHYRCZcAEAAMADAABLABwAZmFzdC9jc3MtaW50cmluc2ljLWRpbWVuc2lvbnMvaW50cmlu
c2ljLXNpemVkLXJlcGxhY2VkLWFic29sdXRlcy1zdGRlcnIudHh0VVQJAANfJrhVXya4VXV4CwAB
BPUBAAAEUAAAAJ2RT2+CMByG73yKnhYxOwBFgWbZQZ3GxSwmmnk0pX+0EVtSipvffihO6jY12Ym0
fd6nL7/6AADv0/dYEJLAZ+B11kdoMBwh9KYoa1vr3t6wfrU3xbpgGqFMYfp0PB4x09uP6TvWAkvz
3CplIVaSUSCkefxpfAR/HF8aAFGyMA+uE5zLQerx9EaZNZY0YydN6yj+d4uZwaYsziVgMyE/hOxG
ifzw7WWKbC5G4Dpho0gYx/cUh41a4zqdJoqDbnIvWiW6ViKkdt+aaNYjjfN19YfRdwLClMSRlZhm
WCJE1DYXGRvL+VozTMfbPLMsEyVXE7Fjx7mxShdburjL7+muq+xXq9kBNrjtOsn5BpJGGFrYQulN
JgqDkC5/+y8kvneSRHE36kCwmA8RMkfiRRq9n6rq7Vo7JegB9huYeLyGPwyfX+ODAx9xzhPI0yRO
ErDMa/kyVXTv+PACiALcAIXRJTFLIYVx/NDmKCcJOFNYG+cLUEsDBBQAAgAIAISQ/EZt0Pg/4T8A
AMv7AAAyABwAZmFzdC9jc3MtaW50cmluc2ljLWRpbWVuc2lvbnMvdGFibGVzLWNyYXNoLWxvZy50
eHRVVAkAA4gmuFWEJrhVdXgLAAEE9QEAAARQAAAA7F1bc5vIs38+fAqetuQk2HPhMlA5+ReSUNYb
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
0/xpbKI/jq8NKFEyN091x7+UA3D54k6ZFUiaspOmdhT/u8XEgNnmlxJBVYK1AnanRHb4dlKVrK9G
UHda1ZBDxuGR4rBRaupOu4piP4wfRYtEaCVa1O5bEtV6oCFbFX+Iz4kQoiTCVmKcgiQkUZtMpGwo
pyvNgA43WWpZRkouR2LHjnNjhS6ydFHIH+luq+xXK9keGGjUnfh8Aw4iDIGFzZRepyI3hOjtb/+V
xHNPEuABbgdoNu0TYo7EqzR6P1bF29V2StAD7FVw4vIS/jR8eov3DzzmnMcBX8RRHKN5VsrnC0X3
jhdcAdiHCsiN3iZmLqQwjteyOcqTGF0o0Mb5BlBLAwQKAAAAAADqjPxGAAAAAAAAAAAAAAAADAAc
AGZhc3QvaW1hZ2VzL1VUCQADuCC4VYwmuFV1eAsAAQT1AQAABFAAAABQSwMEFAACAAgAOpD8RiGP
vTgyAAAAMwAAACwAHABmYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UtY3JvcC1ib3gtc3RkZXJyLnR4
dFVUCQADACa4VbgguFV1eAsAAQT1AQAABFAAAABzy0ksSXVJTc5PSbVSSAHRmXnpCqlFRflFVgqZ
ecn5RUWpySUKKYkliQrJGanJ2XpcAFBLAwQKAAAAAAB9kPxGAAAAAAAAAAAAAAAADAAcAGZhc3Qv
aW5saW5lL1VUCQADfSa4VYwmuFV1eAsAAQT1AQAABFAAAABQSwMEFAACAAgAVZD8RhzZSlKQAAAA
+gAAADsAHABmYXN0L2lubGluZS9pbmxpbmUtd2l0aC1lbXB0eS1pbmxpbmUtY2hpbGRyZW4tY3Jh
c2gtbG9nLnR4dFVUCQADMia4VTImuFV1eAsAAQT1AQAABFAAAAC1zrEOgjAQgOHdp7jNCdtC0IRZ
nIgmjU7GkNKe0AQ5cldieHt5Cdd/+f7a2put4OLiiAESAaMLsFcPQRbVLXEMHSXVxI4dr6qhXtQ5
un4iSdFbnInTVpbPbHEKyHdGbHNtykyfstxk2hSmPLb4FaOLg2cnw76CZ808EeQvuBLI4gd4bz4Q
Q4iMPhGv1Z8ndj9QSwMEFAACAAgAVZD8RhLJraVxAQAAwAMAADgAHABmYXN0L2lubGluZS9pbmxp
bmUtd2l0aC1lbXB0eS1pbmxpbmUtY2hpbGRyZW4tc3RkZXJyLnR4dFVUCQADMia4VTImuFV1eAsA
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
XAgbT/WwV1c+uBUCEjlBz6f60BTLIWRpqsXo9U28pVkYmcdM1pdixmHkTQ3DBq//ELhrnDK02rPb
vJqgV4QM/Hj7oYdJB952qA8zi+FIfAJQSwMEFAACAAgAaZD8RrziXKBxAQAAwAMAAD0AHABmYXN0
L2lubGluZS9pbmxpbmUtd2l0aC1lbXB0eS1pbmxpbmUtY29udGludWF0aW9ucy1zdGRlcnIudHh0
VVQJAANWJrhVVia4VXV4CwABBPUBAAAEUAAAAJ2RT2vCMBiH7/0UOQ2VHZq29k8YO6hTHDIEZR7l
tUk0WJOSRje//ap1Nm5TYaeS5Pk9+fUNRgi5n9jF4EUeZuh10iWk1x8Q8qYoa1nrzt6wbrk3Bl0w
TUimgD4djwfMdPZD+g5agDTPja0sxFIyioQ0jz+Nj+iP40sDSpUszEPT8c7lcOzyxY0yK5A0YydN
4yj+d4uJAbMtziX8ukQa+OxGifzw7WQqXV+MoOkE9ZADxuGe4rBRaZpOu462vTC5Fy0ToZUIqN23
Iur1QEO+Kv8w+k4scJjGkZUYZyAJSdUmFxkbyulKM6DDTZ5ZlpGSy5HYsePcWKmLLV0c8nu66yr7
1Sq2BwZaTSc53wBhBL6FzZReZ6IwhOjtb/+FBLsnCQ9x1PbRbNonxByJF2n0fqzKt2vslKAHGNdw
6vIK/jB8eo33DnzEOU98vkjiJEHzvJLPF4ruHexfAJEHNVAYvU3NXEhhHBzYHOVpgs4UaON8AVBL
AwQUAAIACACEkPxGX5Xc+G5DAAAqEQEATwAcAGZhc3QvaW5saW5lL291dC1vZi1mbG93LW9iamVj
dHMtYW5kLXdoaXRlc3BhY2UtYWZ0ZXItZW1wdHktaW5saW5lLWNyYXNoLWxvZy50eHRVVAkAA4gm
uFV9JrhVdXgLAAEE9QEAAARQAAAA7F1tc6O4sv58+RV82nJmxhkk8V5z55Tj2Nns5q1iJ7N1t6Yo
ASLmBIMXcCY+v/62JGxj7CTDbO7erXX8IbERdD/d6m61UCOu8ixgReGqy8/xfDq7ZmnI8nHOmPq7
YxHL+Kpc0XKyPgk+H2+zZD5lxcfby7Ob88HHdx83r1ROQ5aWcRSz3N1FWblleRFn6ZqopvSzkKnj
xYwtD/5mm11TVzsXtIwf2AGgyIGoerUCfbUoJ1kKKE0dW1+Va1bMsrSI/aQiUUzU35Gjf1VuCpar
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
AwQUAAIACAB9kPxGat1mhXEBAADAAwAAQgAcAGZhc3QvcmVnaW9ucy9hdXRvLXNpemUvYXV0b2hl
aWdodC1tYXhoZWlnaHQtbWl4ZWQtYnJlYWstc3RkZXJyLnR4dFVUCQADfSa4VX0muFV1eAsAAQT1
AQAABFAAAACdkk9rwjAchu/9FDkNKzv0j7VtGDuoUxwyBGUe5WeTaLAmJY1ufvtV69p0mwqDQkny
vE/eJnURQs6n63S97spzKXqd9TEeDEcYv0lC28a4d9S0X8xNQeVUYZxKIE/n5RHVveOYvIPiIPRz
ay9yvhaUIC7040/jI/pjuWlAiRS5frAtryoXJA5b3SizAUFSetG0zuJ/t5hp0Pu8KuHXJ+R0fHqj
RHZ691KZbBtHYFudWhFRBvcUp4lSY1tBHY2L5160SHSNRIeYfUuiHo8UZJviC8PvhB9AEoVGYpqC
wDiRu4yndCzmG0WBjHdZalgmUqwn/EDP50YLXWTooi67p7uuMm+tZAegoW1bcbUDhRB8A1tItU15
rjFW+9/+hsR1LpIQgjDw0WI+xFifiReh1XEqi7trHSQnJ9it4eJXLOEPzebXeO/Eh4yx2GerOIpj
tMxK+XIlydFy/QYQelADuVb7RC+54NpyOyZHWBKjigKlrS9QSwMEFAACAAgAVZD8RhzZSlKQAAAA
+gAAADoAHABmYXN0L3JlZ2lvbnMvZm9yY2VkLWJyZWFrLWluc2lkZS1hdm9pZC1icmVhay1jcmFz
aC1sb2cudHh0VVQJAAMyJrhVMia4VXV4CwABBPUBAAAEUAAAALXOsQ6CMBCA4d2nuM0J20LQhFmc
iCaNTsaQ0p7QBDlyV2J4e3kJ13/5/tram63g4uKIARIBowuwVw9BFtUtcQwdJdXEjh2vqqFe1Dm6
fiJJ0VucidNWls9scQrId0Zsc23KTJ+y3GTaFKY8tvgVo4uDZyfDvoJnzTwR5C+4EsjiB3hvPhBD
iIw+Ea/Vnyd2P1BLAwQUAAIACABVkPxGmzhqyHABAADAAwAANwAcAGZhc3QvcmVnaW9ucy9mb3Jj
ZWQtYnJlYWstaW5zaWRlLWF2b2lkLWJyZWFrLXN0ZGVyci50eHRVVAkAAzImuFUyJrhVdXgLAAEE
9QEAAARQAAAAnZFNa8IwHIfv/RQ5DRUPfa8NYwd1ikOGoMyjxLxosCYlTd367Vet2nSbCjuVJM/v
ya//OAAA+8uxQ48ErkPB23wA4XA0hvBdEtox1v1C00G5N0MqowrCRCLyfDoeU90vJuQDKY6Efmnl
IuMbQQngQnd/Grvgj+OmAWApMv3UttxrORzabH2nzBYJktCzpnUS/7vFXCOdZ9cSXl0C+R69UyI9
fvuJxLvGCNqWXw/ZpQw9Uhw3Kk3bCuqo54bxo2iZCI2ET8y+FVGvxwql2/IPo0vCxz7uRUZiliAB
IZb7lCd0IhZbRRGZ7NPEsEyl2Ez5gZ7mRktdz9D1QvZId1tlvlrFDpFGnbYVX24IAj9CnoEtpdol
PNMQqvy3vyFx7LMktlkUeGC5GEGoT8Sr0KqYyfLtWgfJyRF2ahjbrII/NVvc4t0jHzHGYo+t414c
g1VayVdrSQrL8RpA5KIayLTKsV5xwbXl+CZHGI7BlUJKW99QSwMEFAACAAgAhJD8RjRUbivfPwAA
Q/8AADcAHABmYXN0L3JlZ2lvbnMvcmVnaW9uLW1pbi1tYXgtd2lkdGgtc3VwcG9ydC1jcmFzaC1s
b2cudHh0VVQJAAOIJrhVXSa4VXV4CwABBPUBAAAEUAAAAOxd63ObSrL/fPkr+LQlJ0GeB49BlZsq
hFDijV9l2Tmn7qlT1ACDzQYJLSDb+u9vD+iBXrHJZvfWPbKqEknM0P3rnu6enhnUvs6zUBRFT12+
BrPx9EZMIpHf5kKof9imaRt/Kte8fFh3gtfptyydjUVx+u3q/O7CO313unmnchaJSZnEich7+ygr
30ReJNlkTRQpbhYJ9XY+FcuLvzNTM3W1c8nL5FGcAIociKrXK9DX8/Ihm0iUOgWUN6KYZpMiCdIF
ieJB/QPb+p/KXSFy9Wyw5mYgrCgDXorT22S8YkgQNjRkaYSpmPUQ6emsC5RVuIaQcjVSN1Ff8FCF
i7+rGHXtrqF2MB1S/QRwTLO8bHTGWHEm2WQ+zmaFendXAdFtBw097GgDeyA59l0NE+RqJiZ9xPQh
pR5RFMXNefEgIvX2IRc8gvuoDrocflZ/y/LvaVKU1QeQru6gKN5zKKYl8F2q0vvd9fvOwHdc1xuN
1M7o7PPI+/ztpNFTah70+dW7ufTPLr8552fQfTC4kf15qaJntHgFAY8CIWJF+Xah3oh7uLlQLwXP
oc+yrado2idVkQry/Vvv91t1+7UghpEZRAZ80NYXQhzBB/UPGAvGvv6p5trzaf70rI4u/tu9+m2P
3SmKM52mScgrQUZTEYLRherZJM7ycXWxp7g3zujL2eVn9dYb3fbUmBflaV6DX7xr4wT+8WftKYnK
B62YTeUIdh/KcaootWZV1Oupg6SY8jJ8UP85EzNQbpiNuxz4i+6YA4WyHgMEMqZJkAX/CLtON5rD
5y0N/FetUiuOY8ajiCCGVNndHxf3I3AS9T34A25JRtiRHavaH5ejq+AfIizVpPiaTKKr2E05uMuf
QJQQhcB9a9i/ieBrUp6Lex7Ot6hWA8JNETEwOe0P6Pnl9uL8WyKe1MekcrIbYCKpMvDRRnN3PO5R
E9snCt3gBQMFvA5KYGNsMZ1S9XIkqYxEeSlEVEiVp3x+NpHcpAg6VvS2MtBYF2qxj2Kn5vbuQ63/
QqRwMcvhu/tZtp9UWiNqB3Qa3swgpo2F91yCV3Yfejo4u9Fan5hYW/rci6weMN3a1a1umCeKuc3X
zXKxT7cVXxZFccAtddGv1xuFeZamkmSvBzxL6S4Qt8CKSzeblBBnJQY+uU9FZ3XTWX0V+E6K8m9S
NRhRiCgrWhARJUJCyYlitQUY8YjsB5j/BDCKmsC64XTaw8i2ThTWEpcZINrAVc9hG7jklz2gzvk8
m23iqt4rdLqpdtakKnimBejsduhCQThm2+hq/1/huyuSyb1UHnwReWerM8AU+QXMAOkibFQgwQEO
C/JBDbIsXYtj0JU0NY1a3WC8JwpGbQUKQ/qCQK9R9jZGYth7MTIwVYxbYmQ0jrYx1tPhCuMwzZ7q
meOw2e4B3aLtOgM2L9/4TroDxdZS+hpnJT0x5QCRtsKTwGwr/A+94r1qoX3oKAN0tB06w2Q83ka3
hrNrQjLYVqnA6xxXh3h3DmnXF0jLYIqCSYCYMAtgva2VszD+v3Zbgqy9LkGkQEZbgYJAf0GgTjMA
kr2sTQyszXasLRGyHdaVelaczyZhOotAnQNRhNDOJ2XRkYZnrGBUN8BwYjl3gbe0gxDZNjoAYTaN
YJ1RfbnOiqTctLW662eRjUWZzy/4FEZwBmuY+wkk/YBcgrQtcxOl1JVR4WRtcQZE/NtwYmqj/eq0
/1/AJKgtTMMOWsB04rJqB6/c680rF94xALw7/rp0FdJu4jIszqNG2BnmfCzqVCatYdUBQs4XsOwF
nrHUDUHAqd0soSMUWg2PGGQhLNsmEAuSsVyuJaWbZoWofJDpTO0sOyzmJQMmJtIu9BtGYJvhlnDn
GayLYDjCBxF+dzPgLUoRVWyJXLY0OlWcmZxziN6SMaecHGAcJ5NELuCveS7DecXZZruMLUMyNloq
OSAk3qfkfVypgRdsYUypzDVJu0BrxIYwG7mmXJMsWUpGUtypDLi5uM1GZTZtcsdw58KeDANYtwuw
OhEI8V1Jf8uTUrIF36jDOTAZldF5EqzWaFROz6RdnNSxLWxrl932oMrvUsAom8FyuDIqk0oxi2yW
h8LL8yzv80IqXJfxpV0YJCxmzUzL5WDF0ZL4wqYvszKJ57WKGUxmm53cNJFa4un3KsoZEDIoagki
DM14BwR/WuOotbHUxXoB9wCGEPVncSzyd/Uymq7wre9frMwoIGsXzERgBU23G82CfEFzOU5REg03
wK0HCmNDX4/UwhEh1pkQ6+hGrBtmM0gYqu2lvdsW1CaQE0eq75uG3Hy5uzmHpG0COQ3cAgtTkU94
qvpPSfmwvu5MooFIxT3MEb1sks6dUG5x9v70gzQLv/vJ5DH7LgCmzhRK26KJgkj9l5FUmw+6QvW2
3EMevsS95rEfg2Rs2grdCIXu8FKUT1n+/cDmV8iYjSGe+77/P5fE2mBd+4BfbYIlITH9aMHK3zYP
7w7TWv9TubSCdcPjo7c9IhiBUsxW4GwURTp6BTjMKvUsdeEU80noXX8Nd3FdY9N3hxukrr9SunWp
pu7Ocrlv7n+74M+b4vikmn4VarVTttymDWt5vmJLut9IevUsBSXCoghTfypyuaP0Awl2NUsMhW7E
aUl42+Ka1qYLQbmtq+7QyXM+lxvB8+FsUokurQh8x24rGAoC9WY2SbNs2pfwqvXrM0ypC4k6i+Ch
6Kgl6SCGueFilpYJ3PAs8tEifDYJE7B8HbclHNlkH+HlIHQesySqIrBFFJ200nCMmRFgGGp3eHN3
eX51de2fjXzXOT8/u/zsX93d+rdXvuOPru5uXA/5197N8Ormwh/eXbq3Z1eXvi+1ZSk6bccV2aFJ
aq6zyTmMxSCrpSpQFZdADr0tRSriJkV4k8ZPsaIbLUkxYRlqk9Dq2AGyLAQjaO4cpO3fuF8cgggj
gBQ4n01uRVF2ijKCsfNxrxdwiAl+UebgVh9DmE4/qOtG+d2HHCcpi6rtU7ORp2C7vMzyukn91Nhr
IRRMt7OJr9q0RRgSM91qiV2PQ6ZGG3d0wMU/qJLzYkVTb0Ehmffu8sXYMoEva8nXpLHYuuMClvr7
ecPybq/MWJdrG92uDlqieRrtPWbZ9DjBQmHEEWib59VWxuqECPeWRz/FvCjF2IesayLSTZobtsQQ
FiYHs5Qe/s+qfy7KWT6pJprlCdCC2rQ+XtogtzH5xgEH41SXHf2nf9YfpPIpqk5+WlGL4sCuxWyS
wnQlMPnhkZhU6aJRG/MJvxd5e/0QEwLBd/EIE5ipb2hlSXvPkDVpWDFMEbBO9pf9/fF93ph0qL1U
TAuCGDKATYIr9RhkpR56bPagH5vAxrEJbPaaHr6V5NerqLYaseKIY66OufSk4l7OadN9yngFoTDC
bEVIZoD61nH3a/KEGBvNPGEk8sckhLklfLjO6oDP8NbJ9mvIGpCL7qQfGJvbp9m/IP/YPJJ+cc3G
oiCOLfX99pqtU4/nieo319WSZbVIo7A2NVtzAgsDNVyOanvyffncRJ0lUsyqM+NWBmsz216bf5BF
84oUq05521GyCF9TWk3u1KqOZFt6UWirO4RWPmT9TNDgVAaNQoyfIOPz5fYwLKb3eEn4wuxl2oJE
IVInfJIVqRDT6hxoFSrC9++7eH8StCEkRjiAxdo64ywfkmIxCfZ6FWEf1h6dZr6aZ5Os14tmeWUi
H9Nscq/K/5qJa9X2EacfQLLlK93MXy1jy/v+zh/5KMyTabneMGomixY1YrlBE4yrtLjXkyq8m5RJ
OuRpIRoYZ5MEshhfrvs+rnqPSsAUXsxgGfjpb5sZeHuJpCz1MVz9lAIs9joNBt2HnimT8NbyhWFD
vi+CT2EQQg5Z0/1/Xr4q2adU7XyrHqWR+45k+zmZ18hkR/q2TGAFYb2bMVpKd1Kt9NUOhBIpgg+L
JtHDchvfbMnRhNVAQ4vV3sUtLxqqkiA+qHI5rXa2kL076Zx8khvRZT6vDubrnX7QwopOdcyEtx+M
eQ0uCvHkX8O1iFreGt5qU8DegkjwyU9Ez0Nx2P51cVg+SfIr4zCDXGZT+73eBc+/w2r7JwK0hWFJ
4E+lJh/88FHGmJ9M6YKQBmsNgMlDXldTs4jVNlCjkEY6bXo10KuOI/1HnidcPitbBcQDYWJ9dVxH
CGkyutU2BCNiWChQ/z5ye73P7vJZDMl3mOWX4rm8fuCL40DQ5JY302qDoD1DzrYZ3of1p2qnoDp7
hMixbK5OIuQTYq1DlWEZVP3tdiinwUNuhi1wtHixO8lTGaL09jHKMEIU16yeyvj2MDdD7dStYM3X
NaqiPmqx0Mlx5Fn2m3+/+febf/9l/RujNwd/c/A3B//rOjh+c/A3B39z8L+ug5M3B39z8DcH/+s6
OH1z8DcHf3Pwv66DH90jH/jonvnA5tFJbB2dxOzoJLaP7mlNdHQSH98TueToJD66p2zJ0eVc5Ohy
LnJ0ORc5upyLHF3ORY4u56JHl3PRo8u56NHlXPToci6qq4tKnPInb4fLb6KWe42E8VjIvcaKunyU
mcjHcQuRVxVjqt1EKp/Ixa0ImwIFIjDrrVmA2+v156WQZT5XhTpSXv1ep1N1qWswXefZFBjP3eX2
9Ug0i3QR3dz6Oc3LMHBAsGjAuAQI734AKwVIH+sNZVH252fRN7mBPik/dZo1cT5sU9wsmbNo3qTQ
EIRi+UPU4edN5nXlGV1uTtO2yg5RHPxAqgc+iVKxwFP/QvWnxZGP68+KhjSG3Ms/II1h47a7+jBm
SKfiR6Yj36sfx3d2SiuBSeuH0FBqsrYb/4CGiZi/hEZeqBFVKAhGh0DoOmp9JAAgbGLaL4FY/ILf
aPzwwTRaP+8vmelRU/818fX3zzmfPtRnRPigsjFF26UuX+QcIx4yq8H5GoKEPM0aTxNZKK+OcWfj
adpAc55N7s+TR1EZplj8wry2SHn7wqvQdmXL14BhZvwSmMNAmk5V9x3wklcHN4YsBdnEhxndLlT5
Mj6bW5w2mCxnhF5P/pJ/G90WBKsuvRdfl5WZ2Ns1KP+tB2KbFR//YwdispTjrzkQk9UWf9WPSoxf
eyAG4S9clOyWpVxkDfNFbqBWdql2TF0LkvKkp6hqzp97e6prQ0Ow0VC/TDDQPNzTgGRDtGqQSK2Q
sciCxEq2JAduKVYNsV5flO+S+7RxB8ZUJlsV92K3wTIkEzVnu0xkiRQ1t3duMSomGB2AhfFOg0w9
ZAvZxWUz2UC3GzBmVYPebEAxF0FEKibGHu5YMkk2ZFzlaGoep1u3YESQrASUk32jCLSU8+w+CXmq
utd3dc14plRFwaqK64sq8qs7TeVW/vT5cjYOllXzsa4oSj+Z8Hyuno35vSh6yrKI+vOqfrqqqc2L
IQ7BAtT3W+U0OuhE/Wgij3h9irXh0MIaxQOmMdP1NAyDwgxChgPifHq5uv8GO5vvwWDzONbV9+BG
iwJdsrbJ6CEZL3yrQkMHMB1TSrWhZ+satYaOZiPH0AxkD5CNse31h/vQHKK6hSvagytGcRzt4FrU
e29AG9gu1R3T1Eh/4GiU6J7m9HVLAwWajFjEQyZ5BbQm4Q10kUl30Fk0pFJrh4Nzx0TkPdwEb13c
xe8BqGW4A6dvMM1xMeiQ2liziQc61PuEeaTvEbRXh5uUu7EsDCjXZqeLP1tQnDpbfZr4LcvUd/Fz
S8RxuFsPfR9ud9h3ddMxtT5yBhqFzxojuqsN+x52BoQwhux9uGuK+/HWbU2cDEfhDk4bCwzBfF+1
uT1Ah46tuxDMtIFhIY0O7YHG+hRptjVwB6Zpmdg4BPSwZheNTagc7GoHKrdCLg32UIn5fQYx9JDT
RwTslTGNmtZQc0xwdk/3POpZNgBmhxVb0/2ReuseDeQYB8LaRg4XY1uWFWggfxJBWJeDjpO0hER1
xUXtGF0M98P/Mkhhh+lDjDTUJxSClGdpzAPjdkxmewN94LHKpEfVnH16ngQ5xMfT6zx5hAl2uKRZ
1Equ+DmQ/MyLpGjItdvYFIkSe8du4CJHW4PBZ1GSyb9skIovA+eLc36dzu7PJmqHdM0uhdur91gH
qSDuMtYnljZ0sA0Gj1zNcZCpWcM+67uGadq6tyuV9wwQFwOw4NL9Lp7L0wX44rTmuG5egegGM7ns
XPe84OHVaLefUssn0wYTbUTz1cUwYrIksqyQBKJRuysFspyBTvt2XzNcD0Kka3mazaipgVA2soe2
6xgmCDQrchkVT+XNDVaMy/xkixVc5FhOXg0Vn4VyI6IqwlEAc0MqFezEAgS6ZWBMgO+wPzA06sF/
zJB2wwa6p2PT9IbeawylyWK/6Td7bArByR4hwrAyfZlYwtI/yJ5XzxF2iMW6GFd2riMPDR2CNJ0O
IXT3dV1jw76lechCkDF7ttO3GwrcpbaJJIx2kcQWj4m1+3dEOoZRY3AG1nBgM10jFvY0igCIQ02s
mX2CKEzArkX7mxiadDYAxGyPKmTBks0oUFWqK7NZ+LCcHRthgOgwtLSKBcuPMk9gxCR9m2iuSYca
NRyIvhB+NZgnIEMgQ0Ype804/4B1c7B3um2KaRv7xAxWI75YSiz+qMZq3PWujWppXDqgAwdiM8gk
UwsKfuO52oDZfdvBpoX6tKHymt7pIcqb2MQutgCRKh+U2IaZrHx/D6vUfL4EBg4k7cCyHPS/vF1Z
cyM3kn7Xr9hHR0yAi/t4xGn3rj0+5Pbu2wZZLLYZVlMeSe2Znl+/meChQhGkGOOOeWmpWSVUJpDH
9yUSRWkpxCSF6TgCMAzaEu2cBYShpE7xfIonczv5Gp7rrjT9m5/v+/cc38v6/J9doe9a9dYdnYWZ
md3qeb04vcsHX0aGL/TFOE1rlEbMxxM3QTpLQnCRiATpM1DliYF4Zr31XBdxdQ7Oxu9rd3Zbq4+w
HX2UPK4hvozn4Y+FO3kyxmLGIo/gJaSwqIlw8E+QGZYv0yhZkgBiVOvG7TCtBKpnRXqczeh/j09A
VB4hKIs6iWjbkLWtLzkQ5izkhOALCZAHiEslZqVyKY5fncLjoP2ZO15txdWbjriWzhxy+fxw8kVm
IITivGmlShDggYpHiCyZg7xMJhIgrijvc3EyXfPF06CtRJZ1JEIvbCbw8fdxNzygDYqFctUM8RcQ
yxVMCQDaIgQLCHgcMKcF4JlhMW2KrKhwfRq/h6Hjt/1J3F9rBV7TjsBrPkvFYLEfnh7/AJjMTitu
eFExRENkNhDSjEQUAHggCsCETIDryJty8HHsCyH5cHUmtehJvT4u/PC8WY/HNQevWhi64BiAfQzW
JEO8ZRGphyJBS4vpxBQWXLKStc4yGamVYOwt9Chn8/br+PA7zpmokFBqjLfZaKGB9CRqPLIKDwQu
SYKTmYxArK6vrnBcPq0ed2+G2G/g0f2b8MpMmZ7bj+uZ1Vb8eP/TD4jZj0bgwQAKhXjJCgIxA4kj
uCKIlaYIcHu3T2lvGsFx7L7Ex6uN1CuQ8UzqlT0BsLRdftg9PuMrjsbnZyyh7N+KfEp/FEO/jCnQ
YgKJFEKWkFxC3BKOSKe004WmwHJrEtfHnYnYyVCr0W42q2ZiM9A5rRaIcOtPkCsEzwGUOcKkRFP1
gWCmJlRDDGOOw6fpupngy5lvzsf5wsTnRp9BDOf6wIczq99bKMywkmgmCmFGLpF5FimJgRrIU5Bd
AyQ8EgEHZ8OSyNr9y2a/vzYTtTP1g5az3LDbv2P5FauBr4K0FladFQZAU8WI2SwT/AiYdcRvqjOA
lOW17NAM28qlO742OD0PuON6u6wFFIZWYSgmBy6yEJI64F1goRA6AD9mIwgPQBlyttaK2yLuYfAL
EfdwtRXbmXOxN8O6J/bPj48PwFVOuYIbSG6Yc2PQBdguJanaNA0ADwQYNhg3oIakmLXyqg1Mh78i
/OGOu1bWsaPAel6p+Ov44j+9/HoMcarCw2gZy1pzmG1MysEAXQO0Aw6pkuayCK7DLfN+GLwv+eFi
K/T6jJPbAWDvbNbvh+UDnjXDLzut79vfLIcmVcdipOKAb40AcxE2cRJEYMRwkxSQdZelvTrxP35a
Pr3883JVawqFe8JcgMO9W6cTMMhRn0+AxAC69+K/gVzL3ct2d8r2pkITzzwPEYO6AE7jOeT54oFp
Z9A1ANqPlTaeu+98vJkw7lwYRVez1Xj+fRyHXxffLrH2cj9+xPGG7+DadvehTAgvFgN0xX74C64S
19YAmidcACgQOYCZKRNJ8IxCNpVe5eur1H1kf+q7t961ig0dbeV4nPrlp5fHUyq1+6RVJEQmDewj
aApkxFogIwrsLGiwv2xAGW/bZPo6Svtwuek8XJ2i96fd37e79QnhqRq0DQDkKJQlHHINhBeewcqd
IpQpFaSJQUnTXfXpaK0Ywzk6HjRVm03zPRDfvHstU7EF30M9i+hIQlzmNhCnMHBohSsKDC1rSIUK
knrslan+JLd+leYC/HvXq2eBWh1X02t2ZJ9/pPsfjhMuOQDaCqhDMYKHTFLKFBYc+J+NoGWWWUQt
CyAWc13BYRgfxiewxjf1+mMcYID+bY18jVqGdczYcAE/qloPy0+705u/v7KSLxzf18ck9TQCMBSc
IbFGb/SgZFAJ2S1L3vquNU1HbEXhsiPKch7N4+PD49P9590A8wwsHf+g/kRQaJQOjlrifAILLwrY
IcAAYjwNVFsB3IZ/cXs6yXMBex0vN7paeQ5zBjfSOu29L7n4SiNKQACMPytglMlrZhAscFgEwL5O
GYVJlzHmqTfyuq6nsS/Ifbx814p4zuuGpT6RioqqXx6fAPZ3+GVIzgmAiCQncAIBfJ0EdH8RtI/G
ZJtVbOPf2XiNNCt6XlgdBsFnoGU9Pv/28vj78yQI2Uo4608EjlyFHDklxaKbFg5QRmlKrKOQKRWY
lKK3AJi0f9DRdPCG/uR2bmwUGztobBjXZrbJEh8/fnzc7QGZnNTrIOR4KXQhWuCOClg/uiUnPIOH
lCI0ZJ1b9Hkd/5JtH69PpV9Dyj+Tfl1xwGb+Qu/XxFDrPLXGY7x2JqhMCjMgPU0FYHDhwDAUFTHn
DFT6T1K76R2t6OvzGuOaiXEm+mnQqsT/bMv2VDClYOr7HQQlHbNOJ2Ig5iOc18Tp7EiykA1iEQG4
yZt64NiXdcCrd62onaln8pSlfloC/t8N4yvJl8g8pGbS8uiAaiR0R4G7z1wQ5QykKZ9koPSqqLUH
4933NxStWwla4a3sCG9PRfrv6pdQnDaMGBoL5YxXkiSpAShLARlaUxSx2VhepDZKzOoTzSiz559z
4rVYq1k4wYnHfjWcPYPZx+5JMTzRAAr1JIsEUUQAvvaUSaI5DQE4HM9Ov7neOPDl9card610uiey
Psbj38bPHz88nei7rUU+b5OF1BgLBTFDEsDiPSUAxDLzgnud+uB/OtZMCNMRAlsJ2nnD9q+fRtw3
Gp8OG0g4h4vq+QJXM3CQBFgkTByHBM7hN6uLJRQAqhUm05xuYvC9R12Y1c6djXKSnrMa+HB5NMpD
ReO4AXm+mUkTDUxkT3TAgqaH9BeyRqAkrZIQBYIx12olzciNaG7d8ZclH2bzfv/54+rxCGsw+dWq
EwfIVJOyAdhmA0x3KAxLlKIQawGEGwSvkoZSyk3JonnMBUI7vaVRZbU6h6HrAZnEWcqoJYxO8cQH
I6gAFASeRgRDPOSAVYQM9g4aGi3Dm95Xx77sfvXyXStix/8GNjf9tH2qnc+fD0lnMSG6BwdgoMhh
H5RzQNZcUPBQ3Hq2EM68k4YoH5OH/EdTuB5Izh7XByGzuxrFNqtz2xqpmW91fVvB/CSLG77gFv25
/oKcNxoeqXW1+wGiopEkWApBkkoGNEG6wuWXK9S28lzi9tN77loFNx2tl2MnA/hf4jcJ62BmXwmD
ELiQNQ9ICtjLRYioyRVISQyAZML9s6gUt6oYS+1t6OvwlMsGWS83GrDxnJKP/KwkVncMfvFl2mcE
4cDsa3qLuvMN0DzRoiLJOUFqVVYDIIZ/BEB447JNWemb9y5+8Ve2Ln7xjQ68UwMeJVvXbQEIgtvh
04CltteeDQi1AkmRLtSZ5A1h0kTIH54BdATga7j1WkLCS5G3aGA21l37yLEnxxwMTjj6noPjvi+6
9OF/8B/0A5jMCCSHOOuxZK6ApZasCXi6kpxZbt5w6i9UCthfm+nZsXqJNYDDdiF+Ne1xrvWeyEWW
tQowsTDFInnEEFiK44IpF72HnNfNaZOhWhE63B8+XB2z7OF0w9P/vTaj1gWXMTmmIeCzAFRYaO5J
kFSQDFHFs4Stn6wvyHzARhzDzmnACOllFge+Hnfj/itAlg8HlnrkAUzTGgy0NNIFChAGgOo++7sg
HWTXpDUP1Akqb3GizqP669u5sVVNsI5qK94jZy1wEBAYsP8IphR+w9m3nBkaXQRtkDczrLwk4DqR
MxldMJz3mhr6ke4G+HB2W6vYSnQUG+Zdc9hb8OHhP75yC121qT8RFiuXaAbMnhjCYsmAM0thSMAw
l8E7zRv4AbsHvr7SWfB101kw2k4vyWhXy9ne5zfj9uN6+dDy+yIkWg/EkmKxrAhMDcixIYALgAwB
ESrW3DLvh8EvbYPXi63Qq1VH6MHMN2zx33KPXyv/ND4/V+tRulYOa9UFdaCggFIlgdBYqwM0AFky
eWJ8iZJFR4E535xdmmddSTTNfa1mg+1ptpxZTy7v8OjC7kT30QuSVkD0AdcYbNgusBouOEGk4Tl7
SD+O39SVexy7L//x6kzq7nqcNiEm39x56k6V2KSekiEF5hgSkQXGrEXGUJ5hGYBhsX6X3etgjQyO
dRCHG05dRn98t30ezirjVAJCMkIRiLQWy8eOOAnUw+gI8BDiipTl31UZfxWwVWzoRMrlGZR6rQW9
+77uSPNDnHTULGCEBcM8QJUpKUCeVDphuRxylI00ECsdBEugXs5eL2rVwS/04H4/244eN52NGfjQ
HRHUcRv+8WW7mfQ7sgXfMxAXhAyyZFJUNWkwFK8KJVL7UoQyTPCrnZjTgaeCbcDrzwTb0GHdAdjv
X7YPz9OympDVfrMSwRmQLVMNKV8UDewoMpJkjtxzWoIrtyad+ozLyaZebuRnqiM/U6t5Ky8SRbRQ
CDSr7cP25fORsEo0hiSoS1YkoooHgmc87nvlRIBpJ2+D1sHytzf6m/GvbPc39820GXraDN1e/k+7
7cvzwuPv73e18wKsu4ZzVg9QYQ2BgUMr5cHAlQZIKNDUs3bcm5SDecOhjyNfiN/HyzMN1h0NXnuO
v/62ViaPJn5M9ipTHoSNkEBF3bzKxBqpIQZK4Ag2hBLpv5zs97dv9+XORoBW9I3siL4Z6kEh/Mvy
v/e/Lp/G9Vx4wN0RkIklEUu0gmKRDGIm0WD6MuNW1xsdcrcL34rQiM/pedEPPpx3ez+/LMFqjhrU
Egd6QFTWZmo5SU4GsBbgyA5b/SCDWgHBh/KUrxbFXoedSdWxaO7szD+3u9+mzfWHEgyohOncKxos
5G8gMdgMwoH2KqUgAEJA9IXaIs2XaEB8t7uw8wYXGp1Eh4xsBNKzPTf67R+TJC859kuoGilF1MYG
o0gxuAGRAqQbQFtEWmmFT0qmZrttUun9Ry/TwzM7Fgv567jk4Vt//7qx4GTlCCk74ZWjGOsUUnJO
PNORqGQSfoWf0e7flehf5btrNRA9tcRFmo+hD+1l8gmrHF9RFwLuxPqsgexpnQBaJeB+geoEmCYW
9ec4/uv1RgOtOhpoNW/mW+GLIE7OqNEPS7BKRwDgAP48whI8UeYCYVnJgOc5i+XX/HA65Ewk1RFJ
rzud3s/1IOV29+FUm64dkUFAIMNmZEZxE5NlDeQSSD61kFGcL8JQ9iX8EKPh/VGEy/TtdEurph47
ahqIgvvvZFz9E48f0pN71i2rgCUgyJSBCYC+AISJpRrbFJ012DPH5WwXvBmlfb7pxDvt5ltW71fb
v306oJB6+M6iIBGbuo2QJGYLFEzU9n7kYYHT5JRnxd1U+T+O3p+849VGbiM7chu5Psa0h+Xuw/YU
1Vg91OaU1FmDfMUIYL0+UBJETIADMy8JTEOk2amw6Sizx3eWzSi92exfxRC/jt/dT+qLzi3EPqZq
yFCMY5nJ4vHnSBUm30iYE64oqiUgujfL2fVFJdvh+Ybt0kaSRgfLz5sfNlawWQvJtzAHx4OcuPz7
cnX9icmuANtjQRPGaiXBceJwvyE6rN9AOOBJfvGOmalIl0r0r3c0Srue3TilJ3XCj4+7+PT599fu
O0DsEs3dRgB30Vc1Ix6KjOCBkNghVieIztZkli7VCmeDNjItTSfUjXLYjGcVNf8+gjwLrhb1Dw6/
1RNWJkWnsZnRAuiApSWeAh2OsAZJUc9Fun3P4H28smPwPt61cnYA9GjUkSn+9O6Hrh8UABdUAYBj
hSMLU4mAyUD2iEVQow2eGfiSfjCRo5XfdiZ/Y07g6L9+4LNeh5BVKUYDUckRd9cCNr8qDH0QhYuK
4N/2C/U6nB4+EdlRK8+QM3xo58XlHxOWXFVlvw530iJMNUytJCkXrFDGAvEPzz3gTjJNWmatv7iv
/nhh9+nH1Op0frALP+RHM3oaPz7+MW62D69tYaIWXaUoDpK64zYjQgVwyIsEGgB5KUhnaC5dl5yP
NxNGdIRZnprUhr/8ZbnankpSbr/pyrylJgmijQDsJiEwBGMKMVJkoCZMp0JnZ58mw7TPX647z1/P
zzCk7f7tQ6cN2H17bCUitTtWCefBxyAmKHAxlTOei7ckAZzMFjgTN1/wiMu5NJd2jef3tbqve8a9
ntdRf45x2oAPtIAC8HFEmpIgNBtGHLBccMwA4c+KIlm8JfzBsH2p4cJMzFVHTOy/nC3R82/+abV9
eTrsgfBDS3o9qSYZoFwliAEzBeOFOBg4AlRWwFWt4sGaN7bpm9EvzXdzU6vF2PE6N8zRH25wfqod
atW4xL4vBRJeKpgJcWv0QFYMBPTiqGBA1gBamZvraO+uFNHe3bXi6Y7M6/n7XQ51iOXu6BP7Q7Se
Gwkw1Sos2/AI+QYSN5555xHfG5P8Te1Bp8Gv1kCW7WR3um3gw8281eO1HFx3HLCWzbB2g8TGSbrQ
dfNDighsEJKOwg5qfHVKoCWT6GVwJkrhtL1586M+4sqmR73eqrI5g46OKW3PDzTu31Gzb1DhWi14
rQ6nyAS+sMNKBt5qhSNOYNNNTpCCgL2F9Gbb/oVidjxcu2sk26iOuJv5wRL//f1fse486XTag11z
2IsFLMWC1fiuooKbxXi8NYhMmI2KeV1CjLc1NLQPujD17U2NQu68yxQ+PESfV3K93j0/nziQ4qfW
e1Fs1B6PCVKJBVZrwSFsIcnFXMB4vKTqGmmfjNuItdbDuVhrMzcLZMOn3qFe/1LBl6KxbIGoZXyZ
A+dYS1NEew6+L4xxsbxZoDw94TIlP93SamHOGvYcZ4OZwfFftuvx8eJRPKmdCwEwgBEWj2NafHkU
xHar4YcqFHjE9eOY0+H7GkzvmCrAlTkPNFzZ+R5DLG8uhAmRMifBwoPEvvZYz1JzwoWKWSWtUvF/
diGaEwU33D+7qdXcDh3NneqfIHv+vHv5dWw4JG6Tm7r5Vn/WN6T8P3FX1hzJbaTf+1foUS/g4j78
hlOeXdmaECWt3xzFPjQMD4dcHrLkX+9MVHd1owrdZFgMrUIxB6sGSFQVMr9MZH4pCrxHQ2CXgJHm
oKssGGYCL9EVa1Uw9P1LQq6rgNdL+ZpkyPam9kE43XkQ63ke2veAgp+3P91u/3nCA1S/ZFfjvzVP
AGMlCbO6JWMkRG6JV9o7eCg5JP8Wfbec5pzvM7+vXdR6t1yUdmBA1dxP/mH7K9gdoc0Vx38w/gF9
N/BzQLkkrItFqiihYEcC+HJRlJQoN0W87nXi4OfhCl5dtRKKntjDwbVZ3z/8durYMCoOijoW7lIp
mgCKB3ExCm7Bb4MvMAMKA1PJsz0TcTgdcybOTUccTFRoeNu+ub5uc0akzI7JkAFoYHZ6Bn3spGIA
OVxGR6N4dXkjwIhnMo6ur1sJO9aNGzbF9tYvj5+v5FSQaq+crE/L2gIv0AV4WjxjpiiWP9tEwGiA
C0aT9WlG1XI60qqdbdsRQc6P7tP25uXnMaMIfS+K2B5+xUNmBhgGPjWiuPAAFcAnDTx54pKKhvFC
fTRvqwg6znCuFOh4R7sG2VuDYjMiwQ/fXb/sC5odG/MORnyfKM05UMT3SKmEmZuORnjhzgQurc72
FeU/jXwu62B/uZVaLaElt8MYWZ0fKT/v7WM92z2xxc25sgOkCRiHKI8KvADmBy1gSGQ6aGW05q/V
iJ4MfuFouWeJ7bqz9e16Co69PN9O1DkCNW7yUXodC/EsgMa1RmIhmSMe4B1s+CRonhX4HoeYzdwx
AHa7Pcz869Pn55NKmHqk6oyTDvwiLUTEnI2I7AeYWsUcDS6ACz0jbzkdpJ1929HUTsHsbJ7mNTeN
/odrVNyj1hYVdmPY3jpw7rnPgKUYmiE0wRx8Tq1o4rzQP45BCy6s2mX11moWZHsY9IvDw/MLkmGO
Zaf7otNM4UPEwwDwm1HJB2JD8CQ4S0WSPoUi3+W8+ESCMzvy5I52jaazKQcpZu8TQw0jme6yPEGY
vVaJmN2b4QNTSGgDfiqSfqJxsz5GABYpvimf9TjX+bDHeL1ZyWA6SvEGPde95/R/n2+ft2LaGAoD
aZSC1QzFEay2AZkzBcBgFeFSAQB0jos425XNMKt2ro53ceMm4/b09PkKntiVPfptuAVYtFIWcNFM
xFR6rrBMBbO/gk2JsaSynEnQjtPKMCzDPnxZLLMZnofN9rni7Kd1JXEdWTuEGo/moyseHAOslM5Y
Qow1QBrURpaFgWsfvSrsTe8SJkqHic6TYCxuW7XydzTemk91Vr8+TEmEoJTRw+GVX0nSmADeF4kV
xSWBnZYMXE0RRKRgrDXvE9FMw7VC9D6vjdCLcp6n9fdbeKSbempt61NF0ANgpDJVJI8p8BLMAGKt
qA0y48CDLRHrJgCKmfxaZPA4wdkNcrxl1cprOotQ87Kw+OnlC7Yb308/Ja6rkWs2WKlSNJ4khpkB
DL4Qp02Ev5ZM4bHabpZRJzzYTnMGeLc3tctZpng5vrsBd7hh6/9++GeEkR+HPbtr/dgR0BlVYz+C
qZy4I8ZgxYIDKO4ofDLgygenFTeRdpZzGkH/r/kMc/7Y6fqqlXTdE3/BCXW/vh8w1GZr/B8hqKPZ
OSRjk6AuBJhxrIpUJIH+iqAzHLOvnTTDkOccHbg0E3P5lEWtfHL7mpv7L79cTWdpsn4iQcrAYLf5
iEcm1oCsNCfiM3wfgnuptJhX25yMsmqn2nXmv5nObH4dHk+oYmlVqspw75HA2VlMUs0MPBrKCYjl
rcwUwM+s9PdkkHby3uIZ3U0ey0m/+69ZfTuyaJtKBCNCDQaIAGJ7KbGAOqqSct7HQNvjou7kTNPl
5FxMVc/r8dx5aVRyAnfXakUYBbUnpEZyEQc7FIxyDgKJOOb+0mKoVTvppifJpqaDws1NGsyPJ9h3
TNhhrsAzB7RLHXq7FAmhfAGhnNH1YzZqlp9xZsCZUNuOUHq4QCZQuZK+YNEEmLExJoa/41tLGdP4
HLGspqamQLwHtMyKixL8InA63ZsLVmazvc40cLizWZ/aLe2e0FgH0rK0Dut/vDw0SYtXasyWuhpP
5JkDEGoBj0mDiXYmazyMBzUXYmHwALR1b1pbmM10uprx2qoVdRmPEGYYTpl19+13pmyeEUpaAS4d
V4Joj3S/3geAZaEQZpiUFDAmOKn/j8y6p0I3K7bLfA8nbsz81K3cg5XYn0TsT1Co0lcMAQKXQjqO
hQ8ac0wx/cAhk16A708zXUIul3MQjoP3T1GO11etlJ2PbSuH3boR/ZeKvL/6en98Ut2cxCUDVwYj
yNKNeMA6kUj2oP2ZdTQ6+m55nGPOdL9+sV5btQvofILbYbhM2vGt/ytGyPbUo0JcSfQVWGGmeMYJ
+KwS+STgzWCFSlRCA3BTxevX87tw7AukHXC1lX/oyr+bktg/lFkOi8mKgfURxEiKWWgJmbIB17Ac
FaNeeqrUO+WwTJO3IndOEMVOLyL12/XL4+3zb7tmL9R6acU4r+EBWlK0BdQArA3cSthfxFvFiQJt
HAUN3r9C93K9n+TynvCd+5ol7W5sZ0k3uzl9edMJ6Wsl9oTJHgmylUJGN6WwFjIDwMRkRW0yoH5K
M48XyctPxz0VTPJhwXKIP5yfBz083p7yal99xL8fQhW8HjtnEKN4wEnJo9rJkSODHiNKc8VsxEOv
dwlVfGxFOb2rXpotb91ZHiK/fa3S8PSZH5EndsxCysnMQXJKtA1gyLX1JBSRibQ5Gg5g35gw7xBw
MkwrQAf9STFM2dO/3p3Oz2vqB0se/XZQgRkz67Mk1gL0pIZZzfH4xpQZ9Lw7M7sYVGf2zfm0gvHt
+M3d7Rdkfp/OuulUWqlLoiIXzJDAh4MNAQI6EglwoXVeal7U2xg9ljOdI/ZY3tmsUunOM1Z2Iqr8
CG5uq+KYYsE7HkERYyl/AFwJTxgcNnjusJWsS0m8k4qbJm9Ftq4n8lSSHn/6yzX2Cbn9MuuSdKjT
CYbLLKUkulZ5MaRztUwSQMuw3bA4Or5Tnc4ZUdrluKXGlvpmzsg9/HKqq8eQgMaWGOOJVrGcG2yO
ZazCFg0ca48SlpQwC1hOcfVK+rP/6TU1fXrHqhW2s1PMVs4O9mvNG7rmj/efr2tnrk4RYYnwbiIe
LmVMoShGE1802lNXBAWlGJx+M1VwM9mFQrzmvlW7io4OBNgxsz1NM+G21sfllK3hmXDv4GPzxmJr
IPDFaxa3A0Tg7CXzczr0qpXC9USbJ9+AccXWbf/7CH/FJ37sfJBg/3pMoOABqf6kh09GAuClOikw
/Ljd3xRlbGc4a+JP7mnXsSxecgB81SzvDAHaHv26Kzl2v4ha6BxB4sIAbCHPhculECoVlwaUbSrq
vdiBp+nPw8cF/oVV6N7SzDzn8vHl6Tn/Mnx+qXvL/3za5wPjwQJeDpKmEekzdp1jWPWLRk5jyqnh
IvM31YP0JjqTltm5c7a0obe0qcpwlOUqHH1Lhx0savILNslSBZyqmBO2+wokeA32xETuXPDZzMtF
2sFmcnQ26A3C3ZuWagtHgH2+u/355Wia94172NS2RzgP+5QCDquhPY+UWwAkeAnCeqNsyZe1aGee
S4a5ubFZ100n+AQ/lIvoClZAfBxARYxJyjUN1iEU0gF8WV8SUbRgm4toiPMAg5nmkZksjAriPTDl
qQiX2CjHO2aL7BiOG3NzjlwMCS3vH2tof0yZBQVds0+t1eBZEQYfENgMTLuzkcJuYZQJJahP7K3B
o3aeVxjHpvvaVZneJ7kejqUwj9t1UwjD9LgzCkBCgYlATCI+pBSclsADoTQlU6jDphVn0lLaIVt5
llwUTm60mZ38H5Vh5WHF4ygxOoIB8CkYYU6SQKYwCRrXZc9JkF4KXttN+N+lZ4/XG8E3toOMNlYe
isH2FnLd7LapIgawXiUics7GoGuGiMRCSvhTUYaoxDxSWcMHctH964zeCjl0zNdmwUzmHx6uR77A
UxPsCjcpgqrBbnoADnIhjidBUizZWHja7M1cK/vRz6Yb76/PZN91ZN9sdxt++oDvjud70oxxsgCf
YwaIRrgxleshEkA26MlI5FMVFB72pad613mSW7cENKoy2y20wTKEZ9W+w57hDr7X5AlD2CiywbJm
aQnXhTPskcTD65lor0Hh9p5VK/CuswrLJ+8E/ulPf2k7uihbt38OUegIWwycKI1JdJhPjxH77CjY
eJOVLu/klyyEaNfQqdNRdENnJ3vdwMaoQPb035Vo0CYMJmdkROBlrCVyUUUC3lYMzshsXzFE/0k4
eZLlQrRjrnAAUi2NrmJyOm765tsf576kzxRUIAaW8ri4QjzXGH2VymiqmabqvQgrfuy8Kjl0No1R
Ypa7+ecPUxZXbbuKzmOtXYNtgTs5gu1MNQcI5MfDCSuLSIob4dP7dHX6cDHTa7q8atche4tzh/dx
N6w/3R8p8FHds8QdQ2bqSLESBWAz8QJAECZ5GBFUGUunl4rpZKyZDENHBjMxOf33x/zNopCR5iQz
1kMXbBcjsGU1aHXwS3Qthy4xvFsh42H2Rmi7ZEjCH66PH/L8OwbAoUJxhWC/Dgxc45lttgR2KyhT
T71y6b2+467Am47Amznc/ev2uVwfItWjE2gz15E6UJrZYc0L+EaOATjRMnuHkRwmLhd71THPtrYp
162cG9WT0+52w74+/W8//Paw7Vbmeh6kw2+R55SJCBFrKtH9BqEzZUpLxt63Qr2RpV3HtqM2nKYX
Dm+vvrs+JrNrTKmpXZxpXZvysMGwL5L0XGLGgSIeg6/YvyTpaDJX7P1KIo+SnKlBue7luSvXqWLA
H3YoWGfm5quvpa2E4ugjZlEow8xdbLsojAUfUShMdY8SXA+ArIK9jznr3Hi6Hm22S3ysLZsnU9/c
34FqGlPOmRsd3UrDqQDSg14CFWUc9glzgRSwZ1l6mot5U11ngFn6B9L3d42slrOOrHyiqLnfnHQ+
rIkckVIvc/CgugM2klOChJLAMjEXqCglST2jjD0ZYza36M1tDnN/GgkVyfD0ZUomEfxYLOAzZ6UU
ACyIKJ2LJCBvTwY0WTI8SS5ngiwHbOVxm448a97hWqu1SAd/jDFTc+ukNlIIeGWgmikRqiCjtrJE
cm4FD8IFxl/dbHXk8+i2Xm6l7uRcYwnGIt44PK4/jR3grvYf3T5eBx8YNkujoPYMKEAdKHGAbWte
gU4OUK5U76ckJkHORST3l5tFuiU7DvxQT7T9/zqmG9XsNckzjUjKHj1SxkQkjNNgghKXOamUpOOz
bKN/9XKNYArTmXc37wg7ZVo6Zw6MXbokLCykRAYs9QxOkeBoRC57sIg0mbGc4LyD2xNnx3riTKU1
8Zup7dnTkVm/cqDZjEkSmRiFnbS4UPBtejw01i4DOk4m2D8iG2FmCefizla7DJDogU4HSjdPd0em
oEqPwKNH9cQJE4qjX+OJhceMbrxJMoHfbmYhzJMxVu00687c6kjx/PLwdDzjFIaPBGIa/AuhsA97
AHPrwZsC51kSRrUFGJe8SXJekXMcpxXgpvPlDYs0p0px+uOH0bsbAxiibmqWY0g1ZKoxmgv/gTnM
mDEEapen4tPbLMl+grP7dXnree/u5IZmrbX77nytGzmnxrsbPn++Xx/pWa/YWLXpQT0EiRF4m5Ex
n2dsbcoJd0kwQAVM2IvlvafjtnLZXUcuNz9qPiRtfLo9ONiordDrwZbn4Id6QjO4HcLoymyPTHlJ
OA3g7DXqlDd6cYdMjT9/uJzJ8ecP7fo6B4SGukt9h/a9WPfhSGrMFTM1U6v+qXZL4dlxpCnOmCOf
JCga1LyMwVwWAJpm8f2MyVGaS41c5x+coZ1qIUPxlKQpFfs2+Y9Nh0U59mpge6o+Ce+RKlDsXGFC
HrK+WocmtOAhok88qssBWJzgzFaBK63InQMVw6ibm/lPwxiIZ2IMxdffMYbtLGAT8CE5hkEEl5IE
PKsqXrGSgoalvKm2dT/Bme9svNgIzmznWTM7z67/28e4f+tTYn1V6FmDtjKkZKR0wUoxx5IEhW4S
LWDkQ3kTgcVx9L7gx+sz2Tcd2bHJ67Z7EPLhO/BI6FjeIFVNvDFcGIw/wEdRYD8oDDqgMogmcgpo
XlNP39Zm5Vzg4eSGRnjOOrsboOgyAo7n7MPtl/YYOiQhOcXO1QLZWhxgB3CNE7EFm41hDMjmN8bA
p/HP+lPTHe0KuOutYDqxefmybjo1aQ7uAxIRYVIRFqGC9+QpsiPp4BgHT/5Mm9ZpoHb6jlkyGnvV
bOv03/qPPv7PgsDTZOMRUROmEXs6BjsNGz1qjUk5VoNrq/8gAs9TCVftKm46S9t3sFgQBzxu1/c/
f7lt4+6YC8prsKH+jtbOBqQHwQZeWOCWCyOOAva1SLKbBDwS/S4ElCMRwPc9oZZ8ASe3tU+AL+OH
ZiedcQtn7xDbQc8JAyvVwh/jR+BnhKi1JBSpIkQ0iXgsPnFBBG8EfHc0/s740ekdzSp2nUis2Q3z
1OqxerjS2eGfxlfH9q+ubvbMRLaSkhLAYNcYWIhFESqY5g72+ltaCNaxLzDp4eVW+qFjGnbridZl
c/v0UJvPTRjfTc4/4D3PsIwligC/IC2TQdZ1yQ1NgLtS7h/JtmO24nSCnZaqzYKr/HnY7NvZ7Qlz
LDYxrJWTEh3p7AHu4JEsACECppuTnE0OFAnesn4/9HOQ5FwK1Xh11S5nWR1i2b6N/ax699TgoGXY
24YxmA7fSCzcZ+y5VRB0S/jqDSOpUHgH0Urm+X8eTN9fXLVSLu2ZVUhV3aSU/HJbe1oUcConr+jg
F43NQCQPBT8YGrARr8LDXSQHciwYcNHgl/imbM/DDGde0/5qswTVwZ0Aj+aJRx/BJ75/vMOuj6dM
pLI2T0SQnUI0QmJwUFaemtpGGBQvwDjw80H5mPym0pXORGfO5ZY3rto12M7C9NRG84cPZZ6SX0JU
8I8CwVbk4BshY7iUmZgg4H9AdoLndzqNOc7eCq2XcVpr13rG5n9w7w7lHUpJrO2WI7dXEBE8GodF
dVghhcVRzgFM1VohYTgD/STflI1/2XNrBHfLNgQOO40d/OWH9fBwPOqQCP8BNQMAVbA/ERVVGl5n
I7ploJJojiKpWUn36SDt7Nb0Zp/CMg/D3Un29xhgFDEjS26qzBrUMxJY0aRYbBTsFDykWfL5yRiz
uXsrH8ThnMf/VEYrNIWLq/OTfDZSqwxOKXJiAKpEUAJehQIzAbgQy/B+ZxZu88G1YrQr6OSlWHes
mojfl+uX2+dtQ5NRCixA1UCWRPktluE5AzgXVHdMzliXZn2gm2FaCdY9CbY3s14nt19202OUyPk5
UsIlUOxMaZK4BaBgJZhcHgWJFJzhDOApXU6bPY66WuVf92WHf7nfHFnorl/u7uDp/wlkjsPnz09f
3Q2b7Vc3v311//wJPJSHx3vszrF9+up5ePx5W2nQnz+Bgtxf+FNd6/Pw9I+/g8b6+79Lu7ofRWEg
/t6/Yl42weRiEBHUhAeihLBQuVPcjyfiLuzGxI/Ngdncf3+/KerpRiCb64OJ7a8z0+l02tKvj3U2
puoyv+q8SPqK3zIfk34ZWeSleiLhGH/NuI28/n/k8eeiVNCA4sfr3pgQ3eJnWLZhf4+neJA0z9+v
9DsHKt5t/hBvgOeU/RudV4THlOzL1cYx+lZ3JOl3XqyzfFc6GNd0bamZo7sOFZ+8azhL94cyhWyH
nfqOBo6Z0zMwIJLaoHfXEY/wX6uXTQ4iLMCZNAzKp08klvnOMUbdgdQMUD2zMs3uUGr9a0aOHmo6
oq6YgZA2ssGKxNzzg3hGyfNPj2rCQzBPlm4knH+hDnpMFuqSljfMUamozgt0boDha0wpJj7x0VM2
y6JE/1/cotsb2lbI0LXaOd0UztBCPSxS5ShqsLYRiulxgIsebIfWUW0U/prBHHZ1Ke4XdB8k9F69
gAfir/vsqzQ9owGqoXwYrOaZ0sdwZAF6ynhKIpjeKsv4DTGCZPx956LyOiJUG+nJ5RiKMcCoUcQw
FNKNonhCzfqCEJY8QbUVH7Hp1KL7UNjiVwRHSR9cE+q5xZtI9BKAJphOk79059N6CfjMqhSLElZA
LcFgE0fbTJW0buI1lMti63rMX3gJTyr9NUChgTSduonbJkCfBUjTQLq+14IdGKiCNI2CWehNYQv1
gRfBmGriPSUttYUZnc7Q5SyYxNNmEQamGYqtcgXEl73VIy0DTkocW8w23/J1j/UBVL/hC5I4caO2
iuX3AvwK+oNggYfiqj1U7aAya9Pm2iIh/gJQSwMEFAACAAgAbZD8RlbEPnByAQAAwAMAADQAHABm
YXN0L3JlZ2lvbnMvcmVnaW9uLW1pbi1tYXgtd2lkdGgtc3VwcG9ydC1zdGRlcnIudHh0VVQJAANd
JrhVXSa4VXV4CwABBPUBAAAEUAAAAJ2ST2vCMBiH7/0UOQ0rHvpP24SxgzrFIUNQ5lFem0SDNSlp
dPPbr9rNxm0q7FSSPL+nv76pjxDyPnyvw/xl4DP0Mu0R0h8MCXlVlDWtdfdgWK/cm4AumCYkU0Af
T8dDZrqHEX0DLUCap8ZOFmIlGUVCmtZPYwv9cXxpQKmShXlwneBczks9vrxRZg2SZuxL0ziJ/91i
asDsinOJsJ6QF4XsRon8+OxmKt1cjMB1olqRMA73FMeNSuM67TqKgw6+Fy0THSsRUbtvRdTroYZ8
XX5h/J3gHqRJbCUmGUhCUrXNRcZGcrbWDOhom2eWZazkaiz27DQ3VuoSS5d0+D3ddZV9axXbBwNN
18HnN2CIIbSwudKbTBSGEL377b+Q+F4licN2O26HaD4bEGJOxLM0+jBR5d019krQI+zXcPkrVvC7
4bNrfHDkY845DvkSJxijRV7JF0tFD44fXgBxADVQGL1LzUJIYRw/sjnKU4zOFGjjfAJQSwMECgAA
AAAAVJD8RgAAAAAAAAAAAAAAAA4AHABmYXN0L3JlcGxhY2VkL1VUCQADMCa4VYwmuFV1eAsAAQT1
AQAABFAAAABQSwMEFAACAAgAhZD8Ro/k/tumRQAASCcBACwAHABmYXN0L3JlcGxhY2VkL3ByZWZl
cnJlZC13aWR0aHMtY3Jhc2gtbG9nLnR4dFVUCQADiSa4VTAmuFV1eAsAAQT1AQAABFAAAADsXW1z
o7iy/nz5FXzacmbGGSTxXnNzyvHLbHby4hsnma27NUUJEDFnMHgBZ5Lz609LYBuwnYTZ1L2n1s6H
xEHQ/XSru9UtyWKcJh7LMlte/gwWs/k1i32W3qSMyX9YuoqVb9KY5tP1TfDz8S6JFjOWfby7Or+9
GH5897H+pHTmszgPg5Cl9jbK0h1LszCJ10QVqZ/4TL55mrPlxd9NvaurcueS5uEDOwIUKRCVxyvQ
46d8msQCJbK+SdcsmydxFrpRSSKbyn8gS/0m3WYslc8Ga26agiRpQHP28SacrRhiBWldxehiU0am
rWBbIcdERTJcUxTpaiLXUV9QT4aLv8tIObaONbmDyIioR4BjnqR55WaEpF6cxE+zZJHJt7cCiGr1
lNEQ9boDa8A5nva7CCv9ro7wqWKqI0KGWJKkfkqzKfPlm2nKqA/PERV0Ofosf03S71GY5eIDSFfc
IEnDR4/Nc+C7VOXw975z2hs4vX5/OJnIncnZ58nw891R5U6uedDnl+H1pXN2edc7P4PbB4Nrfj/N
ZeVRKX9cl/ouY4Ek3V3I1+weHs7kS0ZTuGfZZkvd7okscQU5zs3w9xu5+VMSQ4qJDf6hW7ngmvBB
/gP6wjS/fJPT7uPH9MejPLn47/7V1y12J0m9+TwKPSoEmcyZB0bnyWdxkKQzcdGW+te9ya9nl5/l
m+HkxpYDmuUfUzaPqMf8j/OUBSxNmd/9Efr5NDue5rNIkgp1yopty4Mwm9Pcm8p/LtgCNOols2MK
TNnxjIZxNy8Ur4Bg65avzO0nKauJ/V8rPSKFIsPFriuX99n2OX1KFvkkB5Os/dPJct+2HQfZ9iIO
AYEzz9NP2x77IK9v9VlAF1Hu+CxiOdt6+4l88mHNvvDM0+Tx3YcNTOG/GEgWZ/kvG223cZh/kN0k
iY7k9zLSwAcKSlfuP5mXH09ty8JHEmqnG2ypAVOa4O5C9sO254tsWlXPpgS//AUJsGLKnRmbJemT
jXUTfBm3hW4yw93Qa5R430dRAvgjwVVc6HCuWwFxKMSwlsrkkoMqVaQdSaQlHlOjFtmKZ4mlI7qO
oCU30Xjszee2hfUjSW3HUFV03/K3912Fn6FaFUUb5EjSWvGxPGRYprfmM0rpjNXYrPrUsHS5s2oX
kiFioSNJb8eSWkwN1DXLQeJBKIpz8My5D7ZY9N9ZMIARJeaRP7ta5FfBoGamw4jxZ6qGuL6/P2Xe
d9EdioXlzpKBgIwVYh5JRjvIrsZcr9L9JXfbToIgY/lXHvFEfxDw3LJRcDNU5Ugy2zFjnsF8fc3s
n1lJ8arC7LdJH2A8Mk+4L0QbceG3SREw4P8oie/Fr7IJRvs5S/OnS+g/oRoTNAMtv03uaLRgZ3EU
xgyito1U6FKrBvk3+kAnXhrO8zXyKmTT0FyMLJlzEGPFZ5afPp35VzAsznjQ4DFNBdUsQUyihAc1
rIFjIIj4//jHP+TdPyUrDcG4iBgyfOzKCtC04KJqYosQ08JEQqgVZlP3NNWVI5A7d0C76RM3cqxz
SvjNKJHWlFx9g5JBFAmpb0ZJa6dwBfkWrSkcq6BwLCG9JSSd+p78MBtyODfJ+gHuOFiXkNHO6FSi
uGZp+Gc3PPmybQYusYBAIa7eXbxbW3+e9GkUifj1TjiADmPU3QUfEBSweGS2Y45poPgF8bM4Zynk
P/C7AQDY3gPDobhGIZ9e4tntuRyaZUCy3KmQLYYRAdNqBVOFUAJmIFiwB3B0uoS2gWCSLFKPieJh
OcaXyESAgEB7M7LtS/qd+WNInUoiZep78gvHrWpQZfSTGUDjFwVqE/IWrLQb+9RAoZXBfykhmE0S
RULJpShnMWTtkd9p3LpFlPUocXXxNQUgLBWPCtwEXAK0cgFpaJGvrpQD1qFzAVBbAbBvvUaAF5EL
tYIxNEkUw68JowvG7bBpahD4TWyrAa003+Lqq9BhRVvCq458RLEAG2mJjTBq7cQGvjCH0nWJjZvj
DXvMx0kWiqplo68bz5+ze+o98XJuspjz0rJIEQgB/Ll/HrrDxxzKROhzovOUVW2XSTFTC/Ca+a83
F+cFgOtFHPNOTxdxU68ltneld20Rp8hhlaaKp7YGaQzW2kKEmPkcxGX0EmjGNMuuWTCuFkol/5Pn
Aasmz4L5k9yBIGxhvR1Qi6iqXge6zOLGNM1q2sxGSTqmi4z5fEbkdBFGkCmLbMzUd/Ss0RaNBgXN
s2g8Gt9AaLwEfdwk31ncefbuyVPsTdMkThbZBXhTxWTHi9l8wjKexgpNmqDJTQpFJou4KGZbUZDq
Pi/KHCAIGSBzS1vJwQHrMELtRKzxmGC1Rcyzhmdh8HAe+5tGy/+f5GkY35/BmHQiLNPQ1wVBCW1q
G2CiRGlXxRgBY1plXGEeaMCHKoVuh3f6lLOss1H1fE1DGOAhanlTmhYuBNFgAYXMfcx8kcGLMAXJ
0VZbJqgdbNdQmblZfJ0n1Bd2nMxmYc6l6DwPSCeVyqp4uhjveU5PmmPSlzAvou82UK5vUC8gcvcP
uJP37zWDUJ8B3WI2KmUeCx8K3do/wnzKPxRjkf1N6AZGoK2PHs9mNrIgUBLSDpDqElMpAK2ZcR4i
KYspVMRODRbHwedYaw9w9liF/IGo7dhDJa8ZvJNEulpotx+FYhQreihnPr/c2dGR7xr2BFVAOdgJ
iBtkhaIURACq1tKeTKajl+xJQN0KiFeFDSuCuhBzw243ZFiYTyysgfSpN2X+Nf1xzbLCVOw4ycPg
qRA44730lUKoKDpxh7UvYVowAJcUS3IFma80+i4gazyCGG0RW6rxLGLqC+s6XQRBNRRPACvzi6u/
FLWMscK3fr6YgYAUkbQaJKimqToOKmnUwk1Lkstu9UO/1BzHd5WWCJtdXGYJ2xKJqgwntemKtS0B
6TF9ioAnT9pEsol5stbEUwwufCqKWK0lZd4rJV32wttKpKrb47rasmbCqut61fnCl8Ro3vkrjX1R
oL5WwNI3dgrQrmbSKbVUWoRcfmcdVi8bsAgCZi4qjxgKZb4iUbfCXprSp2JAUHYkfmptXBoli9gv
hpgmJiMIAotYGDJmX3YcXev+cTm5vT7vr5gvBwLZ4SPS+nov9pdQ7SSOnnoeX3Szvzkunw92wvgB
UiuRIksqaYvGd335LyPhbqSqkqq25e5R7yXuBY/tGMQQaUmq1o4vs1zFkp0G28Fm1/NsGUtqbdjo
jy5Z/iNJv8tbyZueaeoKI9DFzv9eYqPGoojwTj8CVwg9bIlVIC6Js8Xuhg/NDoahTVKNVmAsxffB
718Gg0yh7aVqexnk4cPxF+8WkQLFPAl5v4wexkh3+qMaqfEXQhqXCur9RcoXhp27C/o4rInjYK5c
sBmznXJ1D0HuLuT5ggzu1hM+Ri0iSMknLEfEmbOUrzA+I8HDsKlZDIqtxXlOuGlIVSNSGSMQXeT+
SPQVX+l8Gi1iITo3SlPSlLaCKa4rQ9UcJclcrPTwqRko/qB8KiQqloOQJmmoJWk30Il8sYjyEB54
ZGmZ6dYIY3AkDbcl7Ft4G+FlJ3QektAXE5AGljTSSsMBMjUXQVf3R9e3l+dXV2PnbOL0e+fnZ5ef
navbG+fmyuk5k6vb6/5QccbD69HV9YUzur3s35xdXToO15YhaWo7rlAf6rjguojPoS8GSSFVpogw
B3JobSkSFlQpwh9u/ARJmt6SlMkMTa4SWq2rv5eJAj1obOwU2T4TXy7qm4oLHpgu4huW5ZUVbZdC
THAyUel+4jlYdQ2b/+/AIBjmmWg7qTbSCGyX5klaNMkn1Yk9ArGoU8cnKhqFL6BqZjvsoBPPlP3a
Ex2RIlaSRmF8oBlzG18ogaG01KyWOkMkYI0n+ETvdt6I4K0yIxVDHq1DlIhC13+K/GP4Fbq7Vk6E
xzHTY1rgg7Zpypc40Go3BLLFNgcgkD1lOZs5UEPELKrTrNmSqSCmUzBL7uF/ivtTli/SWGQ7YmPA
mtq82EpRI1cbUwOXgnHKyxudH38WH7jyiSLW6ltR8wPXKsSskkJkJTB+dvsHV2nZ2J3RmN6ztL1+
sA6B4Dt7gAEM6vCqVpa0t3RZlYYRwBCBIYQt73dm92ll0CHWUjEtCCKoYusEV+rR8Eo9ZN/sQd03
gTW7avCNXLao0dpqxAh8iqg8o9ywsnse4ufblPEKQp6PzBUhMZHV2K/zmmEzQFp12Jyw9CH0INR6
03FSxD8TNbbdvIasBiX9xmiMkI4aO2reYjiWW1Umpu8GgSG/b1ZEnaI/xQzhugjnLEUJRKDy01tz
AgsDNVxOCntyHL5lrkiaCDLFdpZWBmuZlrU2fzfxnwQpU+xVaUfJwHRNaTXWEUPsIWnpRZ4lbxBa
+ZD+M0GDEh40Mjb7AQmQw2f1oFTd4iXeC8Fctxj2PUWOaZxkEWNzsfK5ChXe+/fHaHtOUBMSKcgl
ZiUBy6dhVo4Jti0IO5CKd6rpG19fsW1/UWyt+VSZV1rfJdo+oegDSLb8ierpnKE1vO/FzQNWIKY/
3JnIEm2bq/A2zsNoRKNsy45KXgZ9Wt3N189D72IBVdHJL/WEtL1EkdhmybeiFfOdYkl8zYCvMmrN
PXavkQ/GgbV8vzI6h07wKCQR9//38hXLU3LnDsJIIuaUcXM732tEsny1KRIYgVfU9pOlcGIJB9Js
iCRcAgdKCGYjvjVOb8uRqbhiJKKSv6FZRVMcxAeZF5dyp4Hs3VHn6MS2xQalMa/4BTCLyJ0VHb4l
jaDmlr3X4CIQTv4arjJoDdfwViWy1YCI0dFPBM9dYdh6uzCMlLcNwwakMnXt2/YFTb9D7fkT8dlA
kCA7c67JqeM98BDzkxmd6xF3rQEweUjrCmoGNtrGacUjvkqqTg30xC4H54GmId/KVcTDHVFifXVW
BIjCudtGYN3DhuIW+7A+98vvLgi+oyTlew3GU/DbYqrJQA1vJobeOiRyhtRsMrz3ik+ibl7uSlg2
F3vTjJ8IVdjQSLHasNvNEN++HZRzdTTiIUr9iRiFPSUoWP3Ig5vd3DS5U7SCNY8LVFmx1Yqvo+1F
mmUe/Pvg3wf//tv6t3Xw74N/H/z7b+vfSDk4+MHBDw7+93VwdHDwg4MfHPzv6+D44OAHBz84+N/X
wfduwwfaux0fSNs7ifW9k9jYO4nNvZPY2rvNmsreSbx/G3Lx3km8dzkX3rucC+9dzoX3LufCe5dz
4b3LufDe5Vxk73Iusnc5F9m7nIvsXc5FVLk8aZp/42338dJKy9lVT6MB47Orgjrfu435/uOMpXzS
tpg/JXwLMmpHWKUmW54PCHBtm59SxA94Wx0GFVHx/aTi0MDijMLlKZ795YT9hOXV742qeuPrQy/D
cE2MWAXGJUB49wwsfoJGcQRhedToHV8yiPOTTvXolg9NivWTXcrmOoXqsWuIfw919LnOvDhsROXT
8aStsi0lcJ+RairOuijxFF9Q/Wlx+NcTFllFGo2vXuyQRuNnp6htpfFVwp4zHf63OKF54zwdxQBP
2YGGEN1svdShuhoL6Eto+IUCkUCBkbILhKoq7RdBVFfHuvUSiPIL/Frlmx661v4LDsBM9av6L4iv
//+c0vm0PEByp7IR2Tig+EXOGjU806hwHkOQEEc9zcOInZVnaPIj1ypozpP4/pyftCTO1Sy/YF5Y
JH+89Cql9dHDAMbUg5fA7AZSdariXn6mh1iq0jSrjg+ZpDivuM1yHzEMSipMliOCOMFwA10DgqEY
1ZMUraO2pxz/lSXAlscgv9USID8z+W2WAPmZyW/1LRrtbZcACf9G8Ojm/LkE4T93mb+d/Wue+7P2
j/mB6gP250KcxKsftf8K48+bv/r/swKuvdkKuP52K+DGG6+AE/1g/gfz31/zNw7mfzD//TV/82D+
B/PfX/O3DuZ/MP+9NX9VOZj/wfz31/zRwfwP5r+/5o9rRyFylfbisHjF7HEqDl3tZix9+M8+EPF/
FiDYv+on2tdouAEmhiH3e8tXd9r2REhl24V05aFvFeOwmge0vYYJBpWWyg7E0Yj8cOw3syPt7exI
f+skWpW98p3O/Ch0/pLrMoLKYmFH7uhq1w3zI1uS5ZQ+2ltevwwNbq2h+OHH/KbelgaFN/irBo7U
8EzTN8DGeEu445Fs2WDqWFwTfzn3eeUJhKirQZN4YrPB0DgTOTU3mfB3RciptfGIJpggZQcshDYa
+No9b8GbuCyTN5BmA0KmaFCrDRgxH/tYMNG2cEecSViTcbXJQU6DqPEIUrDCz95O8bZeBFrSeXIf
ejSS++Pb4qXiljRM0yQVr+QuXzO+elKXbnhouFzM3OVr1ZEqSdJpGNP0ST6b0XuW2dLyLduPqxds
y125dtHlFiC/bxxH3VGO5E+6MsTDU4K6o5GBugQNzK6p94ddBJ1iahiPBrh38vLr36vsCDE2McDF
IFDl9+BG5Ysz+Nngk2k4K31LoCEDVVUIId3R0FK7xBj1upbS07qaYg0UCyFreDrahmYX1QYubwsu
M+CvGWziKt67V4U2sPpE7el6F58Oel2C1WG3d6oaXVCgDmrHQ0XHr4BWJVxDpypbeo7qCtfa7kG+
oyv4PTwEf47RMXoPQA2tP+idama310egQ2KhroWHoEP1FJtDfDrEylYd1ikfB/zVS3xz08fyvfbZ
x17jnhp+tgU/9BgNAm/znVLbcPdHp31V7+ndU6U36BL43DWx2u+OToeoN8DYNBVrG+6C4na8RVsV
p2Ua1gZOahoMgvm298BsATrqWWofgll3oBlKl4ysQdc8JUrXMgb9ga4bOtJ2Ad2t2bKxCtX1kbsB
1WU64Qa76zVd2wxiNFR6pwoGezXNLtGNUbeng7MP1eGQDA0LAJu7FVvQfU69xR0V5IigIGgiRwQj
xM8hriD/wVyPv44izoMw4q+PXXGRO9oxgufhNw9SqGeqI6R0lVNM/s3btSy3kSvZvb6il96Axvux
xNN2jD3tsG733N0EWSzaHMtUX1HytOfrJ7PIoogiSDG6HXcjUYUSkAnk45wEigVBKhtiMxi319bl
JFO2g0nfDjn79fv14gHi4+uPD+vvkGDL2Od2N8nDeB5A9I/tenuk12njsUodV/JEJbhoJ4sxf1qu
72f45o7+bfJv/fuPd0+f321+ecVneibg34ffKwlaQdy1NnBDimcODJ5G4j3VxJRgQ1RaO5lPtcp/
Pu7fHv56HGX2tf/z8fVe+O3r3YjPzQchZosnPLf1fOeHeffr7el9x3ovhToxQrhoFqvV7vjDx1Q+
vfs482OsVM7NhJqhgsobqyBkE2dLAUeRHmJS4MRpKlIOVEUnThU8Wi/0iOF00Lrbti1wfPvS9vWJ
KMdarMRKnGixWnK+6hdD7L+7+/6t3D8AyzuO+ZpbIxgVBKQFu4uZkSB5xk9SMgDgPrkzMX/a4c1+
VC6ACdPjWDle5HYxcQ//IX2aL/v7zT9R+DfvExg08O9XbMblTFj4f/g0zLSmxgiAV5CNMHayaCDm
F0UAjhTHo5G5uMum1BzqnME0b95riFBDr+ScHWu4v7iUFt+dje+lAIcQbpAdJlGK4AJRMUNijSaD
vQhNwBUcdcVFrzTI/rR9wHl9jf98NJSdI6qdDAUX5wwhz9Fkvuvw/OfwXe9bGFyhK0J0MSCBNIAO
OYxbQlJEZPhhFUYbm2SWTOtc8jXh5XiItrke31ErMecNJbpusAikI/PNcnH/5+ELK15xY2eMDdFR
0kyL55RIcDEigpTElmBIpoYCX8/OB3c0gae91ZJ0y1NJVma+4jtJ7hf/0x15u9rJ4JMpyVlJuGHg
HxQE8UIzogOnAmBbNCLUMhz3Uwmwso2pwO/Fr51jeD/Q4/1T92XEVEfJg0tYWjFkkPEjokvLNQ+O
k6gFxCPlIWdD0iaALgBX8gII0V6zzheGPl7sk9tqNZ1qqbk4rPiegN7NH/GdR4d1lzNHd9pEkUTy
kNFBJwSkAvwmR5KsC84zbWgQR1O+6+/1uZ5r2fpT2RaUd4NLwc0F4sGn/vN6+/jwYxQMHAjtwBhP
IZhBJlMI4iLQiaAt0c5ZwKVK6hQvhnxMRsCQdqe1L7nS8f/84/aK7HAq9E2t3rKhM7KWyuwW2+Xs
8MoIfAUMvhAUszsdcjtmDZ64CdJZEoKLRCQAXZDrPDEQz6y3nutyOe2d9N/W7uS2Wh9hG/rgS9V3
a4jvfLj7PnMHT8ZYzFjkEbyEFBY1EQ5+BJlh+TKNkiUJ0FfVblx3U0ugWlak+8mM/kf/APT2HoKy
GCYRbRuwnvUFkANzFnJC8IUEyAPEpRKzUrlAVrs4hWOn7ZkbW2tx9aohrqUTh5xv7w6+yAyE0CH/
KlWCAA9UPEJkyRzkZTKRAHFFeQ/ZV6ZLvnjotJbIsoZE6IXVBN7/0W+6O7RBMVNuMEP8AGK5gikB
oH6EYAEBjwNTsUBXMiymTZEVFS5P46/QdXzfnsRdWy3wkjYEXvJJKgaL/fxw/71HJDOuuAG4EgPg
FpkNhDRALBjNPEhuKGUCXEdelYPHvs+E5H3rRGrRkno5Lny3XS37cc3Bq2aGzjgGYACz1iRDvGUR
CasiQUuL6cQUFlyyktXOctRTLUHfWuheTubtS3/3B86ZGIiE1Bhvs9FCA1VO1HjkogixkyQ4mckI
ZHj6MsSePyzuNy+G2LcwdPsmbJko03L7fjkFt/jz9tNHZHqjEXgwgEIhXrKCQMxA4giuCGKlKQLc
3u1S2otGMPbdlnhsraSerxrev7DT8I+MBGjGL6/kIDT6vuOJqZwYARTBwPcj8B0BfEdyay1nzjt3
FTndd92Wed94U0u3aIl8wIxpPf+8ud/iyz/67RZrhft3aI8Zm2K2kjEFWkwgkUKUFZJLCLXCEemU
drrQFFiurfhyvxMRG0l10QNpXlS2kH95pbWaISgffoNcIXgOONIRJiV6lw8EwQWhGsIucxyuphfJ
4/UQIp+xlVzp0x2XEI8uThx151Qww0qiZStERrlE5lmkJAZqILUCIAiQo0kE6J4NSyJr95c9ddc2
EbUx9Z2Wk3S22b2M8xleQngBaS2sOisMsLGKERNwJniJgIdaKYQBcC8vJbSq21ou3QgPndPTHNEv
1/OhUsjQKgzFfMZFFkJSB1QRLBSiHUDebAThAVhOzuBv4rokse/8TJLYt9ZiO3Mq9qpbtsT+x/39
HdCrQ3rjBvIxhooYdNGQykgabJoGQDQCDBuMG4BOUsxaedEGjru/IPz+jpta1r6hwNJNAtx/9o/+
6fHLGJXVgGijZSxrzWG2EUcEAwwTABo4pEqayyK4DtfM+77ztuT7xlro5fxE6A6Q+mTWb7v5HX4P
42/b/mF4z/Nq3lXoIhYjFQdIbgSYi7CJkyACI4abpDwEuiztxYl/3uJ8MZQ0hTmD4Fu3Hk9AJ3t9
OgESA+jOi/8Fcs03j+vNAaCYAU155nmIGNQF0DDPAZoULyE7ga4BCEocmO6p+077mwjjToVRdDFZ
je0ffd99mb2fY83otv+G/XUfoG29+VyOODrWL/QAV/EDrhLX1gABIVwAjhE5gJkpE0nwjAIAkF7l
y6vUHLI99c1bb2rFuoa2sh+nfv70eH9IpXaXtIqEyKSBMAVNgT9ZC/xJgZ0FDfaXDSjjbZ1Mn3up
B5erxuDqEL2fNv+73iwPoFQNQdsApo9CWcIh10B44Rms3ClCmVJBmhiUNM1VP+6tFqM7BfSdpmq1
ql4x/Pbdc2WNzfgOnVoEdBLiMreAiBQGDq1wRYFUZg2pUEFSj63K2t8sBzxLcwaxvmuV4ECthqvp
JRsJ8/d0+3GccMkBgw8cIBQjeMgkpUxhwYGy2ghaZplF1LIAYjGXFey6/q5/AGt8Ua/vfQcdtG+r
5KvV6htmbJga1HrzfreH2z+Uu/s5JFs300NxKYH4KiGeLRxL9yIiKpSE0xwgXkJ8ecEVkR2+ef9S
WWYy/lhvnly+qUVv6cMF/BqW6W7+tDm88vaVlXzm+K5EKamnEYCu4AxrGxhdPCxaUAkLDCx565ve
cdxjLQqXDVHm0+wU7+/uH25/bDpkDW7HG/A3glyjdHDUEucTzrUCgg6whhhPA9VWAL3kP90/DvKc
oxr75kpXK09hW+d6Okx76+3urzSiHgT0+HsAwDJ5zQyCHw6LAFjeKaMQRDDGPPVGXtb10PcZucfm
m1rEU2rdzfWBJA0s4fH+AWhMg+KH5JwAyEtyAqcWCcJqwHAmgvbRmGyzinU8P+mvkmZBT2vbXSf4
BIQt++3Xx/s/tkdB1Q6cf/iNQJirkCOnpFgMO4UDNFOaEusoZH4FJqXoNYAs7QYaTQdvaE9u48ZK
sb6BLrt+aSa7o/H+27f7zQ5gyqOSKYRQL4UuRAvcCgXrR7fkhGfwkFKEhix6HYce+z9n22N7Jf2K
nUq/pItdqn/zPm8+AyB6Do4ZmJwOWeI+R0GrkMSBG5NiCjWBlVD4zwmOu4Gfo+Lu75taylVL9NVJ
DHomw7hHi9DeDUBROxNUJoUZmHiaChYvOJA9RUXMOZek/ibLPr6jFn15WqFeMtFPRD90OijxX+uy
PpTbKXjpbv9JSces04kYSL/IrDQsSXYkWUjMsYgANPFFPbDv8zpg600tamPqmTwAhk9zoGKbrn+u
t0gkgVIzaXl0wPoSRhKBJ164IMoZQAw+yUDpRVGHc1/vfr1iy6OWoBbeyobw9rDF82F4cfxhu5Gh
sVDO+MBXJTXAKiiAdGuKIjYby4vURolJqajqZTL+aXliKZaqUW/Do9Y4ewYTp93VJ2BEA4TAkywS
BEABVMdTJonmNASg0zw7/eJ6Y8fn1xtbb2rpdEtkPaaSr/2Pb58fDpUUO5SIvU0WsnosFMQMSRCP
246AiTPzgnud2jzsuK+JEKYhRD89WTN8/dKnHncd+4f99iPO4WzwfIGrGThIAoQeJo4D9uDwyepi
CQWuYIXJNKeriimtoc7MauPOSjlJTwkmXJyPRrkvLo3b16db4TTRwET2RAcsh3vI3CFrxHjSKglR
IBhzqWxV9VyJ5pYNf5nzbjLvtz++Le5HRIZ5eygAckB7A54wgDhtgOkOhWGBWxRiLfAhgzxC0lBK
uSrPVcOcqS0c31KpslicIuhlR1UjZQzVpEYdywcjqAAAB55GBEMo54DghQz2DhoaLcOL3jf0fd79
huabWsSG/3Unh8rS+mH4uqIf+6QzO6o57B2AgSL7XXTOgRRwQcFD8eCChXDmnTRE+Zg85D+awuVA
cjJcGz9N7qoUWy1ObaunZrpR+n7gIUdZ3PAZx1NAuw9YfoiGR2rdcHYGoqKRJFgKQZJKBgxHusLl
z6uZ1/KcK7Mc33NTK7hqaD3vGxnA/x7fJixJml1REkLgTA55QFKAjS5CRE0OoBhlgIET7r5GpbhV
xVhqr918GUY5b5BDc6XBgBqnGvCT6uSw3/S7L8dnGyEcmF15dTacmwBWkWhRkeScILUqqwHLww8B
7MO4bFNW+uqdr9/9hY2v332lA2+U43vJlsMODQTBdffUYdXz+cQPhFqBfE4X6kzyhjBpIuQPzwA6
AmY33HotIeGlyGs0MOnrph6yb8kxBYNH5ZJdOQRPDaBL7/+CP9APYDIj8DPirMfdCwUEu2RNwNOV
5Mxy84JT/6SqzK5tomfD6iWWL/abzfPuywEx6h0HjSxrFWBiYYpF8oghsCrKBVMueg85r5nTjrqq
RWiULeDiYsyy+68ke/jv5wPww4LLmBzTEPBZABYvNPckSCpIhqjiWcLj5qwtyLTDShzDTmlAD+ll
Egfe9BtckOHxtz3BHnkA03QIBloa6QIFCANAdZf9XZAOsmvSmgfqBJXXOFFjqPb6Nm6sVROsodqC
t8hZDRwEBAY8vQZTCp9w9i1nhkYXQRuk/AyLRgm4TuRMRhcM560jMe1IdwV8OLmtVmwhGop10zOX
eDLl892eOMPdI4EWyiWKG+WJISyWDOi+FIYEDHMZvNO8gB8uEehdWyWubZxE6oc9/2ob+m2//rac
39WliSIkWg/EkmKxwgtMDcixIYALgAwBESrWXDPv+87PHaIYGmuhF4uG0J2Z7p3jz3Ibwcce+u12
sB6lh6LnUDBCHSgooFRJIDSWGQENQJZMnhhfomTRUWDOV2eXaqwLiaa6r9assy3N5hPryeUdPi61
OdB99IKkFRB9wDUGDzoXWA0XnCDS8Jw9pB/HrzpsMfbdln9snUjdXI/DfhAeTD5Qkv3ZZgms1aRk
SIE5hkRkgTFrkTGUZ1gGYFisfUbzubNKBscaiMN1hzNq3z+st93JJgWVgJCMUAQircXKtyNOAvUw
OgI8hLgiZfl3bVI8C1gr1jUi5fwESj3Xgt79OhwO4Ps46aiZQQ8zhnmAKlNSgDypdMJKP+QoG2kg
VjoIlkC9nL1c1Bo6P3OC+9fJyYB+1dgjg4tuRFDjiYj7x/Xq6LQsm/EdA3FByCBLJkUNJg2G4lWh
RGpfilCGCX7xHO9xxxPBTjfPV1RPSywfU9lPpZvxIey5gaumwmPmzBGIHTCLQOwgPgdGFMtFKV1U
iNfsmb9oMbvx27ft2m5qBXRDq27ZoA2/Pa7vtsfFQiEHr8xKBGdgxjPVAGRE0cD5IiNJ5sg9pyVc
f2JrGON8Ch2aK/mZasjP1PTZj4H+ot9B+Fys79aPP0YaLtHEk6AuWZGIKh5oq/G4sZoTKSUkb4PW
wfKXT5JU/V84T1LdN9Gma2nTNZ+KetqsH7czj59/2wxHe8BnhyTFhqdtsDLCIEwp5cHglAagK9CB
s3bcm5SDeSFMjT2fyUpj80SDZUOD53P4b94P9dbRcUcIozLlQdgIsEAMu4mZWCM1RHYJzMeGUCL9
yxBmd/t6V8StBKhFX8mG6KtueOQS/7P88/bL/KFfToUHNhEBb1kSsfAsKJb+IBMQDaYvM+49vnBq
9HrhaxEm4jdmntNDPbW7W3Z/PPW7PZAxseLRZjtgfeUDMv3oRID5lwjLKEDIEKkNjkquxF8+2lyp
cCrGTS2waWkxfY5j+zgH2x/XYSg/oR9HZW2mlpPkJKiBTx05PMQL6MYKSAyUp3yxYPnc7USqhl9y
ZydRZr35evzYzL48Bioh1PKKBgvYCggmnpniGkKMUpCcIFn5Qm2R5mccLX63ObOhCw2VTqJBFFcC
qfOOt3798wiASY7HinbPIYqojQ1GkWJwcygFgAKAhIm00gqflEzVLu5RFf7PFgqDMRt+B9hiXPLw
3t8+b/o4OfC3lJ3wylGM2ArLJZx4piNRySQjNDPa/btA2LN8N7UGoqWWOFuCwQCO9nJ0hQ31F0Vd
CLjB77MGIq51AtibgJcHqhPgzVjU36u/PLdXGmjV0ECr6ZnXBX6z/sEZNfphCVbpCOQIgLlHyIhP
GLtAWFYy4PP9xfJLfnjc5UQk1RBJLxvPcGyHB+vXm8+HfYPh4HAQEI7xMQNGcW+cZQ3EnxlCLeRF
54swlP0MP8SAeDuKcJ5aH26p1dR9Q018SpgOM7/4P3wcnR7cc9hODFieg3wfmABaAiSFWKrxNK+z
Bo+Wcjk5XFH1Uo9vGvFOuynW/W2x/tfTHksND2NbFCTi4xpGSBKzBXoshgd3kCMHTpNTnhV31a7M
2Ht78sbWSm4jG3IbuRxj2t0c8s4hqrHhcVWnpM4a5CtGUADmgZIgYgI0m3lJYBoiTZ73PO5lMnxj
2YzS48Pd8U38cNt8tltDhmIcS4AWvw4jUoUQIhLm/p+4K2mO48bSd/6KPjrCAQ725YjVVke3LZuW
Z67JWmyGRVFDim67f32/hyxmJTJRRcZ0RY8PpsSEgIdM4G343gfhiqJagl96ydruRpJmDpavMTV7
ixQEtj09+fTLS2E/fv7xKKH+RGNXIBJnQRPGapbHcSxaV+BdYG4N1AFP8uJArLlIp45Pji2aSbve
unFKz3K49w+f4uOfn48gVYg7JC53G8FFjb5OM2K5c4QdCIYddHUC7WxNZulUHnfRaSPTYDqqbic3
+90q2+k/RJDnmqvr+g8Of6q1kyZFpxHza8HpgE9LPBXg5cE3SIp6LtLbz3M+xDOnOR/iVStnxxnd
GfUSxZ/iOCjgXFAFDhwrHGNJlQgsGbAesQhqtMHSmkvugyXBwSSq7bz8vZmco7++5wscSsiqFKMh
3MoRTz4DYsQVqj7QwkVF2N/2QjiUafCZyI5aufKc4Zd2mfj/IWE6XNUY3qHrH+FVw6uVJOWC2eNY
QP9heRCe8tOkZdb64nv1hxMngz+kdk7rkk38JX9ZRo+7+4ffd/u7j0e0oagJcSmKY8jaYDN6qOAc
8iIhDAC7FKQzNJfullz2txBGdIQZJuzj5uuvh9u7KV3oxgNx5i01SRBtBPhuEhRDMKYQI0WG0ITp
VOiiqnHWTTv+sO2Mv12W+qS7kdVwOhwfUeQ1EKkgciWchz0GOkHBFlM5I0+KJQncyWwhZuLmgpVg
a2lOnegv27Vz3/YW93aZ4/4pxnmdCoQFFBwfR6QpCVSzYcRBrA4bM4D6s6JIFt+i/qDbvtTwYCHm
bUdMhPUuPtHTb/7x9u7L4+F8ih8qN2oNqmTg5SpBDCxTWLygBwNHB5UV2KpW8WDNKxCKpvdT77tp
1M5i19l1brP0/vDw+bmiB+viEiNmCAxeKmgJ8dj6EKwYUOjFUcEgWAPXyrw5G/juTCrw3VUrnu7I
vBULvq9DKmL49LInxvJ4z40EN9UqTD7xCPYGDDeyWfCoYdMn/ybo1tT52TTI0L7sDhIKfrlfwnCO
qfp6GoTnDAwzUBjYOEmvdT2YkiJCNAhGRyEwH6m0Ai2ZRC+DM1EKp+2bD6bqEGcOpOrzdir7levo
mNJ2Xao8cpaN4CGu1TWvmfsUmUACJysZ7FYrHHECAVE5gQmC6C2kV6tbTqS+4+HZVSPZXnXE3S/r
r/z3N9/hmcAMhTY6u+ZwTg6+FAtWI3ddwYN8LFwPIhNmo2JelxDj28Am7UAnXn3bqJmQWyOA4ZcH
7XMMrrefnp6mGEjxqaJDFBu1x2paKjFNbC1sCFtIcjEXWDxeUnUuaJ/124rVUSfsVpoXsb752/vH
h19gsvfDIXW+yK8i0KpkXMfZw3KIEKZ5rR0pSsVomci5lEslh7uiNNPZ6s16OluzXOU45gRT60Hl
CnJ+smwh7szIOsM5pgYV0Z6DKhPGuPj6rKYRTmcYpibtLMwKG+o425hFdPHz3Xb3cLIAV2rnQgCX
xgiLRdgWuRHBVFkNP1ShEBadL8Ked9+fwbzFfAJcmbXe5GpF+hXLqx/ChEiZk7Bhg8Tqj1hJHzjh
QsWsklap+H/3QzR1N29ov2jUztxuOjN3ql83+vTnpy+/7pqQGBEZpp7z1p+VykkU+I6GwKYHn4OD
6rXgZxD4iK5Yq4Khly+cuqkC3qzla3C3baP2RTjdeRGbJeTxR3Dqv+x+vtv9Y0ZYVleyq+nsCknB
1E/CAgLJGAmRW+KV9g5eSg7Jv0V9r4c5Fcot27WT2uzXk9IO/AG1DPt/2v0BZlRoc83xH4x/wFAU
wjZQLgmr4ZEJUSjYkeBLuihKSpSbIl4PorHz094XPr1qJRQ9sYeXSG3z8PnPeZzGqHixO7Fwl0rR
BIISEBeT+hbCUFiBGZxKsPw82xMJlHmfC3FuO+IgJqahJf3m5qaFJ0mZHZMhg9+EhRAZ9LGTioEH
5TLGTcWr8xsBejwBbru5aSXsGGtu2JSq3Dw/fryWUxm6vXayvi1rC3xAF+BtIXWiMEh6YBMBowER
JU3WpwWn1Lynq3a0XUcEuUSJpN3t8y8jeA1DSYqhCvwfT/4ZuGSw1IjiwoPnAyF24MkTl1Q0jBfq
o3lb3dxxhFMFc8cW7Rxkbw6KLXhy331/83ygMXBshLiM4UqiNOdAMVxB7jcECTsa4YM7E7i0OttX
lP/U8ymAy+FxK7Vae8rcDmOieHnO/+VgH+uB+8wWN4f9DhxncNmI8qjAC4QwoAUMiUwHrYzW/LXK
8FnnZ877e5bYbjpb326mXN/zl7uJ40ugxk0+Sq9jIZ4F0LjWSCy3dMSDrwgbPgmaF2X9xy4WI3cM
gN3tXkb+4+njl1nRVT0hdsZJB2GeFiIiPCgi5wmi+JijwQXJ4oJlat5JO/quo6mdgtHZElG4NI3+
pxtU3KPWFjWKwFMI65LDIzPwpRiaITTBHEJorWjivND/HNUfPLhqp9Wbq1mxgmIOMw6fvzw/1gLP
amTH0uxMYSHi2QYVDJV8IDYET4KzVCTpUyjyIsffMwlO7MhZi3aOprMpBykW3xMzJyNX/LoSRpiD
VokIJM+wwBQyb0HYjZzWaNysjxEcixTfBJ0+jnU6izM+b2YymI5SvMVA/BAI/i/ENjsxbYwKAaEU
rGYojmBhF8icKTgMVhEuFTiAznERF7uy6eaqHasTXdy6ybg9PX28hjd2bY9hKG4BFq2UBSJOE7Fq
gyusiEKgYbApMZZUlgsJ2n5aGdacuY6v67K2w5dhu/tS/eynTeUoH7l6hBqRBtEVD4EB8glkLLTH
cjMNaiPLwiyoC68Ke9O3hIHSy0CnqW9Wza5a+Tsab8Onkr4/Pk94VVDKGOHwSgQnaUzg3heJdfcl
gZ2WDEJNEUSkYKw179NPTd21QvSW11boVeXY0+bHHbzSbT2Et/WtotMDzkjlp0keqy0kmAH0taI2
yIcFL7ZELNEBV8zk1xKdxwFObpBjk6tWXtOZhFpWIMZfnz/9dodXx9fhpxoJNVKpBytVisaTxBDo
wDLScZsIfy2Zwmu1XehXJ9vZDnPC8W4btdNZ4+4c399CONzc5v7j8I8IPT8Ohyr4utjRoTOqprIE
cu9xR4zB4hgHrrijsGQglA9OK24i7UxnfiDwX8sRlmzX0/OrVtJNT/wVE9zD5mHAzKGtxxnogjqa
nUPWSAnqQoAZxwJcRRLorwg6wzH72sE5dHkq0IFHCzHXb1nUIjt3KO96+PT79XQ0KOsSCVIGBrvN
RzwBsgZkpTkRn2F9CO6l0mJZ2DXr5aodat8Z/3Y6gvpjeJxxWtOqVJXh3uP9BM4iHjoziGgoJyCW
tzJTcH4WVeazTtrBe5NndD9FLF9/PXO26teRRdtUIjKnG0wQgYvtpcRa/ahKyvmQ0m1Pv7qDM03X
g3MxFdhvxmP0tVHJCcJdqxVhFNSekBophRzsUDDKOQikq1nGS6uurtpBtz1JthWjC40bVM+Hme87
4o+YK/DOwdulDqNdijRwvoBQzui6mI1awE1OdLgQatcRSg9neCsqQ9onrM8BMzbmxPAnfrWUEZXo
iGUVL5wC8R68ZVZclBAXQdDp3lwbtRjtdVKLl5bN/NR+bfeExpKjlk562Pz2/LnBYF6rEfx1PQIM
mAMn1II/Jg3iBk3WiC0ANRdiYfACtHVvmltYjDSfzfjsqhV1nY8QZhjmFODvh8en3eMRnDS6klZA
SMeVINojL7n3AdyyUAgzTEoKPiYEqf+PFOBzoZsZ2zV8xYlbszxELA9gJQ4HK4cDIar0NUMHgUsh
HccaG42QWURTOOTPDLD+NNMl5HIeUnHsvH8odHx+1UrZWWw7Oew3jei/V8/7L18dToNqmJO4ZBDK
YAZZutEfsE4kkj1of2YdjY5eDJY6Atn7pbL12VU7gc4S3A3DeX6Yv/nvMEN24EgW4lpirMAKM8Uz
TiBmRd4eB18Gi6GiEhocN1W8fh2uhn2f4YeBp638Q1f+/VRZ8K4sIDkmKwbWRxAjKYLqElL6g1/D
clSMeumpUheC5EyDtyLvho7Iu2UV9rvvp6/+8Ahhsx05/+rPCthgRgZkFuHIEyMTGNFgAglWO81L
8Tm8KUHdDHMqWzVr0k6lc7Yr9np16LDbPD/efflz32zryjKgGOc100FLiraARoPPBBEyqArireJE
gWGJggbvXyFJujkMcn57+067Zkr7W9uZ0u1+eWVEc2fhV0ocSOo9XkqgFFJSKoUVxBl8ZYSRapMh
gKE083j2woh5v3PBJB/WywZ+uTza+vx4N7/L4Po9/v0l68IrICCDGLA+GEkeNWiOHClAGVGaK2Yj
nt9dJOvyvhWlqTnDR4vpbTrTQyf2UOE3PH3kRyca70hFztzMQXJKtA3gk2gsnysiE2lzNBziFmPC
8laWWTetAB1HVophwrX/cT8fn1dQDkseUxCgzTPWPGRJrAUvmhpmNceTKFMWXvT9idHFoDqjb08D
Psav47f3d5/wto0JhUCngmRdEhW5IHYFXw5ewhIwJkrg4lrnJWgJ9TYenPVIp+hw1i2bWSrdecfK
Tky77yFib7U1Uyx4xyPYFCTACOAiwxuG2BPeO2wl61ISF9LW0+CtyNb1RJ6IHOLPf7/BG73uPi3u
M3zBKQTDZZZSEl2rCBnyUVsmCTj+sN2QUiBeqA7shCjtdNxaY0t9u7wFYfh9rqvH7IbGa4jGw7li
OTd4jSXePYbZL6xtS1jswyy4pYqrV4Dp/ufX1PS8xVUrbGenmJ1cYBRqTSVmGR4fPt5UotNOkWqJ
8G0inpNlBLcUo4kvGl0DVwQFpRicfjPXeTPYmULPpt1VO4uODgQPamF7mjuL2yosl1O2hmfCvYPF
5o3FS/wSugaOGgfOjbPnzM+866tWCtcTbQmLAuOKl6z+9yP8Fd/48baZBPvXIxaEB+T2lB6WjATf
neqkwPDjdn9TwrQd4aSJn7Vp57EuK3Pgw6sFIhB9zYMj767leONQ1ELnCBIXBn4jssO4XAqhUnFp
QNmmoi5Fbz4Nf9oTXrnyMAvdm5pZomEfn5++5N+Hj891b/lf5ncrYWpbwMdBqkEiPdJvGoa18mjk
NIKBDReZv6lSpzfQCcBsp+ViakNvalP95yjLdTiGyQ5vDao4HrzOUhWkVs4JL+YEF9lrsCcmcueC
z2ZZyNN2tpCjs0Fv0d29bQnqsAfY5/u7X56PpvlwWRqbrkoTzsM+peCH1SylR6I6cCR4CcJ6o2zJ
57VoZ5xzhrlp2MzrtpNHg1/KVaIIa1PeD6AiRvh4BSg7dIV0gLDcl0QULXi1EF6O6MENZppHZrIw
KohL+JRzEc7Rz44tFpPsGI5bc3uKkg8ZbB8e6ynFCGYGBV1xwdZqCBIJgwUENgMBkTZS2C2MMqEE
9Ym9NQ/WjvMKT9/Urp2V6S3JzXAsUnrcbZoSJabHnVHAJRSIaWIS/UNKIWgJPBBKUzKFOrwo6ATC
pu2ylWfN4OLkVpsFiGF2nT0SL+PJmhgDwQD+KRhhTpJAfj0JGtchwjNILwWv9+X4f0vPHp83gm9t
xzPaWvlSpnewkJtmt021SuDrVfou52wMuoJdJJa4wp+KMkQl5pGLHxbI2fCv03sr5NAxX9sVn5//
/PlmZNmcm2BXuEkRVA3eewvOQS7E8SRIiiUbC2+bvZmh6ND7SSD44flC9n1H9u1uv+XzF3x/PKqU
Zkz5BViOGVw0wo2pXCKRgGeDkYxEFmJB4WWfe6v3nTe5c2uHRlU+yJU2WGcjrTrcamq4g/WaPGHo
NopssOBcWsJ14QzvpePhdVDda65w2+aqFXjfmYXlU3QC//Tnv7dXUik7EmyHKHSELQZBlEY8IFY6
4OFDdhRsvMlKXwg/vRainUOngkrRLV0cUnYTG6MCOfD9V3pOmzAvnpFxAy9VwCovF1UkEG3F4IzM
9hVD9H/JjE+ynMl2LBUOuFRro6uY3B8R8B+WsaTPFFQgJpbyOLlCPNeYSJbKaKqZpupSmPcPnU8l
h86mMUosYKjfvpsAafWCdAwea1UhbAvcyRFsZ6pwJpAfz1msLCIpboRPl7lJ791Z0Nr0+Kqdh+xN
zr18j/th8+vD8c4LVPcscceQzz1SUembYPsLcIIQr2JEUGUsal8rpllfCxmGjgxm4j/76/v8zarE
lOYkM1aqF7zvSlj01AXGJboWqpcYLlZi+jJ6I7Rd84rhLzfHhbyq3QhaheIKwQuHMAePx8/ZEtit
oEw99cqlS63jrsDbjsDbpbv73e5LuXnJVI9BoM1cR+pAaWaH1UgQGzkGzomW2TvM5DBxvgyv9nny
bq5y08q5VT057X4/HJgD/uenPz/vujXTngfpcC3ynDIRIWK1K4bfIHSmTGnJ2GW5AxpZ2nnsOmrD
aXrmHPr6+5sjLl8jOgiVCP6sd97DBsOL3aTnEsETinhMvuIFTElHk7lilytWPUpyopzmpgfZV65T
kIG/7BAXL8zNX76SttLwY4yYRaEMQch41a0wFmJEoRC1HyWEHuCyCnYZc9ZpOJ+PNru1f6wtW+LC
bx/uQTWN6HnmxkC3ktcqcOlBL4GKMg4vOnSBFLBnWXqai3lTxW2AUfpn6w/3jayWs46sfCIPetjO
bputmJRIqZc5eFDdAW/CVIKEksAyMReoKCVJvSBanvWxGFv0xjYvY/860pCS4enThIsR/Fj34DNn
pRRwWNCjdC6SgIxKGbzJkuFNcrkQZN1hK4/bduTZ8A6XXy2reonHGDMVJii1kULAJwPVTIlQBXno
lSWScyt4EC4w/upmqz2f9m7r41bqDnwcq0lW+cbhcfPreIXl9WHRHfJ1sMDwtkeKB6SgAHWgxIFv
WyESOjnwcqW6nJKYBDmVkTw8bibp1rxF8Es9kbP984icqkA8yTONeJVB9EjmE5GQUIMJSlzmpFKS
ji+AU//swaZgCNMZd7+8hXsCjTpnXrjUdElY8kmJDFiEG5wiwdGIN0CARaTJjJURpwPcnjh71hNn
qhKK30z3Nj4d76OoHHs2I94jE6PwKkAuFKxNj4fG2mXwjpMJ9j8BrFhYwqW4i9muEyR6oNOB0u3T
/ZHDqRJX8OhRPXHChOIY13hi4TVjGG+STBC3m0UKc9bHVTvMpjO2OhKjP39+Op5xCsNHajcN8YVQ
FDHgYG49RFMQPEvCqLbgxiVvklwWFx37aQW47ay8YYXYqsTAH96N0d2YwBB1U7McQ6opU43ZXPgP
zGFG8BOoXZ6KT2+zJIcBTu7XddPT0d2sQTPXeuP5cq5buSQtvB8+fnzYHEmNr9lYgOpBPQSJGXib
8Z4JnvFuZk64S4KBV8CEPVt4Pe+3lcvuO3K55VHzC2jj17uXABu1FUY9zlkFcagnNOPlhUbX+yCQ
wzAJp8E5e43U5o1R3AtS49t355Ec375r5/ev3q6st3EbCL/rV+ilQAJUBklRPALkQQdluLY3aeLd
bp8MJVayRhM7iJ1u++87Q8kHZcnxHqgQ5LAm5PCeGc5803JBKIk+lq2rTiZdmyOJlD0qrdOZ/c3m
GGJGMwT3Nujun3HYaHDnpRTqUiCgiTbMkO89THbcHMtE3ZxwkrQEPkmCtyRO1Nsoi6+dFLG8ynBC
axBFDuNIItjYWYS+hYiVrDQeoTleIsYZS6PjBlisoGOpwBuX5ZYLFUmJbh7zX4rKEE/DyhRvf6IN
WyuQTUCHZGgGCRnnQYJ3VXkc0TxLBDTlJC+ouoKOeVa9dBinqqWvqWoGCny+TutR38YI2A3dCNit
ZJAbBNvBoDdNMw4busxIDod8kp8ELbIrvZ3x3fsG77MW3jFLddl6ETK4Ao2EVJEaPLKON5KFEu0P
MClyWA8RGh1wM0hlyghI84LE5LTkRF2Ghz0Ch3lGW1Y3iKKHFnC8Zy/mC/caOslCzkiI8UyIo6NB
dgDVOAtUjin60AakzIk28G35nfrUlsJtAdNtLdje2Lwt7p38ZoKB+oAQUehUhPG0oD3FBHGrRKIp
A02+I8/0tiC3+pZjSQrM8FTa6kfxdZwOD6BVpZExStQBFSh7agorDTO7CoFOOUqAaiv+J2jVfQ49
txV3LU2r874cYCC8lvfLx8XctbujWyuzxgb7E087lSBwC6a9w1g9k9NAE5B9FYI4ZyF0ifgp0KAV
psFNG1OH0Ad7ZG4PsEP7oXzgWuoDZW9j20HNCQ0r9oTf2Y9Az0hSIXhAEPUiTGUWxBhHo5MwiWUI
846kP2g/2qdwWvHQYomVD0XTS7wKhLZAg/hbNXS0Hjq72A0NjeIkyBM4sK0NLEnzKCAhFUzDWj8l
8aYt+wjGIb52uS9ajoaH+y3gzmy+erEpG7cyvt4q/yDvxRQjclIE3MaIFCUxVwFnkmQgd2Wm/UrW
LdNlp8U6Cx/urLPXH2t3sXH5CgLVAdCOpiYOc8YDTkDpgNUOkyDP0yAnoUrTjBOpT5K5dxWdYrdt
56rRssNzTJFodoDyvy5mdXrLGqRJYVJTG97K0URgYhDk8LIZRLwAhBIWGCNNQhBU0IifJ9dtOOly
Dqveem5zDkN4FBW80cYDGz6eefWpV10TwOxPcxYbzMGXozrBYT1LGmQ5gdmVKk5j9v3XBPVLz+Xy
8KRWEcKjO84yf89tjpsc1OWtvrfR+KrkQJwlOS4FkmBO8QivrRGQStNEgvIJ39KT/Fg3NXQMU/3W
aULUIlGD4Nd0qboGbX/5+oxZYPfRb7lNporqQ5akMuRo9uQWTMhmRIcjBQRUZXLYVqU5Kb6opaKO
G8dDQs9tg2ppmNim1Z0M8mbcRJ6kEfxTEsg8RLcwRKnn3AQyCeELZNaQmZ90z7Sr3WVaHFqglboX
jTwYG8V1E4MTRRwD8HmFJ5eEKehqGiMfMYwNI9i0BgFciAhB6insvPykOIPjOqnDuD5M4KEx8+DG
EvByX7zsLnE4s5tuBqJ1BOsT5T0L/axVigonbEnEpGEWNeLu9wtxa1eyrfatwemleN7za69Mp2Fq
EJk5s/AnJKZBQnMR5ApznusIOqnhVr9XRqPutpYX4eYGK/6UV+fr1hBepcWJjeQiMqBuI3AJyMso
boG+FMEBCBIvxkr+oH+xM+FcNtwWtHjcKL2LB0lv8tu3+bp0sEww/EZG1kTHkX+FsZJaggQPW3ea
aal01khp7xTjcnDfxkF518h9NF88bLuRI85sBUOYwcZOIxFkTIEIpDgIEywNg5SAmm9ALMyOOwTv
SvU8808dGzpeznbIh7dvz8/Q+xfAc1o8Pa3852JW+nf/+sv1F9C9Xl6XmNemXPnr4vWxtND76y+w
QdYvLmxb18XqrynsWNOX+ezCrwAkq0iY6T18X5cXPtn/cFWubVqO+nO34veKJz9WPPyx1yroAVsf
3uiDqtdWHxOSfmOTvE9j/6Z8dPr3BqiuFk//+igV4Zvlg7+VmS78yXJdPF2yiPfU2H8tV/NZuVhf
0hDOofFZxH4591df0R96Nl2+rafA29vCWgihxtklZSGScfXLufcH7F/F3VMJhSAD26JpT/f9r/By
XS4uQ6J6enxGBZS7rQw90aPxGaNuZZdkeEbgI6fCXtQ/kxqq870b0x9cffAnf14bv+P5NLiZfIxH
3uXu6SKtX3sWTecBNHB/VQmS5y3EsN/wsZf2fYwRxqm5WoMMsGorlyophkg6t37hxx6qFLekK5uW
p/qPVQetZECKisQCyOy4djwcDruhl9WSPhx4C1hMlcd0s2yuemTs7fmtHX2A1yrT2zuPJDC1atIz
6CUQe8vZeStpSKBZmz82pD5M6mI2w2yFPjQCbWJ7U+LcqxzuB1dHmQhBHBl6v936vw0m/mOVGxSK
vl/OmmMC5wT2Qjupy78U2GHfyu/QBkv4MX7iX4Go1cEyjNo4Ho2u0uPdK4TsyfGG9KzAMKrz7n6A
aTMunxG9clI8QmNpd8nAQOUw4/dHt6Mj8xb0/aF3+/sIDiL/BQfDprdtpYXeBdJJnA79/sf4Jusu
FYaBjb3bNayw92YYw00F9r6p7YN4Yo7wKnFw/yjvcDaO7ah0dqwtdTrN4kn8HgNRjyLpYBz3zTu0
EYN+nU5Hgw9Dk8EM6360hm0RSCfm8+R4mYggEyLpxw+D9Co7zkLEYbSe7TbrI+Jhd6kkxM6qd6Pn
atZ0z0No1jfss5OrSTzy3x3ZHu9XpL/6MK/fVs4qq1bXhtue6MOp4P0HUEsDBBQAAgAIAFSQ/EaC
fV0QcgEAAMADAAApABwAZmFzdC9yZXBsYWNlZC9wcmVmZXJyZWQtd2lkdGhzLXN0ZGVyci50eHRV
VAkAAzAmuFUwJrhVdXgLAAEE9QEAAARQAAAAnZFbT8IwGIbv9yt6ZRjxYie2tTFegEIwxpBI5JJ8
rC00jnbpOpR/72DCOk8kXi1tn/fpu68+Qsh79700WqWBz9DD84iQu/GEkCdFWd9aD/eGjeq9GeiS
aUJyBfTmeDxhZrif0hfQAqS57VWyFGvJKBLSXH81XqMfjrsGlClZmivXCc7lAHt89UeZDUias09N
7yj+d4tnA6YqzyXCtgSNQvZHieLwHeYqe+2MwHWidsgDxuGS4rDRaFxn0EbjIMaXonUithIRtfs2
RLueaCg29R8mp8QAkixNrMQsB0lIpraFyNlUzjeaAZ1ui9yyPCq5fhQ7dpwbq3WppUtjfkn3u8p+
tYa9AwN918GnG+IwSSC0sIXSr7koDSG6+u7vSHzvU4J5kAxCtJiPCTFH4l4avZ+p+u16OyXoAfZb
OPN4A78ZPv+NDw58wjnHIV/hFGO0LBr5cqXo3vHDDpAE0AKl0VVmlkIK4/iRzVGeYXSmQBvnA1BL
AwQKAAAAAACDkPxGAAAAAAAAAAAAAAAADQAcAGZhc3Qvc3RvcmFnZS9VVAkAA4UmuFWMJrhVdXgL
AAEE9QEAAARQAAAAUEsDBBQAAgAIAIOQ/EbMuPimoQEAAAAEAAAyABwAZmFzdC9zdG9yYWdlL3Nl
cmlhbGl6ZWQtc2NyaXB0LXZhbHVlLWNyYXNoLWxvZy50eHRVVAkAA4UmuFWFJrhVdXgLAAEE9QEA
AARQAAAAnZFdb9sgGEbv+RVcTUlVTf7AX2jaRZo1ylRV0Rq1lxGGlwTVAQvjbvn3c+w1JuvaSLux
DZzn8BjuDeaWNTtcmS2WptWie1o8b/f1D9AC7NoC0CIlJPmMUOOEaR3tP8BaikKMcfArDGIepFEI
+PvDDaXz2wWl90bAlTeeHRzcdHMrZhuwlFaGiS/98gLc7LAUj8wqpt3XSasbtdUgsNLu+m/jNf7H
8rkBc6Mb92mKotdypcwCWX5QZse0qOCPZtKL/7vFg2OubU4l4rFESWL4oER9fM8qw5/PjmCKyHjI
MUh2SXGcGDRTlIxREqXFpWiXSL0EEX7fgRjHC8vqXfeH2SkhE55nXmJVMU0pN/taVbDU650FJpb7
uvIsd0Zv79QL9OcGnS73dHkqL+neV/m3NrBz5tjVFBWvO4g8yVjsYU/GPleqcZTa9q3/TBIGg4SE
JMiSGD+tbyl1PfFNO3tYme7uJi9GiSMcjjAP5AD/dHL9Hh8d+UxKWcSyLPKiwJt6kG9KIw4ojM+A
LGIj0DjbcrdRWjkUEp8Tkhf4RDHrEPoNUEsDBBQAAgAIAIOQ/Eaf8BM1cgEAAMADAAAvABwAZmFz
dC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLXN0ZGVyci50eHRVVAkAA4UmuFWFJrhV
dXgLAAEE9QEAAARQAAAAnZFNa8IwHIfv/RQ5DSs79P0ljB3UKQ4ZgjKPkjaJBmtS0tTNb7/aTptu
U2GnkuT5Pfn1HxsAYH3alptagWMT8LoYQjgaTyB8E5j0tfXgqMiw2psjWRAJYSYQfqqPJ0QNjlP8
jiRDXD33Sl6wDScYMK4efxofwR/HXQNIBS/Ug2k453IJDS2a3CizRRxn5FvTq8X/brFQSJXFpYTb
lkg8l9wokZ++g0yku84ITMNrh+wSiu4pThuNxjT8Nuo5QXwvWiUCLeFhvW9DtOuJRPm2+sPwkqB+
GoVaYp4hDmEq9jnLyJQvt5IgPN3nmWaZCb6ZsQOp50YqXaTpooDe011X6a/WsCOkUN804vMNOPJD
5GrYSshdxgoFoSx/+zsS22oknu1Zoe+C1XIMoaqJF67kcS6qt+sdBMMn2G7h1KIN/KHo8hrvnPiQ
Uhq7NImjOAbrvJGvE4GPhu12gNBBLVAoWaZqzThThu3pHKZpDC4Uksr4AlBLAwQKAAAAAACCkPxG
AAAAAAAAAAAAAAAACwAcAGZhc3QvdGFibGUvVVQJAAOEJrhVjCa4VXV4CwABBPUBAAAEUAAAAFBL
AwQUAAIACACCkPxGd3STO5AAAAD6AAAAOAAcAGZhc3QvdGFibGUvYW5vbnltb3VzLXRhYmxlLXNl
Y3Rpb24tcmVtb3ZlZC1jcmFzaC1sb2cudHh0VVQJAAOEJrhVhCa4VXV4CwABBPUBAAAEUAAAALXO
vQqDMBRA4b1PcTcnmx8pgnPtJC2EdipFYnKrAZsrN5Hi29eX6HqW77TG3EwDFxtm9JAJGK2HQjwS
chLDGmY/UBZdGNjyJjoakzgHO0ZKOTiDC3Hey/pZDEaPfGfEXkt1KmVdalVKVdVa9fhNSlZHxzZN
RQPPljkS6BdcCdLqJnjvPhCDD4wuE2/NnycOP1BLAwQUAAIACACCkPxGdJ41oXEBAADAAwAANQAc
AGZhc3QvdGFibGUvYW5vbnltb3VzLXRhYmxlLXNlY3Rpb24tcmVtb3ZlZC1zdGRlcnIudHh0VVQJ
AAOEJrhVhCa4VXV4CwABBPUBAAAEUAAAAJ2RT0/CMBiH7/sUPRkwHrYO2doYD4gSjDEkEDmSd/0D
jaNduqLy7R0MWFGBxNPS9vk9/e1thBAKv6IQR8BxJNDz+IHS/tOA0lfDxbW37q2deKj2RmBLYSnN
DfC77fFAuN56yN/AKtDuvrXSpZprwZHS7uan8Qb9cXxsQMzo0l21A3woR0QoszNlFqB5Lnaa1lb8
7xZjB25VHkrEzYRwJxZnShSbby837P1oBO2g0yhASLik2GzUmnZw20Qz3CWXolWi6yU63O9bE816
YKFYVH+Y7BOYMJYmXmKUg6aUmWWhcjHUk4UVwIfLIvcsL0bPX9SH2M5NVLrU06VdeUl3WuW/Ws32
wcF1OyD7G2LMEog9bGrse65KR6ld/fYfSaJwJ+mKJLmN0XTyRKnbEo/a2fXIVG/X+jCKb+CogVko
a/jTyckpHm/4REpJYpmRlBA0K2r5LDN8HUTxEZBgaIDS2RVzM6WVC6KOz3HJCDpQYF3wDVBLAwQK
AAAAAABakPxGAAAAAAAAAAAAAAAAHQAcAGZhc3QvdGFibGUvYm9yZGVyLWNvbGxhcHNpbmcvVVQJ
AAM8JrhVjCa4VXV4CwABBPUBAAAEUAAAAFBLAwQUAAIACABakPxG5dQnW5AAAAD6AAAARgAcAGZh
c3QvdGFibGUvYm9yZGVyLWNvbGxhcHNpbmcvZHluYW1pYy1ib3JkZXItd2lkdGgtY2hhbmdlLWNy
YXNoLWxvZy50eHRVVAkAAzwmuFU8JrhVdXgLAAEE9QEAAARQAAAAtc6xDoIwEIDh3ae4zQnbgoaE
WZyIJo1OxpDSntAEOXJXYnh7eQnXf/n+2tqbreDi4ogBEgGjC7BXD0EW1S1xDB0l1cSOHa+qoV7U
Obp+IknRW5yJ01aWz2xxCsh3RmxzbU6ZLrPcZNoUR1O2+BWji4NnJ8O+gmfNPBHkL7gSyOIHeG8+
EEOIjD4Rr9WfJ3Y/UEsDBBQAAgAIAFqQ/EYV2K4QcgEAAMADAABDABwAZmFzdC90YWJsZS9ib3Jk
ZXItY29sbGFwc2luZy9keW5hbWljLWJvcmRlci13aWR0aC1jaGFuZ2Utc3RkZXJyLnR4dFVUCQAD
PCa4VTwmuFV1eAsAAQT1AQAABFAAAACdkU9vgjAchu98ip4WNR4ofwSaZQd1GhezmGjm0RTaaiO2
pFQ3vv1QVMo2NdmJtH3epy+/QgCA/QVtG0c9B1LwNh8gNByNEXqXhHaMdb/QdFDuzbDKqUIolZg8
n47HVPeLCfnAimOhX1p7kfO1oARwobs/jV3wx3HTABIpcv3UtpxruTCwWXynzAYLktKzpnUS/7vF
XGO9z68l3LpE7Ln0Tons+O2nMtk2RtC2vHrILmX4keK4UWnall9HPacXPYqWiZ6R8IjZtyLq9Vjh
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
NQJTDTQIwxGYp/C8IekBq6JE/5aOeMN1eojLdv+2XKL3b0BzkLy8bNkySTP29JOt82+QUDava8pX
kW1Znrw+ZzIweP4NG2RZcCPbmifbf6bYsaabRXrDjOKd9KCYzvCbZzdMO365zXKZNKB8X634Enrt
Y+jxn6NWoQdkfXQTDIGosTm2y51fq1N5HLJx9lzp3zGgRquXn4xMwqlkPWf7O9IbNlnnyUvXMO1r
MWSv2XaRZqu8C77m2hl2uPvpim1/kB1tOl2/5VPQ9raSejTUmHZ1AwzRsGPpn66Ur9i/kqeXDEiI
gD1q/drosR8ozLNVF6yUNuwA/KgqSBXFq6OKutqgo+FVpTIg6rigSGHKOOr1R3ds8veXiLU8j/3x
5MG7VbqHpw20LFaCHiMPS5pr2xyH+rYJWBeOPSDQhTQQPvfsQbcyf0bxxbYF1jEGSlhyrTiWVpjy
hT1s/QMu0IfK53v2uT9hz0WiNyCfrdM6NbpxBrSD9oEDzdIrAhWuDdDdh7sihvmUpCmlymKgjJQ2
RyNypQykvTjz6A0bgWto6QgxUIbe7e0oYOf7C/uPOdyBdhLyJLlqhTbRYfd/3mL3YxsaCZlVsBES
Wz9AJ5CRWe/BG4ftFJBr5lC5zzELGLtELFYIFtxUUutNojOgNjXra/ZEN1VD2X9toNzSQet0GnoT
7wIBhoklC9D+0OtFF2AtQxDW2/7dIAoxF9ofuushrJPor8mFDjBFAfpw1w9G4XkSLM4HylKub0Yx
zc5AutgPlHLFLLMlRTVsf4D1Fxb4ZDTxbtnFkb22ewXoHwwz8G1bWQ/FOpCPww1aX0xR/gNQSwME
FAACAAgAhJD8Ruy+hcjuQwAASBgBAFEAHABmYXN0L3dyaXRpbmctbW9kZS9wZXJjZW50YWdlLWhl
aWdodC1vcnRob2dvbmFsLXdyaXRpbmctbW9kZXMtcXVpcmtzLWNyYXNoLWxvZy50eHRVVAkAA4gm
uFU8JrhVdXgLAAEE9QEAAARQAAAA7F1bc9u4kn5e/go8nJojJaFMALxXNlW6Znzi27FsZ2qnUiyQ
BC1uKFJDUo7177cB6kJdHIczOTOzkZWqyCKA7q8b3Y0GCJBXeRbwonDR6jOYT2fXPA15fpNzjn51
TF2zPylXrJxsKsHn5C5L5lNenNxdnt2eD09enWy3VE5DnpZxFPPcPURZueN5EWfphqim9LOQo5vF
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
ecAsdskJZdiHHk2kEhJ305RO/FZS4+pcr4+F9BzUyyWo3uD+lF2d2fyuJKzozq7Xcjgn5ftX/wJQ
SwMECgAAAAAA9oz8RgAAAAAAAAAAAAAAAAUAHABodHRwL1VUCQAD0CC4VYwmuFV1eAsAAQT1AQAA
BFAAAABQSwMECgAAAAAABY38RgAAAAAAAAAAAAAAAAsAHABodHRwL3Rlc3RzL1VUCQAD6SC4VYwm
uFV1eAsAAQT1AQAABFAAAABQSwMECgAAAAAABY38RgAAAAAAAAAAAAAAABAAHABodHRwL3Rlc3Rz
L21pc2MvVVQJAAPpILhVjCa4VXV4CwABBPUBAAAEUAAAAFBLAwQUAAIACABskPxGFTU1knoAAAC8
AAAAKgAcAGh0dHAvdGVzdHMvbWlzYy94c2x0LWJhZC1pbXBvcnQtc3RkZXJyLnR4dFVUCQADXCa4
VekguFV1eAsAAQT1AQAABFAAAACNjkEOwyAMBO95hT9AIO2hFb8hxFUsGYyMkfr8EuUD1V5WO4fZ
LKURJyOpgKqiET7ECKdZi95vj9caZrb4DiH4Qj17xS5DM3b/7WxuT4ej0kTNDaV1bsBUEZ6AjAWr
wU2XSeJdIcKoaZ8aE2BJx3+6Kn3k87qXLDEvP1BLAwQKAAAAAAD3jPxGAAAAAAAAAAAAAAAAFAAc
AGh0dHAvdGVzdHMvc2VjdXJpdHkvVVQJAAPRILhVjCa4VXV4CwABBPUBAAAEUAAAAFBLAwQKAAAA
AAD2jPxGAAAAAAAAAAAAAAAAKgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5
UG9saWN5L1VUCQAD0CC4VYwmuFV1eAsAAQT1AQAABFAAAABQSwMEFAACAAgAYpD8RmOqrGyCAAAA
qAAAAEAAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtYWxs
b3dlZC1zdGRlcnIudHh0VVQJAANHJrhV0CC4VXV4CwABBPUBAAAEUAAAAC2NQQrDMAwE73mFXhA7
vaT4FYW+ILgbYlAsIyml/n1NKXtahtnNcrbCmxepBFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFL
dVR//vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTx
mr5QSwMEFAACAAgAYpD8RmOqrGyCAAAAqAAAAFIAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRl
bnRTZWN1cml0eVBvbGljeS94c2wtdW5hZmZlY3RlZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0
VVQJAANHJrhV0CC4VXV4CwABBPUBAAAEUAAAAC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml
/n1NKXtahtnNcrbCmxepBFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw
74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgAYZD8
RmBLZhCRAAAA+wEAAEUAHABodHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQteHNsLWRvY3Vt
ZW50LXNlY3VyaXR5T3JpZ2luLXN0ZGVyci50eHRVVAkAA0UmuFXRILhVdXgLAAEE9QEAAARQAAAA
7Y4xDoMwDEV3TuELhASWVplh6NKeAQVTIpkksp0Kbl869AYdq7++r/dC3kqkSWNOgMyZPSyREFbV
4q3t+kvrznX+6pyzgqFy1MPuImYY77dxMLuQmXOoGyY1X+DB8RlTu28EFBNCD0j4IUD0IJQVUZvz
6V/Icro95EQHdK2DBSetjAITI0gtJbPi3IR/6I9D31BLAwQUAAIACAAhkPxG6op8QmEFAAAFDwAA
CgAcAGh0dHBkLmNvbmZVVAkAA84luFWFJrhVdXgLAAEE9QEAAARQAAAArVdtb9s2EP6uX0G4MLAV
k5y4cecNgQHXcZosSZ1ZTgMsSQ1aoiTWEsmRVBJn6377jrTlF8kRCmwOYJPH57k7Ho/Hi0/kI5Fj
zjVqtHIlG45zyYP5KU0JCHQmWrdkdkF1K9FahF4Kaw3nmoavAQQNG44fcEk+cCxfhSmDmBkEGJzQ
jPBco3cHB84FIaKf0keCRsy5ws/r+Zj8mROlFTrcRhXUw47jXFHmCyyJb7cEQMPfkXQcX2OpdwCD
lBJm1HYOzLQwc03kIKFpaMzBx0QFh1c8zGE/ONfJyzThSk+zpSSlM/JMghYWOEhIuwXi6QblKb5N
pyxI85DUcVeQEjHl8TTgLKJxHXeDKtETgkPYdh13BSkRlUrrSLBcImRwKnUMs16iYEVrPTPrJUoQ
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
3XSDd1sC9y+Q+vfeok4OIerDHP14j54Wj0/vA3J6AJAHKCrtpehIoRUs/j/LfwFQSwMEFAACAAgA
c5D8RlC308dfAgAAlRAAACsAHABweXdlYnNvY2tldC53cy5sb2ctMjhKdWwyMDE1LTE4MDEwMy1l
cnIudHh0VVQJAANqJrhVzyW4VXV4CwABBPUBAAAEUAAAAO2W32+bMBCA3/NXnPrSRKMYQoAkb/uR
btOmbkqq9iGKLANHY8XBzHaasb9+DklXqrZ7WdttEgIJGRvd57vzJ+Z9zw9PvPikPwR/OPYCezth
EC1gfvl6evbx7P0CKF0zXlDqXmIyk+kKzRS/bVCbD6zIBKox+K73RxcvI5epksEJpDJDGHgDB9ao
NbtCOOUCoZAGcrkpss78PvHACYaBJZ5Mp1+mD/HOUF3vOCffUywNlwXwAkolUxuCF1eg9vuBXMn1
GLrHfj+uufxjBwajQez1OueKpZiwdAXdtbRLFaZYGEiZECCYNr1xB/aoR2RWaYNr8pkniqmKnCq2
xq1UK02+VmYpCze/eUMuUGnLo0nfjYngCSnrFbtRE90tqyMHBC8QwlHgNPDpgZ2apUKWWQgAjSJ3
c15wvbyZ7h6eDqSCW3DKskzZz3svRB0Eg5r6LtUt7d2Oemszqh9DduovGuAXUmxss5B3zDAyuZwR
W/dP3JBzKYUms1Tx0miyxWTFTVkRs+QqK5kyFVnLjJaVndE1NdHGxmdCFthAj6J+jU6pZTeU/oJ2
4DeEu/2/VHKj0H+Y8NAE3ZcCiX2vUeVbjG1ug7upkBqfnmVfuwZFPx7VFHW8Ri7E5jlScS984O0P
aB3vNjzdLXQ17hpMdK85budbxQ1Smecazbg5eJVs8hwV1fwHLnodVEpae80nShUSgv4C3ii5QusA
XmLnISNGjh/Hf9vhQcPhUiU8y7B4DHb4lPoej/fiDj17cm1Htvpu9d3qu9X3/6JvW4YwDp/vhzYa
jVojtkZsjdga8Z804k9QSwMEFAACAAgAZJD8RpdDUGEIAQAAjwIAACsAHABweXdlYnNvY2tldC53
cy5sb2ctMjhKdWwyMDE1LTE4MDEwMy1vdXQudHh0VVQJAANMJrhVzyW4VXV4CwABBPUBAAAEUAAA
ALWQzW6CQBSF95PwDuyNBdoECwkLFBGaGtABNOzKOBmmU2eAGUX6Pn3P2p9lm9iYnt3NPTffuSfK
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
x/VH/+fLby/721Au5zC5d31VL8IlfqUQ1LjcQkDocT54mXPt4+qelc6/Hf1PDuck0/b3yye3+hTC
q+pFKYPOK0V0u/+Fo7/hM3MnIXum8kJEmkUzJ8c1fovijFvDjVjVuEZ2DchmDtfL7ZYumd1IlRch
89T9IvEk/0eI4l1eQhTjNwHpbXJvgmlHIwn6xV6H0+lf42FCX/z+N+9PRUMTuYgmt1Gsxg4ZTc0t
OPhDnga/0O20a9jlxhzmfNjFcv8SDhldk9fL9YNdw+YtJe5/JrC4yGhK3y6P66GHVDXG46p64VH7
FWOc8PDwijEh5Henyx7JkXBDJtO/5+LR5qML/na87n/+FpMpfsun0/7TX1/6R25Nlzdow7va/LDz
fUXm+e16ue/9BRyHK3C3w5Itod0s7CaGH87eO9yfWCav8xuQssrFAcOL/ub9sP8e3LDfbh9eCrOb
aTiyXZ0uE8ftj/4nT7ZuTBsVOdNvxvuufwQhsX995cODZip8GM+Zq+j9Ord4zbd9EGPBburXW+WO
qrmbe2J3LlBn8lSOeV+6dL7P6+McOf1Hzx9QMwz5dt0fh8A/QyiC+ryENFEgV89N3GJTh72qXjTZ
EET/yJ/eM+aFfrO8s/kVokF32H/+5qU1f1l1zZwxb2uU0VQNhW3ycoxnnnioz/0Qhetnv7/7n7lc
j5pVANqVTvekifr7383Ry/6LlWXOEtLPJv/M2Lf/evFb+4fzfw3/5F/jdLkB+ieLEVd84vM44jBL
fobiR78hCcS5scCzrLjegYAg2rqj+5gufLzqx9nLvcvbeQCHsmvhZQv04G2hDZRpVpRlCnI+8SK0
mRpXMwSed3S7hDsetzSw8oVoiraa4/eUn8PfvWT3bqRf9H3/2bOUqZ1mTJNwsn+IhtZf++sFGzgT
MK2qFy3yWX291RR0jhGBedlkC07PCPiZknl2bCaeicSQHlCxnEIk8lKFxSX210O6bH4F01WM4fys
a95Ol5f96e9On+97lqaoCuzohmZKGPVMSjayKmLqu/pMBc/7CvL4P1946myqbBylAjX1dE3785s3
Ki17Ta7brJL50EHYi2qWQrxjNbHoTUxh1FnzLYVuFG8/h4hH+u32ePHk7lc1vHVVMU8X9d1fwgW/
9D96VlxOqbdnsY2sds1rO82wWr4p75L629eS4Tj1C5i1U7PJeAciuK2XrKu3HFXxR1WMsCoT+5/2
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
6y59L9DcxVA6NbrrBv26Ke06/RrOfbPv91+jU+t07Wu07zHxvX4tN2eG9kyK6p5z9jbsuSqdefpt
i36b3NJkbhcr5b//8+4K1z4mkSNxZz59NAUhsLijI4+YKhR3eGy2tPX+u992l5epunjRdfnqdWEG
UOzG/MLozerRdZGqunqBdk/09d1Dvy+6u93z9uY4G5yj8p/sz5fJ/+V0fpoOp+t0uT3OZuzClpS5
gZcXLLe25/x2vV0Opxf31MThNr2hg1l4TJsxbt/f52k8nw/Xp+ly+DI9PV/Ob2iTeiNKemEKZvw6
3Q5Pu9s8q8eP23S6opGWmoV1u4e4qnDX5qGWv35cDkhhLEyJzbm5Hb5Mb+cv0/71cHxCU1kAGjyC
BO7BUqu+ubXbUxYDOmWTW+g+24/58h0cdDid9mdXjYAOWxL1S3iTxcPWYGf7QZbUYfGwkfOx8NI3
hsztzv789r67TMsq38/XAwKF3WiauDLUFTq/Hd7ew9R2bozL9DJfjMt3NJbqRu7kD9fpvz92R/dX
pLGWp+3uxPhtfz49H14+Ln4y+90sBrd35/JOt+mCLMBCndxcsfLp9ej0bOnKg11XaNe1huvcz6Iw
u+Q+JLwi2exl6fTcrGYR/5jvihsInZmhblHqUhqlch7kun+d3nbLfqGtVloUzdWyqNN8WrP2309X
oD2WTMF6cUe6otv07TYPdgPpVL+941Ayvf56XQ9PMDRRSYZdxNOHWzpL3Pl02O+Os+J5g3ZLb5we
XboDEp2IJZNPIZrb/Vno0dw1OUt/AOHLebMOt+93Kg9ZE6KqfO5BRHLBMgmJJtGVLkrZps1bgeK0
pR/1RqGU7SwYp9djaUvR5R3R5d3EIYoYuPfjLODewqH7bweBzPXu6fx+83KCXPNhLAWhq5Ajx3Jr
ooeigUWX3dDAIBnYeE+fAxcJuQl66CoWev6rO2m4kLHozHmJP0xX6MP1fbNsWWDWBxIZUkR61lRf
X8/Hyf0F3ZeenkXiteYKB0V4Wpaiw1mu/X2Du2dss22UYJzedpy/Rjw+NBMrdUmW77U+ch6WxhkF
E+2W8ryb/+XVBqGgd+mKuFEXqx799nb8Ml2uIGvvBWyU3JoO1+s8D+8MgZM1VELzC/4puyxUx11V
6tJ3yKUXuYwaoIcNineKuF1Z4JA+NySwTV11org4MHOOcgRS4TZtrf+/fr20UYWnuwt2dmnttHGe
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
AABQSwMEFAACAAgACY38Rg4fWdZ/AAAAjQAAACUAHABzdmcvc3Ryb2tlL3plcm8td2lkdGgtaGFu
Zy1zdGRlcnIudHh0VVQJAAPyILhV8iC4VXV4CwABBPUBAAAEUAAAAA3IzQqCQBQG0H1P8b1AoiU5
DNFGI4hW1S5a3PKDhPFOXMf+nj6X5+zHgIVDUfky94UD30ORL7MQ7xLQjP3zSG1pZyMvbuWq8or1
1izaxqPe1VETP+nEdOiUjQwPj05fEroW7SSImXw9JCFQhoSoBAN7akI/TnEjNOr8R4vZ7A9QSwEC
HgMUAAIACACDkPxGe8nPpfzaAQDrwBUADgAYAAAAAAABAAAApIEAAAAAYWNjZXNzX2xvZy50eHRV
VAUAA4UmuFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAABCkPxGAAAAAAAAAAAAAAAABQAYAAAA
AAAAABAA7UFE2wEAY3NzMy9VVAUAAwsmuFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAACCkPxG
AAAAAAAAAAAAAAAADQAYAAAAAAAAABAA7UGD2wEAY3NzMy9mbGV4Ym94L1VUBQADgya4VXV4CwAB
BPUBAAAEUAAAAFBLAQIeAxQAAgAIAISQ/EZu9EL1Oz0AADn1AAAvABgAAAAAAAEAAACkgcrbAQBj
c3MzL2ZsZXhib3gvYWxpZ24tYWJzb2x1dGUtY2hpbGQtY3Jhc2gtbG9nLnR4dFVUBQADiCa4VXV4
CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAEKQ/EZ0M0j7cQEAAMADAAAsABgAAAAAAAEAAACkgW4Z
AgBjc3MzL2ZsZXhib3gvYWxpZ24tYWJzb2x1dGUtY2hpbGQtc3RkZXJyLnR4dFVUBQADCya4VXV4
CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAIKQ/EY29XoOnwEAAAAEAAAuABgAAAAAAAEAAACkgUUb
AgBjc3MzL2ZsZXhib3gvYXV0by1oZWlnaHQtZHluYW1pYy1jcmFzaC1sb2cudHh0VVQFAAODJrhV
dXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAgpD8RtKKrQhwAQAAwAMAACsAGAAAAAAAAQAAAKSB
TB0CAGNzczMvZmxleGJveC9hdXRvLWhlaWdodC1keW5hbWljLXN0ZGVyci50eHRVVAUAA4MmuFV1
eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACDkPxG1TLrjWMfAAB8iQEADQAYAAAAAAABAAAApIEh
HwIAZXJyb3JfbG9nLnR4dFVUBQADhSa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAIOQ/EYA
AAAAAAAAAAAAAAAFABgAAAAAAAAAEADtQcs+AgBmYXN0L1VUBQADhSa4VXV4CwABBPUBAAAEUAAA
AFBLAQIeAwoAAAAAAG2Q/EYAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQQo/AgBmYXN0L2Jsb2Nr
L1VUBQADXia4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAEeQ/EYAAAAAAAAAAAAAAAAbABgA
AAAAAAAAEADtQU8/AgBmYXN0L2Jsb2NrL21hcmdpbi1jb2xsYXBzZS9VVAUAAxYmuFV1eAsAAQT1
AQAABFAAAABQSwECHgMUAAIACACFkPxGgenBuR49AAAJ9QAAUgAYAAAAAAABAAAApIGkPwIAZmFz
dC9ibG9jay9tYXJnaW4tY29sbGFwc2Uvc2VsZi1jb2xsYXBzaW5nLWJsb2NrLXdpdGgtZmxvYXQt
Y2hpbGRyZW4tY3Jhc2gtbG9nLnR4dFVUBQADiSa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAI
AEeQ/Ebl7BgCcAEAAMADAABPABgAAAAAAAEAAACkgU59AgBmYXN0L2Jsb2NrL21hcmdpbi1jb2xs
YXBzZS9zZWxmLWNvbGxhcHNpbmctYmxvY2std2l0aC1mbG9hdC1jaGlsZHJlbi1zdGRlcnIudHh0
VVQFAAMWJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAhZD8RgE81i2HPwAAUvoAAD8AGAAA
AAAAAQAAAKSBR38CAGZhc3QvYmxvY2svbWFyZ2lucy1wZXJwZW5kaWN1bGFyLWNvbnRhaW5pbmct
YmxvY2stY3Jhc2gtbG9nLnR4dFVUBQADiSa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAEWQ
/EYM/ZujbwEAAMADAAA8ABgAAAAAAAEAAACkgUe/AgBmYXN0L2Jsb2NrL21hcmdpbnMtcGVycGVu
ZGljdWxhci1jb250YWluaW5nLWJsb2NrLXN0ZGVyci50eHRVVAUAAxImuFV1eAsAAQT1AQAABFAA
AABQSwECHgMUAAIACACFkPxGg3CrBQg/AABT7gAAPAAYAAAAAAABAAAApIEswQIAZmFzdC9ibG9j
ay9taW4tbWF4LWhlaWdodC1wZXJjZW50LWhlaWdodC1jaGlsZC1jcmFzaC1sb2cudHh0VVQFAAOJ
JrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAVpD8RvfK/WRvAQAAwAMAADkAGAAAAAAAAQAA
AKSBqgADAGZhc3QvYmxvY2svbWluLW1heC1oZWlnaHQtcGVyY2VudC1oZWlnaHQtY2hpbGQtc3Rk
ZXJyLnR4dFVUBQADNCa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAISQ/EZqqkZMcjwAAIPx
AABNABgAAAAAAAEAAACkgYwCAwBmYXN0L2Jsb2NrL3Nocmluay10by1maXQtd2lkdGgtY29udGFp
bmVyLXdpdGgtZmxvYXRpbmctY2hpbGRyZW4tY3Jhc2gtbG9nLnR4dFVUBQADiCa4VXV4CwABBPUB
AAAEUAAAAFBLAQIeAxQAAgAIAG2Q/EbdklifcAEAAMADAABKABgAAAAAAAEAAACkgYU/AwBmYXN0
L2Jsb2NrL3Nocmluay10by1maXQtd2lkdGgtY29udGFpbmVyLXdpdGgtZmxvYXRpbmctY2hpbGRy
ZW4tc3RkZXJyLnR4dFVUBQADXia4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAFWQ/EYAAAAA
AAAAAAAAAAAQABgAAAAAAAAAEADtQXlBAwBmYXN0L2JveC1zaXppbmcvVVQFAAMyJrhVdXgLAAEE
9QEAAARQAAAAUEsBAh4DFAACAAgAhZD8RvVUcuP+PAAA3vIAACwAGAAAAAAAAQAAAKSBw0EDAGZh
c3QvYm94LXNpemluZy90YWJsZS1jb2xsYXBzZS1jcmFzaC1sb2cudHh0VVQFAAOJJrhVdXgLAAEE
9QEAAARQAAAAUEsBAh4DFAACAAgAQpD8RjzV0FNxAQAAwAMAACkAGAAAAAAAAQAAAKSBJ38DAGZh
c3QvYm94LXNpemluZy90YWJsZS1jb2xsYXBzZS1zdGRlcnIudHh0VVQFAAMLJrhVdXgLAAEE9QEA
AARQAAAAUEsBAh4DFAACAAgAhJD8RhOOgWbZQQAAD/gAAC8AGAAAAAAAAQAAAKSB+4ADAGZhc3Qv
Ym94LXNpemluZy90YWJsZS1uby1jb2xsYXBzZS1jcmFzaC1sb2cudHh0VVQFAAOIJrhVdXgLAAEE
9QEAAARQAAAAUEsBAh4DFAACAAgAVZD8RqAMsyVwAQAAwAMAACwAGAAAAAAAAQAAAKSBPcMDAGZh
c3QvYm94LXNpemluZy90YWJsZS1uby1jb2xsYXBzZS1zdGRlcnIudHh0VVQFAAMyJrhVdXgLAAEE
9QEAAARQAAAAUEsBAh4DCgAAAAAAeJD8RgAAAAAAAAAAAAAAAAwAGAAAAAAAAAAQAO1BE8UDAGZh
c3QvY2FudmFzL1VUBQADdCa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIADKQ/EZLCMkfhgAA
ABoBAAAmABgAAAAAAAEAAACkgVnFAwBmYXN0L2NhbnZhcy9jYW52YXMtbGluZURhc2gtc3RkZXJy
LnR4dFVUBQAD8CW4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAIKQ/EYAAAAAAAAAAAAAAAAS
ABgAAAAAAAAAEADtQT/GAwBmYXN0L2NhbnZhcy93ZWJnbC9VVAUAA4QmuFV1eAsAAQT1AQAABFAA
AABQSwECHgMUAAIACAB4kPxGCOrnhJ8BAAAABAAAPgAYAAAAAAABAAAApIGLxgMAZmFzdC9jYW52
YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBlLWNyYXNoLWxvZy50eHRVVAUA
A3QmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAB4kPxG9jzClXABAADAAwAAOwAYAAAAAAAB
AAAApIGiyAMAZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBl
LXN0ZGVyci50eHRVVAUAA3QmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACCkPxG1z/+yJEA
AAD6AAAANwAYAAAAAAABAAAApIGHygMAZmFzdC9jYW52YXMvd2ViZ2wvdHlwZWQtYXJyYXlzLWlu
LXdvcmtlcnMtY3Jhc2gtbG9nLnR4dFVUBQADhCa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAI
AIKQ/EYF+GSVcAEAAMADAAA0ABgAAAAAAAEAAACkgYnLAwBmYXN0L2NhbnZhcy93ZWJnbC90eXBl
ZC1hcnJheXMtaW4td29ya2Vycy1zdGRlcnIudHh0VVQFAAOEJrhVdXgLAAEE9QEAAARQAAAAUEsB
Ah4DCgAAAAAAepD8RgAAAAAAAAAAAAAAAAkAGAAAAAAAAAAQAO1BZ80DAGZhc3QvY3NzL1VUBQAD
dya4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAHqQ/EZhKvWZpgEAAAsEAAA4ABgAAAAAAAEA
AACkgarNAwBmYXN0L2Nzcy9uZXN0ZWQtcGVyY2VudC1oZWlnaHQtb24tcmVwbGFjZWQtY3Jhc2gt
bG9nLnR4dFVUBQADdya4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAHqQ/EbQZaNzcQEAAMAD
AAA1ABgAAAAAAAEAAACkgcLPAwBmYXN0L2Nzcy9uZXN0ZWQtcGVyY2VudC1oZWlnaHQtb24tcmVw
bGFjZWQtc3RkZXJyLnR4dFVUBQADdya4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAIKQ/EYA
AAAAAAAAAAAAAAAVABgAAAAAAAAAEADtQaLRAwBmYXN0L2Nzcy1ncmlkLWxheW91dC9VVAUAA4Qm
uFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAAskPxGZK+CU0MBAABXAwAAQgAYAAAAAAABAAAA
pIHx0QMAZmFzdC9jc3MtZ3JpZC1sYXlvdXQvY29tcHV0ZS1pbnRyaW5zaWMtd2lkdGhzLXNjcm9s
bGJhci1zdGRlcnIudHh0VVQFAAPkJbhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAhZD8Rldi
JvGdOgAAEukAADkAGAAAAAAAAQAAAKSBsNMDAGZhc3QvY3NzLWdyaWQtbGF5b3V0L2NvbnRhaW5p
bmctYmxvY2stZ3JpZHMtY3Jhc2gtbG9nLnR4dFVUBQADiSa4VXV4CwABBPUBAAAEUAAAAFBLAQIe
AxQAAgAIAEKQ/EbNMgwtRwAAAGkAAAA2ABgAAAAAAAEAAACkgcAOBABmYXN0L2Nzcy1ncmlkLWxh
eW91dC9jb250YWluaW5nLWJsb2NrLWdyaWRzLXN0ZGVyci50eHRVVAUAAwsmuFV1eAsAAQT1AQAA
BFAAAABQSwECHgMUAAIACACCkPxG1z/+yJEAAAD6AAAAPgAYAAAAAAABAAAApIF3DwQAZmFzdC9j
c3MtZ3JpZC1sYXlvdXQvZ3JpZC1lbGVtZW50LXBhZGRpbmctbWFyZ2luLWNyYXNoLWxvZy50eHRV
VAUAA4QmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACCkPxGCN0WsXABAADAAwAAOwAYAAAA
AAABAAAApIGAEAQAZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1lbGVtZW50LXBhZGRpbmctbWFy
Z2luLXN0ZGVyci50eHRVVAUAA4QmuFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAACCkPxGAAAA
AAAAAAAAAAAAHgAYAAAAAAAAABAA7UFlEgQAZmFzdC9jc3MtaW50cmluc2ljLWRpbWVuc2lvbnMv
VVQFAAOEJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAbpD8RgS1QzafAQAAAAQAAE4AGAAA
AAAAAQAAAKSBvRIEAGZhc3QvY3NzLWludHJpbnNpYy1kaW1lbnNpb25zL2ludHJpbnNpYy1zaXpl
ZC1yZXBsYWNlZC1hYnNvbHV0ZXMtY3Jhc2gtbG9nLnR4dFVUBQADXya4VXV4CwABBPUBAAAEUAAA
AFBLAQIeAxQAAgAIAG6Q/EYHYRCZcAEAAMADAABLABgAAAAAAAEAAACkgeQUBABmYXN0L2Nzcy1p
bnRyaW5zaWMtZGltZW5zaW9ucy9pbnRyaW5zaWMtc2l6ZWQtcmVwbGFjZWQtYWJzb2x1dGVzLXN0
ZGVyci50eHRVVAUAA18muFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACEkPxGbdD4P+E/AADL
+wAAMgAYAAAAAAABAAAApIHZFgQAZmFzdC9jc3MtaW50cmluc2ljLWRpbWVuc2lvbnMvdGFibGVz
LWNyYXNoLWxvZy50eHRVVAUAA4gmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACCkPxGEg/8
C3EBAADAAwAALwAYAAAAAAABAAAApIEmVwQAZmFzdC9jc3MtaW50cmluc2ljLWRpbWVuc2lvbnMv
dGFibGVzLXN0ZGVyci50eHRVVAUAA4QmuFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAABVkPxG
AAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UEAWQQAZmFzdC9kb20vVVQFAAMyJrhVdXgLAAEE9QEA
AARQAAAAUEsBAh4DCgAAAAAAVZD8RgAAAAAAAAAAAAAAABUAGAAAAAAAAAAQAO1BQ1kEAGZhc3Qv
ZG9tL1NlbGVjdG9yQVBJL1VUBQADMia4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAFWQ/EYc
2UpSkAAAAPoAAAA6ABgAAAAAAAEAAACkgZJZBABmYXN0L2RvbS9TZWxlY3RvckFQSS9yZXNpZy1T
ZWxlY3RvcnNBUEktdGVzdC1jcmFzaC1sb2cudHh0VVQFAAMyJrhVdXgLAAEE9QEAAARQAAAAUEsB
Ah4DFAACAAgAVZD8Ruj5mAdyAQAAwAMAADcAGAAAAAAAAQAAAKSBlloEAGZhc3QvZG9tL1NlbGVj
dG9yQVBJL3Jlc2lnLVNlbGVjdG9yc0FQSS10ZXN0LXN0ZGVyci50eHRVVAUAAzImuFV1eAsAAQT1
AQAABFAAAABQSwECHgMKAAAAAABtkPxGAAAAAAAAAAAAAAAADQAYAAAAAAAAABAA7UF5XAQAZmFz
dC9mbGV4Ym94L1VUBQADXSa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAG2Q/EZ6XXhwkAAA
APoAAAA3ABgAAAAAAAEAAACkgcBcBABmYXN0L2ZsZXhib3gvZmxleGluZy1vdmVyZmxvdy1zY3Jv
bGwtaXRlbS1jcmFzaC1sb2cudHh0VVQFAANdJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgA
bZD8Rjk4/sxxAQAAwAMAADQAGAAAAAAAAQAAAKSBwV0EAGZhc3QvZmxleGJveC9mbGV4aW5nLW92
ZXJmbG93LXNjcm9sbC1pdGVtLXN0ZGVyci50eHRVVAUAA10muFV1eAsAAQT1AQAABFAAAABQSwEC
HgMKAAAAAADqjPxGAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UGgXwQAZmFzdC9pbWFnZXMvVVQF
AAO4ILhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAOpD8RiGPvTgyAAAAMwAAACwAGAAAAAAA
AQAAAKSB5l8EAGZhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS1jcm9wLWJveC1zdGRlcnIudHh0VVQF
AAMAJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAfZD8RgAAAAAAAAAAAAAAAAwAGAAAAAAA
AAAQAO1BfmAEAGZhc3QvaW5saW5lL1VUBQADfSa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAI
AFWQ/EYc2UpSkAAAAPoAAAA7ABgAAAAAAAEAAACkgcRgBABmYXN0L2lubGluZS9pbmxpbmUtd2l0
aC1lbXB0eS1pbmxpbmUtY2hpbGRyZW4tY3Jhc2gtbG9nLnR4dFVUBQADMia4VXV4CwABBPUBAAAE
UAAAAFBLAQIeAxQAAgAIAFWQ/EYSya2lcQEAAMADAAA4ABgAAAAAAAEAAACkgclhBABmYXN0L2lu
bGluZS9pbmxpbmUtd2l0aC1lbXB0eS1pbmxpbmUtY2hpbGRyZW4tc3RkZXJyLnR4dFVUBQADMia4
VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAISQ/EaP0x1nej4AAEXrAABAABgAAAAAAAEAAACk
gaxjBABmYXN0L2lubGluZS9pbmxpbmUtd2l0aC1lbXB0eS1pbmxpbmUtY29udGludWF0aW9ucy1j
cmFzaC1sb2cudHh0VVQFAAOIJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAaZD8RrziXKBx
AQAAwAMAAD0AGAAAAAAAAQAAAKSBoKIEAGZhc3QvaW5saW5lL2lubGluZS13aXRoLWVtcHR5LWlu
bGluZS1jb250aW51YXRpb25zLXN0ZGVyci50eHRVVAUAA1YmuFV1eAsAAQT1AQAABFAAAABQSwEC
HgMUAAIACACEkPxGX5Xc+G5DAAAqEQEATwAYAAAAAAABAAAApIGIpAQAZmFzdC9pbmxpbmUvb3V0
LW9mLWZsb3ctb2JqZWN0cy1hbmQtd2hpdGVzcGFjZS1hZnRlci1lbXB0eS1pbmxpbmUtY3Jhc2gt
bG9nLnR4dFVUBQADiCa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAH2Q/EZy9vkOcQEAAMAD
AABMABgAAAAAAAEAAACkgX/oBABmYXN0L2lubGluZS9vdXQtb2YtZmxvdy1vYmplY3RzLWFuZC13
aGl0ZXNwYWNlLWFmdGVyLWVtcHR5LWlubGluZS1zdGRlcnIudHh0VVQFAAN9JrhVdXgLAAEE9QEA
AARQAAAAUEsBAh4DCgAAAAAAd5D8RgAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1BduoEAGZhc3Qv
bGlzdHMvVVQFAANxJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAd5D8RlOjC/W9AQAALAQA
ADEAGAAAAAAAAQAAAKSBu+oEAGZhc3QvbGlzdHMvbWFya2VyLXByZWZlcnJlZC1tYXJnaW5zLWNy
YXNoLWxvZy50eHRVVAUAA3EmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAB3kPxGFvc3EHEB
AADAAwAALgAYAAAAAAABAAAApIHj7AQAZmFzdC9saXN0cy9tYXJrZXItcHJlZmVycmVkLW1hcmdp
bnMtc3RkZXJyLnR4dFVUBQADcSa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAH2Q/EYAAAAA
AAAAAAAAAAANABgAAAAAAAAAEADtQbzuBABmYXN0L3JlZ2lvbnMvVVQFAAN9JrhVdXgLAAEE9QEA
AARQAAAAUEsBAh4DCgAAAAAAfZD8RgAAAAAAAAAAAAAAABcAGAAAAAAAAAAQAO1BA+8EAGZhc3Qv
cmVnaW9ucy9hdXRvLXNpemUvVVQFAAN9JrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAfZD8
RrDhETxrBAAAFgwAAEUAGAAAAAAAAQAAAKSBVO8EAGZhc3QvcmVnaW9ucy9hdXRvLXNpemUvYXV0
b2hlaWdodC1tYXhoZWlnaHQtbWl4ZWQtYnJlYWstY3Jhc2gtbG9nLnR4dFVUBQADfSa4VXV4CwAB
BPUBAAAEUAAAAFBLAQIeAxQAAgAIAH2Q/EZq3WaFcQEAAMADAABCABgAAAAAAAEAAACkgT70BABm
YXN0L3JlZ2lvbnMvYXV0by1zaXplL2F1dG9oZWlnaHQtbWF4aGVpZ2h0LW1peGVkLWJyZWFrLXN0
ZGVyci50eHRVVAUAA30muFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABVkPxGHNlKUpAAAAD6
AAAAOgAYAAAAAAABAAAApIEr9gQAZmFzdC9yZWdpb25zL2ZvcmNlZC1icmVhay1pbnNpZGUtYXZv
aWQtYnJlYWstY3Jhc2gtbG9nLnR4dFVUBQADMia4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAI
AFWQ/EabOGrIcAEAAMADAAA3ABgAAAAAAAEAAACkgS/3BABmYXN0L3JlZ2lvbnMvZm9yY2VkLWJy
ZWFrLWluc2lkZS1hdm9pZC1icmVhay1zdGRlcnIudHh0VVQFAAMyJrhVdXgLAAEE9QEAAARQAAAA
UEsBAh4DFAACAAgAhJD8RjRUbivfPwAAQ/8AADcAGAAAAAAAAQAAAKSBEPkEAGZhc3QvcmVnaW9u
cy9yZWdpb24tbWluLW1heC13aWR0aC1zdXBwb3J0LWNyYXNoLWxvZy50eHRVVAUAA4gmuFV1eAsA
AQT1AQAABFAAAABQSwECHgMUAAIACABtkPxGVsQ+cHIBAADAAwAANAAYAAAAAAABAAAApIFgOQUA
ZmFzdC9yZWdpb25zL3JlZ2lvbi1taW4tbWF4LXdpZHRoLXN1cHBvcnQtc3RkZXJyLnR4dFVUBQAD
XSa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAFSQ/EYAAAAAAAAAAAAAAAAOABgAAAAAAAAA
EADtQUA7BQBmYXN0L3JlcGxhY2VkL1VUBQADMCa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAI
AIWQ/EaP5P7bpkUAAEgnAQAsABgAAAAAAAEAAACkgYg7BQBmYXN0L3JlcGxhY2VkL3ByZWZlcnJl
ZC13aWR0aHMtY3Jhc2gtbG9nLnR4dFVUBQADiSa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAI
AFSQ/EaCfV0QcgEAAMADAAApABgAAAAAAAEAAACkgZSBBQBmYXN0L3JlcGxhY2VkL3ByZWZlcnJl
ZC13aWR0aHMtc3RkZXJyLnR4dFVUBQADMCa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAIOQ
/EYAAAAAAAAAAAAAAAANABgAAAAAAAAAEADtQWmDBQBmYXN0L3N0b3JhZ2UvVVQFAAOFJrhVdXgL
AAEE9QEAAARQAAAAUEsBAh4DFAACAAgAg5D8Rsy4+KahAQAAAAQAADIAGAAAAAAAAQAAAKSBsIMF
AGZhc3Qvc3RvcmFnZS9zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1jcmFzaC1sb2cudHh0VVQFAAOF
JrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAg5D8Rp/wEzVyAQAAwAMAAC8AGAAAAAAAAQAA
AKSBvYUFAGZhc3Qvc3RvcmFnZS9zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1zdGRlcnIudHh0VVQF
AAOFJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAgpD8RgAAAAAAAAAAAAAAAAsAGAAAAAAA
AAAQAO1BmIcFAGZhc3QvdGFibGUvVVQFAAOEJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgA
gpD8Rnd0kzuQAAAA+gAAADgAGAAAAAAAAQAAAKSB3YcFAGZhc3QvdGFibGUvYW5vbnltb3VzLXRh
YmxlLXNlY3Rpb24tcmVtb3ZlZC1jcmFzaC1sb2cudHh0VVQFAAOEJrhVdXgLAAEE9QEAAARQAAAA
UEsBAh4DFAACAAgAgpD8RnSeNaFxAQAAwAMAADUAGAAAAAAAAQAAAKSB34gFAGZhc3QvdGFibGUv
YW5vbnltb3VzLXRhYmxlLXNlY3Rpb24tcmVtb3ZlZC1zdGRlcnIudHh0VVQFAAOEJrhVdXgLAAEE
9QEAAARQAAAAUEsBAh4DCgAAAAAAWpD8RgAAAAAAAAAAAAAAAB0AGAAAAAAAAAAQAO1Bv4oFAGZh
c3QvdGFibGUvYm9yZGVyLWNvbGxhcHNpbmcvVVQFAAM8JrhVdXgLAAEE9QEAAARQAAAAUEsBAh4D
FAACAAgAWpD8RuXUJ1uQAAAA+gAAAEYAGAAAAAAAAQAAAKSBFosFAGZhc3QvdGFibGUvYm9yZGVy
LWNvbGxhcHNpbmcvZHluYW1pYy1ib3JkZXItd2lkdGgtY2hhbmdlLWNyYXNoLWxvZy50eHRVVAUA
AzwmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABakPxGFdiuEHIBAADAAwAAQwAYAAAAAAAB
AAAApIEmjAUAZmFzdC90YWJsZS9ib3JkZXItY29sbGFwc2luZy9keW5hbWljLWJvcmRlci13aWR0
aC1jaGFuZ2Utc3RkZXJyLnR4dFVUBQADPCa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAOyM
/EYAAAAAAAAAAAAAAAAKABgAAAAAAAAAEADtQRWOBQBmYXN0L3RleHQvVVQFAAO8ILhVdXgLAAEE
9QEAAARQAAAAUEsBAh4DFAACAAgASZD8RivMUlBBAQAAlgMAACQAGAAAAAAAAQAAAKSBWY4FAGZh
c3QvdGV4dC9mb250LXdlaWdodHMtemgtc3RkZXJyLnR4dFVUBQADGia4VXV4CwABBPUBAAAEUAAA
AFBLAQIeAwoAAAAAAHGQ/EYAAAAAAAAAAAAAAAASABgAAAAAAAAAEADtQfiPBQBmYXN0L3dyaXRp
bmctbW9kZS9VVAUAA2UmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACFkPxGCcGjPsdCAADd
+AAASgAYAAAAAAABAAAApIFEkAUAZmFzdC93cml0aW5nLW1vZGUvcGVyY2VudGFnZS1oZWlnaHQt
b3J0aG9nb25hbC13cml0aW5nLW1vZGVzLWNyYXNoLWxvZy50eHRVVAUAA4kmuFV1eAsAAQT1AQAA
BFAAAABQSwECHgMUAAIACACEkPxG7L6FyO5DAABIGAEAUQAYAAAAAAABAAAApIGP0wUAZmFzdC93
cml0aW5nLW1vZGUvcGVyY2VudGFnZS1oZWlnaHQtb3J0aG9nb25hbC13cml0aW5nLW1vZGVzLXF1
aXJrcy1jcmFzaC1sb2cudHh0VVQFAAOIJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAWpD8
Rp0JJPRxAQAAwAMAAE4AGAAAAAAAAQAAAKSBCBgGAGZhc3Qvd3JpdGluZy1tb2RlL3BlcmNlbnRh
Z2UtaGVpZ2h0LW9ydGhvZ29uYWwtd3JpdGluZy1tb2Rlcy1xdWlya3Mtc3RkZXJyLnR4dFVUBQAD
PCa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAHGQ/EY7GZXUbgEAAMADAABHABgAAAAAAAEA
AACkgQEaBgBmYXN0L3dyaXRpbmctbW9kZS9wZXJjZW50YWdlLWhlaWdodC1vcnRob2dvbmFsLXdy
aXRpbmctbW9kZXMtc3RkZXJyLnR4dFVUBQADZSa4VXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAA
AOqM/EYAAAAAAAAAAAAAAAAJABgAAAAAAAAAEADtQfAbBgBmYXN0L3hzbC9VVAUAA7gguFV1eAsA
AQT1AQAABFAAAABQSwECHgMUAAIACABKkPxGcv1l8oUAAADpAAAAJQAYAAAAAAABAAAApIEzHAYA
ZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2Mtc3RkZXJyLnR4dFVUBQADGya4VXV4CwABBPUBAAAE
UAAAAFBLAQIeAxQAAgAIAEqQ/EaJHyH+lwAAAMADAAAnABgAAAAAAAEAAACkgRcdBgBmYXN0L3hz
bC94c2x0LWJhZC1pbXBvcnQtdXJpLXN0ZGVyci50eHRVVAUAAxsmuFV1eAsAAQT1AQAABFAAAABQ
SwECHgMUAAIACABKkPxGz49mDlAAAACgAAAAJAAYAAAAAAABAAAApIEPHgYAZmFzdC94c2wveHNs
dC1jb250ZW50VHlwZS1zdGRlcnIudHh0VVQFAAMbJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAAC
AAgASpD8RoFKd61LAAAArAAAADQAGAAAAAAAAQAAAKSBvR4GAGZhc3QveHNsL3hzbHQtdHJhbnNm
b3JtLXRvLWZyYWdtZW50LWNyYXNoLXN0ZGVyci50eHRVVAUAAxsmuFV1eAsAAQT1AQAABFAAAABQ
SwECHgMUAAIACACFkPxGQ05MqIcDAAD3DwAAEQAYAAAAAAABAAAApIF2HwYAZnVsbF9yZXN1bHRz
Lmpzb25VVAUAA4omuFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAD2jPxGAAAAAAAAAAAAAAAA
BQAYAAAAAAAAABAA7UFIIwYAaHR0cC9VVAUAA9AguFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAA
AAAFjfxGAAAAAAAAAAAAAAAACwAYAAAAAAAAABAA7UGHIwYAaHR0cC90ZXN0cy9VVAUAA+kguFV1
eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAAFjfxGAAAAAAAAAAAAAAAAEAAYAAAAAAAAABAA7UHM
IwYAaHR0cC90ZXN0cy9taXNjL1VUBQAD6SC4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAGyQ
/EYVNTWSegAAALwAAAAqABgAAAAAAAEAAACkgRYkBgBodHRwL3Rlc3RzL21pc2MveHNsdC1iYWQt
aW1wb3J0LXN0ZGVyci50eHRVVAUAA1wmuFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAD3jPxG
AAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA7UH0JAYAaHR0cC90ZXN0cy9zZWN1cml0eS9VVAUAA9Eg
uFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAD2jPxGAAAAAAAAAAAAAAAAKgAYAAAAAAAAABAA
7UFCJQYAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvVVQFAAPQILhV
dXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAYpD8RmOqrGyCAAAAqAAAAEAAGAAAAAAAAQAAAKSB
piUGAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3hzbC1hbGxvd2Vk
LXN0ZGVyci50eHRVVAUAA0cmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABikPxGY6qsbIIA
AACoAAAAUgAYAAAAAAABAAAApIGiJgYAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJp
dHlQb2xpY3kveHNsLXVuYWZmZWN0ZWQtYnktc3R5bGUtc3JjLTItc3RkZXJyLnR4dFVUBQADRya4
VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAGGQ/EZgS2YQkQAAAPsBAABFABgAAAAAAAEAAACk
gbAnBgBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQteHNsLWRvY3VtZW50LXNlY3VyaXR5
T3JpZ2luLXN0ZGVyci50eHRVVAUAA0UmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAAhkPxG
6op8QmEFAAAFDwAACgAYAAAAAAABAAAApIHAKAYAaHR0cGQuY29uZlVUBQADziW4VXV4CwABBPUB
AAAEUAAAAFBLAQIeAwoAAAAAAIKQ/EYAAAAAAAAAAAAAAAATABgAAAAAAAAAEADtQWUuBgBpbnNw
ZWN0b3ItcHJvdG9jb2wvVVQFAAOEJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAgpD8RgAA
AAAAAAAAAAAAACAAGAAAAAAAAAAQAO1Bsi4GAGluc3BlY3Rvci1wcm90b2NvbC9kb20tZGVidWdn
ZXIvVVQFAAOEJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAhJD8RghIYPY0PgAArusAADoA
GAAAAAAAAQAAAKSBDC8GAGluc3BlY3Rvci1wcm90b2NvbC9kb20tZGVidWdnZXIvbm9kZS1yZW1v
dmVkLWNyYXNoLWxvZy50eHRVVAUAA4gmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACCkPxG
enMImQoDAAB/CAAANwAYAAAAAAABAAAApIG0bQYAaW5zcGVjdG9yLXByb3RvY29sL2RvbS1kZWJ1
Z2dlci9ub2RlLXJlbW92ZWQtc3RkZXJyLnR4dFVUBQADhCa4VXV4CwABBPUBAAAEUAAAAFBLAQIe
AwoAAAAAABmN/EYAAAAAAAAAAAAAAAAGABgAAAAAAAAAEADtQS9xBgBtZWRpYS9VVAUAAxIhuFV1
eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAAZjfxGAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UFv
cQYAbWVkaWEvdHJhY2svVVQFAAMSIbhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAGY38RmmU
0Y3wAAAAdwEAACoAGAAAAAAAAQAAAKSBtXEGAG1lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtc3R5
bGUtYWN0dWFsLnR4dFVUBQADEiG4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIABmN/EYNf/iE
nAEAAP4CAAAoABgAAAAAAAEAAACkgQlzBgBtZWRpYS90cmFjay90cmFjay1pbi1iYW5kLXN0eWxl
LWRpZmYudHh0VVQFAAMSIbhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAGY38Rgz65Oo2AQAA
MwIAACwAGAAAAAAAAQAAAKSBB3UGAG1lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtc3R5bGUtZXhw
ZWN0ZWQudHh0VVQFAAMSIbhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAGY38RgZw1+XSCAAA
1yIAADAAGAAAAAAAAQAAAKSBo3YGAG1lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtc3R5bGUtcHJl
dHR5LWRpZmYuaHRtbFVUBQADEiG4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAHOQ/EZQt9PH
XwIAAJUQAAArABgAAAAAAAEAAACkgd9/BgBweXdlYnNvY2tldC53cy5sb2ctMjhKdWwyMDE1LTE4
MDEwMy1lcnIudHh0VVQFAANqJrhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAZJD8RpdDUGEI
AQAAjwIAACsAGAAAAAAAAQAAAKSBo4IGAHB5d2Vic29ja2V0LndzLmxvZy0yOEp1bDIwMTUtMTgw
MTAzLW91dC50eHRVVAUAA0wmuFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACFkPxGd0xIEqUm
AADcpAAADAAYAAAAAAABAAAApIEQhAYAcmVzdWx0cy5odG1sVVQFAAOKJrhVdXgLAAEE9QEAAARQ
AAAAUEsBAh4DCgAAAAAAII38RgAAAAAAAAAAAAAAAAgAGAAAAAAAAAAQAO1B+6oGAHJldHJpZXMv
VVQFAAMbIbhVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAhZD8Rmp1evL8ewQALnYZAAoAGAAA
AAAAAQAAAKSBPasGAHN0YXRzLmpzb25VVAUAA4omuFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAA
AAAWjfxGAAAAAAAAAAAAAAAABAAYAAAAAAAAABAA7UF9JwsAc3ZnL1VUBQADCyG4VXV4CwABBPUB
AAAEUAAAAFBLAQIeAwoAAAAAABaN/EYAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQbsnCwBzdmcv
Y3VzdG9tL1VUBQADCyG4VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIABaN/EaKNuQVfwAAAI0A
AAAkABgAAAAAAAEAAACkgQAoCwBzdmcvY3VzdG9tL3plcm8tZGFzaGFycmF5LXN0ZGVyci50eHRV
VAUAAwshuFV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAAJjfxGAAAAAAAAAAAAAAAACwAYAAAA
AAAAABAA7UHdKAsAc3ZnL3N0cm9rZS9VVAUAA/IguFV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIA
CAAJjfxGDh9Z1n8AAACNAAAAJQAYAAAAAAABAAAApIEiKQsAc3ZnL3N0cm9rZS96ZXJvLXdpZHRo
LWhhbmctc3RkZXJyLnR4dFVUBQAD8iC4VXV4CwABBPUBAAAEUAAAAFBLBQYAAAAAfwB/ACs3AAAA
KgsAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>257717</attachid>
            <date>2015-07-28 18:35:07 -0700</date>
            <delta_ts>2015-07-29 14:26:09 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews105 for mac-mavericks-wk2</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>618403</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
EBJPo2BwNagfoLFVcGCzJhXGGMfuD3sZDV/Yz8tFoQaPB0uvvbrJs7bqwAUjGOfE0R9t4WwG6QTK
ZIMVSaWWwsQnIkL1/U8iEPUtZrP427YY8dntap9G+unh+hr6fwUc+vbbt838ul2t54vf57f3PwPd
3+9uQZxtQMDet3df1gmD6P5n0O22L16lmblvN18vQNm6+H61ejVn3bOEKHixhD/v16/mZPhws75P
NVe2z/OBH+ue/Hfdwy8DrmAG0niIeQfTVBqPwwL9N8ec/Xg2xzqhw/n9CK3e33z7fY6VRPDN7eW8
d928mp/f3rffXoN9csLO5nfrzdVqfXP/mqLiefZCsj+9nG9+xdS71cXtw/0F0PZwkyq0wYir15Qo
+G8vhPnTy9lPd1f3CGMHnSABfdf0hL+Z/wov79c3r5k6MWcvsNd+KHQQdo8GA70mb18QeJQNBh29
sDjUfPYxvjl9/8P8/B8f4nzi58fTj+ef3bvZ6/3PVNPt65l/M79KMvHoDwjYt9h0k/xd3f/YlJtS
gU3xduMGmqXZn/jhWqu3s7DFpoPdjDAMXQLnuG9h4NPMOuF9+v44rZaIt7O/fpr/9fR8/qUrLAUk
L29XYx6ZVNhruekL+FigYKxXL7GpVkjA7j/uXs1h6bWrFWK/zYEJTEgcfLyXs7cp7n3u8Mn8PdhG
ExSbt7Mz9+7de//IR6BwbJ3tmr5oMQjk5WRrzqBXUJbufp+ft1/mTLDJphSafjp3/u38zWf3MUxT
ABNGz2af7tvl1/kjP1TCEoe9eZGodefxSFOFbP20XiBQwFmav8kpICf6bHZxEdy5e4QAxk4kNj09
c2/iI20lg09wcfHu9Ie3McBaOLK4NGxmaHoe/37+yAQAAQKbfv7h1L8Px0mQAtbsdRIFcyw/Md1S
g0g4m2334XX3fad/oNd/Qxacvz937+aPftkT/aZr+n9zWIEPm2w/dPugmytJT+wZSK7ZvwBQSwME
FAACAAgAHZH8RqNQ4ClwAQAAwAMAACsAHABjc3MzL2ZsZXhib3gvYXV0by1oZWlnaHQtZHluYW1p
Yy1zdGRlcnIudHh0VVQJAAOqJ7hVqie4VXV4CwABBPUBAAAEFAAAAJ2RT2/CIByG7/0UnBZrPJT+
L1l2UKdxMYuJZh4NFlBihYZSN7/9qt0s3aYmOzXA8z68/QEBAM4HdEIaei6k4GU+QGg4GiP0Kgnt
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
UyvTlQuMK64c9Rz1HPU+maK49/kwa/PYszJsp2FnmtchHYdsGGqkPmVoD4V2LqGd17/m++6/2Xv6
f653Miva/P3/WO9FTTbIyq2s6U/HeZFP+/kkG8Xv7fZsVFezctiblqNT/GAPb2Nvu00YzOq83e0N
62z7WbfZ3t7DbtPE843f/IEXK8/+D3gzL4pX3Snb+a111/BYemh9i3HFL03ixI4GF5PVtexRRF69
CZqkSdcmK5pouvHrcptPIvJbNHYdIqfbNG/VNLdn3L2LlE9y0n4dB3eW5bjoLIsmZ1mXvCzHIMPJ
Y36pNO+B8KXSfMqszuu+wf4r/2UWtzPNBiEtq3K++cgz3X/c6e8nVGWX39sbCmmR7Yb6965PNEmT
rlBWNNFEE003/igf2u2qdthXLdVSrZtUrbJKN6rhrl5delAcccQRRxxxxBFHHHHEEUccccQRRxxx
xBFHHHHEEUccccQRRxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUccccQR
RxxdRFCrSxydazwccSQeNROU9UjhOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII444
4ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII/GomaAUTuE44ogjjjji
iCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogj
jjjiiCOOOOKII478ngg1UzOOOBKUwnHEEUccccQRRxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUcc
ccQRRxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUccccQRRxxxdHGOljk6
13g44ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOO
OOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjji
iCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogj
jjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII444
4ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjg6XVArHJ1rPBxxxBFHHHHEEUccccQR
RxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUcc
cXSTHYlHzQSlcBxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUccccQRR94P
qWZqJiiF44gjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII4444ogjQQlKUIJyrHOs44gjjjjiiCOO
OOKII4444ogjjjjiiCOOOOKII4444uimOlrl6Fzj4UhQgrIyccQRRxZuQSkcRxxxxBFHHHHEkaAU
jiOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOKII444EpTCccQRRxZuhVM4jgSlcBwJ
SuEUjiOOOBKUwnHEEUccccQRRxxxxJELEoVTOI444ogjjjjiiCOOOOKII4444ogjjjjiSFAKxxFH
HHHEEUccccQRRxxxxBFHHHHEEUccccQRRxxxxBFHHHHEEUccCUrhOOKII444cgIgKEFZmTjiiCOO
OOKII4444ogjjjjiiCOOOOKII4444ogjjjji6EOCWuPoXOPhiCOOOOKII4444ogjjjjiiCOOOLr1
jgSlcBxxxBFHHHHEEUcccSQohVM4jjjiiCOOOOLIiaTCKRxHHHHEEUccccQRRxxxxBFHHHmBROEU
jiOOOOKII4444ogjjjjiiCOOOOKII4444ogjjjjiiCOOOOJIUArHEUccWbgFpXAcCUrhOOKII444
4khQgrIyWZkUTlCCEpSgBCUoZ0/OnjgSlKAEJShBCUpQghKUoAQlKEEJSlCCEpSgBCUoQQlKUIIS
lKDc9uSII4444ogjjjj6pEHdu9WOzi+WG+KHG2644YabG+pGLOokIMXihhtuuOGGG2644YYbbrjh
hhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYb
brjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhRizqJCDFUixu
uOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbri5OW6aQZ1P2+SLM8/cNIfG
HIYi2w3DJ3k9KEJvOp5+kZRVm2xWs3KYVHVMPdsoQtJWMeisff/YcePVxq9h0KabeZsutp7mk1Ha
bI3URE0sr9xwww033HDDDTdiUScBWW8UixtuuOGGG264OeeAvs6LkAyr0Mxf8A87edOuJx93M2Gw
dxeh2Rp95I2CNOxM4/8KwxMHvK8Y5xLLTS8GN9xwww033HDDDTfccMMNN9xwww033HDDDTfccMMN
N9xwww03t9ONWNRJQIrFDTfccMMNN9xwww033HDDDTfccMMNN9xwww033HDDDTfccMMNN5/yF26E
rbjVvZEP/xbvuNVf4lZ/mW/1vbMev5E6/DaLz5GWVZnOtxMflB56aDofTXM0x4rLDTfccMMNN9xw
ww033HDDjb8JpE7qJCDF4oYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGG
G2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtu
uOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG264EYs6CUixuOGGG264uVFuHnBzLrFw
ww033HDDDTfccMMNN9xwww033HDDDTfccMMNN9xwww033HDDDTfccCMWdRKQYnHDDTfccMMNN9xw
ww033HDDDTfccMMNN9xwww033HDDDTfccMMNN9xwww033HDDDTfccMMNN9xwww033HDDDTfccMMN
N9xwww033HDDDTfccMMNN9xwww033HDDDTfccMMNN9xwww033HDDDTfccMMNN9xwww03YlEnASkW
N9xwww033HDDDTfccMMNN9xwww033HDDDTfccMMNN9xwww033HDDDTfccMPNVXXzkJtziYUbbsSi
TgJSLG644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjhhhtuuOGGG2644YYbbrjh
hhtuuOHGX/gQkIAEJCDHLm644YYbbrjhhhtuuOGGG2648UKFYikWNwJSLG644YYbbrjhhhtuuOGG
G2644YYbbrjhhhtuuOGGG2644YYbbrgRkGJxIyABWXmsPNxwww033HDDDTfcuHBQLMXiRkCKxQ03
3HDDDTfccMMNN9xwww033IhFnbzuJyABWXm44YYbASmWYnHDDTfccMMNN9xwww033HDDDTfccMMN
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
AAAATAEAACYAHABmYXN0L2NhbnZhcy9jYW52YXMtbGluZURhc2gtc3RkZXJyLnR4dFVUCQADlye4
VZcnuFV1eAsAAQT1AQAABBQAAADVjr0KwkAQhHufYl/AI1HEyyE2iQjRzsJCLDbJggeb23DZxJ+n
N/EtrGbmYximHBhWFlLrEuvWGdCzT5ONYamRoZbWYNcxmStVJ6+z5BKUgpqCRmLp2snftiubJXfY
HWKUuHeQH3+tl15Izz5Qgf3DgQ8jsm+gmRJgjPh2gApM2CtIICCmeQ7aYQIVQZCw/FAUsyj/4uUX
UEsDBAoAAAAAAFmR/EYAAAAAAAAAAAAAAAASABwAZmFzdC9jYW52YXMvd2ViZ2wvVVQJAAMZKLhV
MCi4VXV4CwABBPUBAAAEFAAAAFBLAwQUAAIACAApkfxGumaCjaMAAAAwAQAAPgAcAGZhc3QvY2Fu
dmFzL3dlYmdsL3RleC1pbWFnZS13aXRoLWZvcm1hdC1hbmQtdHlwZS1jcmFzaC1sb2cudHh0VVQJ
AAO+J7hVvie4VXV4CwABBPUBAAAEFAAAAMWOwQqCQBQA733Fu3lyVwWxvKZdkgIhOkTIur50QX3L
27Xw77OvCAZmjlPW9bXO4aTMiB14AkbVQSBvDtnJdjFj15KXlWlZ8Sor6p0sjOpnct7oGi2xd1LT
JJS1I4o7tmfjfzrS7HH2osA3jmSnrZskitMwysJ4v5Fm0SGMG/y4OEqFZuWGIIdHyTwTJE+4ELhF
D/Da1oAYOsOoPfGa/+9v9wVQSwMEFAACAAgAKZH8RjbWUPNxAQAAwAMAADsAHABmYXN0L2NhbnZh
cy93ZWJnbC90ZXgtaW1hZ2Utd2l0aC1mb3JtYXQtYW5kLXR5cGUtc3RkZXJyLnR4dFVUCQADvie4
Vb4nuFV1eAsAAQT1AQAABBQAAACdkU9vwiAchu/9FJwWNTuU/i9ZdlCncTGLiWYeDS2gxAoNpW5+
+1U7Ld2mJjs1wPM+vP0BAQD2J4QQ08CBFLzOBwgNR2OE3iShPWPdP2g6qPZmWBVUIZRJTJ5Ox2Oq
+4cJeceKY6GfO6Uo+FpQArjQjz+Nj+CP47YBpFIU+qFrOZdyJLRZcqPMBguS0W9N5yT+d4u5xros
LiXcpkTiufRGifz47Wcy3bZG0LW8ZsguZfie4rhRa7qW30Q9J4jvRatEYCQ8YvatiWY9VjjfVH8Y
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
RNG0s9xkTxdXMCZBr8hA8muKZqLTjMm0LxVemFwrrSvCQUUghnk7oh8vLS8O9Qmjl4oMIIujQcU6
55qx+icrVA4rvTlY4GJ1LPKB5d7o/b06QXtvUOvigS4O5TXdx6rhq3XsgiO/GZPkZQcRQcT9AbY1
9ilXJTJmq7f+C4nrdJLI9ZNo6tPt5o4xbInvGu15beq3G52MEg3s9nDmyA7+jXLzEe81fCSljENI
3ThJ6K7o5LvUiDNx/Qsg8ngPlGirDHdKKyRuMOSmMkvoK8UtEvIXUEsDBBQAAgAIAFuR/EYNJuGD
cQEAAMADAAAxABwAZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1pdGVtLWRpc3BsYXktc3RkZXJy
LnR4dFVUCQADHii4VR4ouFV1eAsAAQT1AQAABBQAAACdkU1PwjAch+/7FD0ZRjys29hLYzygQjDE
kED0SEr7LzTOdukKyrd3bOqKL5B4ato+v6e/thghFLzhIFkJEWJA9/MbQm5HY0IeNIe+Mx/uLdzU
azNqKjCEFJryq2Z7DHa4n/BHaiRV9rq3VZVcK+BIKnv53XiJftk+NiCmVWUvfC/sygWBWJ0os6GK
F/Ch6TXif7eYW2q31VeJqCsRxxGcKFEexmGh2fPRE/he3CkYCHpOcVhoNb436KI8TPJz0TqROImY
u31bopuPDS039Q3TzwQDYFnqJGYFVYQw/VLKAiZqsTFA+eSlLBzLVKv1VO6geTeodZmjyxJxTve3
yv21lr2llvZ9L/88gaeQ0sjBnrR5LmRlCTHbn/4jCQ5aSYqjPB1E6GkxIsQ2xJ2yZj/T9d/1dlry
A4w7mAWihV+tWPzFhwc+FUJkCaxwludoWbby5UrzvYejIyANaQdU1myZXUolrYdjlxsIlqMvihrr
vQNQSwMECgAAAAAAVZH8RgAAAAAAAAAAAAAAAB4AHABmYXN0L2Nzcy1pbnRyaW5zaWMtZGltZW5z
aW9ucy9VVAkAAxEouFUwKLhVdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAEGR/EZxa5a9sAEAABkE
AABOABwAZmFzdC9jc3MtaW50cmluc2ljLWRpbWVuc2lvbnMvaW50cmluc2ljLXNpemVkLXJlcGxh
Y2VkLWFic29sdXRlcy1jcmFzaC1sb2cudHh0VVQJAAPpJ7hV6Se4VXV4CwABBPUBAAAEFAAAAJ2S
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
ckFQSS9yZXNpZy1TZWxlY3RvcnNBUEktdGVzdC1jcmFzaC1sb2cudHh0VVQJAAPpJ7hV6Se4VXV4
CwABBPUBAAAEFAAAAMWOwQqCQBQA733Fu3VyVyVRvKZdkoKF6BAh6/rSBfXJ27Xw77OvCAZmjlMq
dVU5nLQdsAVPwKhb2MubQ3ayWezQNuRlZRvWvMqKOicLq7uJnLdG4UzsnTQ0Cj3PA4o7NmfrfzrS
5HHyosA3DjSPW9dxGCVBmAZRtpGkh6zGj4vCRBjWrt/n8CiZJ4L4CRcCt5geXtsYEENrGY0nXvN/
3e2+UEsDBBQAAgAIAEGR/EYq/eCQcAEAAMADAAA3ABwAZmFzdC9kb20vU2VsZWN0b3JBUEkvcmVz
aWctU2VsZWN0b3JzQVBJLXRlc3Qtc3RkZXJyLnR4dFVUCQAD6Se4VeknuFV1eAsAAQT1AQAABBQA
AACdkU9rwjAYh+/9FDkNlR2a1v4LYwd1ikOGoMyjvDaJBmtS0ujmt1+1zsZtKuxUkjy/J7++wQgh
9xNjH4eJhxl6nXQJ6fUHhLwpylrWurM3rFvujUEXTBOSKaBPx+MBM539kL6DFiDNc2MrC7GUjCIh
zeNP4yP64/jSgFIlC/PQdLxzuQBcvrhRZgWSZuykaRzF/24xMWC2xbmEX5dgbZ/dKJEfvp1MpeuL
ETSddj3kkHG4pzhsVJqmE9TRyAuTe9EyEVqJNrX7VkS9HmjIV+UfRt8JL4jTOLIS4wwkIana5CJj
QzldaQZ0uMkzyzJScjkSO3acGyt1saWLQ35Pd11lv1rF9sBAq+kk5xtYHIFvYTOl15koDCF6+9t/
IcHuSRKCHwU+mk37hJgj8SKN3o9V+XaNnRL0AOMaTl1ewR+GT6/x3oGPOOdxyBY4ThI0zyv5fKHo
3sH+BRB5UAOF0dvUzIUUxsFtmwt4mqAzBdo4X1BLAwQKAAAAAAAgkfxGAAAAAAAAAAAAAAAADAAc
AGZhc3QvZXZlbnRzL1VUCQADrCe4VTAouFV1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAGZH8Rlgq
Z3U5AAAAQwAAADIAHABmYXN0L2V2ZW50cy9kaXNwbGF5LW5vbmUtb24tZm9jdXMtY3Jhc2gtc3Rk
ZXJyLnR4dFVUCQADoie4VaInuFV1eAsAAQT1AQAABBQAAADLzS8tTvXNL0sNyVdIS8zMSU1RKAGy
MvNSFBIVShKL0lNLFMoyU8sVEksUDA0MDPQMwEDHFM7kAgBQSwMEFAACAAgAIJH8RjC1beM5AAAA
QwAAACsAHABmYXN0L2V2ZW50cy9tb3VzZS1mb2N1cy1pbWFnZW1hcC1zdGRlcnIudHh0VVQJAAOr
J7hVqye4VXV4CwABBPUBAAAEFAAAAMvNLy1O9c0vSw3JV0hLzMxJTVEoAbIy81IUEhVKEovSU0sU
yjJTyxUSSxTMDQz0DMBAR9cQzuYCAFBLAwQUAAIACAAgkfxG5669XzsAAABDAAAALwAcAGZhc3Qv
ZXZlbnRzL21vdXNldXAtb3V0c2lkZS1kb2N1bWVudC1zdGRlcnIudHh0VVQJAAOsJ7hVrCe4VXV4
CwABBPUBAAAEFAAAAMvNLy1O9c0vSw3JV0hLzMxJTVEoAbIy81IUEhVKEovSU0sUyjJTyxUSSxRM
DAwM9AzAQMfYwhTK5AIAUEsDBAoAAAAAAEiR/EYAAAAAAAAAAAAAAAANABwAZmFzdC9mbGV4Ym94
L1VUCQAD+Ce4VTAouFV1eAsAAQT1AQAABBQAAABQSwMEFAACAAgASJH8RuE7xSexAQAAGQQAADcA
HABmYXN0L2ZsZXhib3gvZmxleGluZy1vdmVyZmxvdy1zY3JvbGwtaXRlbS1jcmFzaC1sb2cudHh0
VVQJAAP4J7hV+Ce4VXV4CwABBPUBAAAEFAAAAJ2SXW/aMBSG7/0rfDVBVaF8f1jTLoAVsVUVUtG4
RE58AlaNHTknbPz7JaElYVuLtJv46zmPX9t5MjS3vNpTZXa0MLUWzdfS3BwmvCwVTDaQfZfYNjOj
ETRO5nAEZcpD02exl/rOhJAKhamRdR2wlhGXUur8cp04gshzgX57njE2f1gw9mQE3A3G0xPCrJlb
cVuBZUwZLj53ywvA6WkpfnArucYvo1pXcqdBUKnx/k/jPf3H8rWhOZWu8NOYeJdwInaK7IMwe66F
glfNqBP/d4pn5FhXlxB+HyILfPggRNm2U2Xyl6srGJOgv2QfCn5L0U6cNWMS9qWBF6W3SpuKaFAR
iGHeM9GPF5aX++aE8VtFLMI8iQcVK8U1Y81PVkoFS73eW+BieSjVwPJo9O5RHqG7N2h0yUCXRMUt
3fuq4aud2TlHfjcm6dsOSRTG3B9gG2NflKyQMVv/7b+SuM6rJPecOPTpZv3AGHbEV432tDLN242O
RooWdns4d4oz/BOL9Xu81/JxURRJBJmbpCndlmf5NjPiRFz/Cog93gMV2jrHrdQSiRsMubDIU3qh
uEVCfgNQSwMEFAACAAgASJH8RkQxSmhxAQAAwAMAADQAHABmYXN0L2ZsZXhib3gvZmxleGluZy1v
dmVyZmxvdy1zY3JvbGwtaXRlbS1zdGRlcnIudHh0VVQJAAP4J7hV+Ce4VXV4CwABBPUBAAAEFAAA
AJ2RT2/CIByG7/0UnBY1Hvqfliw7qNO4mMVEM4+GFlBihYZSN7/9qlWL29RkpwZ43oe3PxwAgP3l
2DCkoetQ8DbrIzQYjhB6l4R2jHVvr2m/2ptiVVCFUCYxeT4ej6ju7cfkAyuOhX5plaLgK0EJ4EJ3
fxq74I/jawNIpSj0U9tyL+UItFlyp8waC5LRk6Z1FP+7xUxjXRaXEl5TIvE9eqdEfvj2MplurkbQ
tvxmyB5l+JHisFFr2lbQRH03jB9Fq0RoJHxi9q2JZj1SOF9XfwjPCUiCNIJGYpphgVAqtznP6FjM
14piMt7mmWGZSLGa8B09zo1WusjQRSF7pLutMl+tZgdY407bis83RGEAsWdgC6k2GS80Qqr87b+S
OPZJkro2DDywmA8R0kfiVWi1n8rq7Vo7yckBdho4tVkNf2o2v8W7Bx4yxqKQJk4Ux2CZ1/JlIsne
crwrALq4AQqtylQvueDacnyTC1gagwuFlba+AVBLAwQKAAAAAAAckfxGAAAAAAAAAAAAAAAADAAc
AGZhc3QvZnJhbWVzL1VUCQADpye4VTAouFV1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAHJH8RtsI
00I7AAAAPwAAAC8AHABmYXN0L2ZyYW1lcy9mcmFtZS1kaXNwbGF5LW5vbmUtZm9jdXMtc3RkZXJy
LnR4dFVUCQADpye4VacnuFV1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jNKyxNLU1VSFQozy/K
VsgESiiUZ2TmpCpAxDOLFZJSM/PSFQqK8pNTi4tTU/S4AFBLAwQKAAAAAAAkkfxGAAAAAAAAAAAA
AAAADAAcAGZhc3QvaW1hZ2VzL1VUCQADsye4VTAouFV1eAsAAQT1AQAABBQAAABQSwMEFAACAAgA
JJH8RiGPvTgyAAAAMwAAACwAHABmYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UtY3JvcC1ib3gtc3Rk
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
BmaOUzXNtSngJI1FDZ6AUWoIxM0hO9EtxuqOvKhNx5JXUVPvRGlkP5HzRjU4E3snFI2RnGeL0R27
s/E/HWnyOPmoxDdamset2zROsjDOw2S/keXxocWPS+IsUizdEBTwqJgngvQJFwK3qAFe2xgQgzaM
yhOvxb/udl9QSwMEFAACAAgAKpH8RuPtAjRHAAAAaQAAACoAHABmYXN0L2xpc3RzL21hcmtlcnMt
aW4tc2VsZWN0aW9uLXN0ZGVyci50eHRVVAkAA8AnuFXAJ7hVdXgLAAEE9QEAAAQUAAAAMzRSUDCo
ME9LS7MwS00ytLC0VIgvKMkoSk1MiU/KT6nkMjRGUWBulIhQUFxSVJpcEp+Zl1nCZWiCrM40LdlS
Aa4qsaiECwBQSwMECgAAAAAAJpH8RgAAAAAAAAAAAAAAAAwAHABmYXN0L2xvYWRlci9VVAkAA7gn
uFUwKLhVdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIACGR/EbbCNNCOwAAAD8AAABSABwAZmFzdC9s
b2FkZXIvZGlzcGxheS1pbWFnZS11bnNldC1jYW4tYmxvY2staW1hZ2UtYW5kLWNhbi1yZWxvYWQt
aW4tcGxhY2Utc3RkZXJyLnR4dFVUCQADrSe4Va0nuFV1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJ
V0jNKyxNLU1VSFQozy/KVsgESiiUZ2TmpCpAxDOLFZJSM/PSFQqK8pNTi4tTU/S4AFBLAwQUAAIA
CAAikfxG2wjTQjsAAAA/AAAAUwAcAGZhc3QvbG9hZGVyL2ltYWdlcy1lbmFibGVkLXVuc2V0LWNh
bi1ibG9jay1pbWFnZS1hbmQtY2FuLXJlbG9hZC1pbi1wbGFjZS1zdGRlcnIudHh0VVQJAAOvJ7hV
rye4VXV4CwABBPUBAAAEFAAAAHMsKUnNLShRKMlXSM0rLE0tTVVIVCjPL8pWyARKKJRnZOakKkDE
M4sVklIz89IVCoryk1OLi1NT9LgAUEsDBBQAAgAIACaR/EbbCNNCOwAAAD8AAAAtABwAZmFzdC9s
b2FkZXIvcmVsb2FkLXBvbGljeS1kZWxlZ2F0ZS1zdGRlcnIudHh0VVQJAAO4J7hVuCe4VXV4CwAB
BPUBAAAEFAAAAHMsKUnNLShRKMlXSM0rLE0tTVVIVCjPL8pWyARKKJRnZOakKkDEM4sVklIz89IV
Coryk1OLi1NT9LgAUEsDBAoAAAAAAFiR/EYAAAAAAAAAAAAAAAANABwAZmFzdC9yZWdpb25zL1VU
CQADFyi4VTAouFV1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAVZH8RgAAAAAAAAAAAAAAABcAHABm
YXN0L3JlZ2lvbnMvYXV0by1zaXplL1VUCQADEii4VTAouFV1eAsAAQT1AQAABBQAAABQSwMEFAAC
AAgAZZH8RrhEW5R4RgAAni8BAEUAHABmYXN0L3JlZ2lvbnMvYXV0by1zaXplL2F1dG9oZWlnaHQt
bWF4aGVpZ2h0LW1peGVkLWJyZWFrLWNyYXNoLWxvZy50eHRVVAkAAy0ouFXoJ7hVdXgLAAEE9QEA
AAQUAAAA7F3rc9s4kv98/Cv4YWtKTiKbIAi+KpctPTPa8UNnyZ6pm0qxQBK0eKFIDUk59v711wAp
idQjNn3ZvamRXKlYJsDuXze6G90ASI3TxGNZZsurHy+Zn9PFImLnvzL3lzDnv3pJnLM4P++zRxYl
izl8ln83VNNSvkhjms82d8PPxX0SLecsu7i/uby7Gly8uygJBSmds29J+vXinqVZmMTZRefit3Fv
wtLHEEBcvJL1+dPCuyivZxdX1LuZvPZWaeTD/2EQstRuJK5UQt5Iqivqe7kF/5+jc/T+TOolPpOn
zwu26vKbqbd1TW5d0zx8ZGegqJTrbbxW+N///nf5d/RFumXZApQRulF5bzaD65b6RbrLWCqP+hum
REGS1Kc5u5iG8zUnVUGkrRht1ZSRaSuWjaxzXVVkuKYo0s1EroMHjclw8TcZKefWOZFbCA+xdgY4
FkmaVzojJHXiJH6eJ8tMvrsTQExdszodjNsDVVHbpNcfto1+r9fu9Lt6Fxk6schAkqReSrMZ8+Xp
LGXU57RUWe4PP8u/wvhHYZaLDyBd0UGSBk8eW+TAd6XDwW89p9vpO51ebzCZyK3J6PNk8Pn+rNKT
qxwU+cvg9toZXd93LkfQvd+/5f1pLitPSvnjutR3GQsk6f5KvmUP3Pbka0ZT6LNqs6V2+5MscQU5
znTw21Te/imJIcVEhH9oVy+o8EH+nXczf/kip+2ni/Tbkzy5+s/eza9/cp+QOtAp9KjQ6WTBPPAP
Tx7FQZLOxUVb6t12Jj+Prj/L08FkassBzfKLtNDjBV3mSTsL/8nEpxkLH2Z5e06fVp/CJ+a3XRjl
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
3l/aHEbY8EfDNoulTuwfk8NlIlydI/34/iK7zg+zwBl0wcItiCEmsByWirqZu1liFs1QGB6HINYP
rIiT64m5Ct/sWViZG9J/hTCuX1adWdbMrm0bjOQ5rN/B31BLAwQUAAIACABAkfxGu22J4XIBAADA
AwAAQgAcAGZhc3QvcmVnaW9ucy9hdXRvLXNpemUvYXV0b2hlaWdodC1tYXhoZWlnaHQtbWl4ZWQt
YnJlYWstc3RkZXJyLnR4dFVUCQAD6Ce4VegnuFV1eAsAAQT1AQAABBQAAACdkVtPwjAYhu/3K3pl
gHCxAzs1xgtQCYYYEoleko/1KzTOdukKun/vxpQVTyReLW2f9+m7rx4hxH3zXFxHqe8huXuYUHp9
O6X0XjEcWOtxZXBS7y1Al6gpzRWwy8PxFM24mrFH0AKkuertZCk2EhkR0gy/Gofkh+NTA8mULM1F
3/GP5UJw+fqPMluQLMcPTe8g/neLBwNmVx5LBF0JHAX4R4mi+Y5zlT2fjKDvjLohR8jhnKLZaDV9
J+yisR+l56J1IrISI2b3bYluPdVQbOs/jD8TWZhkSWwlFjlISjP1UogcZ3K51Qhs9lLklmWu5GYu
9niYG9a6xNIlET+n+11lv1rLXoOBQd9JjzdgEkNgYU9KP+eiNJTq3Xf/icRzWwl3IYjDgDwtbyk1
B+JGGl0tVP12vb0SrIG9Ds5c3sKvhi9/4/2GjznnSYRrL0lTsipa+WqtWOV4wQkQ+9ABpdG7zKyE
FMbxRjYX8iwlRwq0cd4BUEsDBBQAAgAIAGWR/EaEAEBPhjsAAArjAABGABwAZmFzdC9yZWdpb25z
L2F1dG8tc2l6ZS9hdXRvaGVpZ2h0LW1heGhlaWdodC1zaW1wbGUtYnJlYWstY3Jhc2gtbG9nLnR4
dFVUCQADLSi4VRIouFV1eAsAAQT1AQAABBQAAADsXFtz27iSfl7+CjxNyUkoEwQIXiqbUxRFZXTG
t7LkzFRNTalAErR4IokaknLs8+u3QepCUZJjZrO7sxOrUpZCAN1fN7obDYDATZaGIs8dtPmE6bzL
l8uZ6P4qgl+SQn556aIQi6LbFw9ili7n8Bv9bhKN6H8oN7yY7lrD5/xTOlvNRX7+6fri7tI/f3O+
JhRnfC6+pNnn808iy5N0kZ+757/deCORPSQA4vyFrLuPy/B8/Tw/v+Th9eilTZVhBH+TOBGZ00pc
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
FvQugMjFLVBotU/1kguuLeibXMDSBDQUVtr6AlBLAwQUAAIACABLkfxGoz71RaEAAAAsAQAAOgAc
AGZhc3QvcmVnaW9ucy9mb3JjZWQtYnJlYWstaW5zaWRlLWF2b2lkLWJyZWFrLWNyYXNoLWxvZy50
eHRVVAkAA/0nuFX9J7hVdXgLAAEE9QEAAAQUAAAAxY7BCoJAFADvfcW7edJVwRKvaZekQIgOEbKu
L11Y98nbtfDvs68IBmaOUzXNtSngJLXBHjwBo+whEDeH7ES3aNN35EWtO5a8ipoGJ0otB0vOa9Xg
TOydUDRFcp4NRnfsztr/dCTr0fqoxDcamqet2zROsjA+hEm+keXJvsWPS+IsUizdGBTwqJgtQfqE
C4Fb1AivbQyIodeMyhOvxb/udl9QSwMEFAACAAgAS5H8RjkoiWhwAQAAwAMAADcAHABmYXN0L3Jl
Z2lvbnMvZm9yY2VkLWJyZWFrLWluc2lkZS1hdm9pZC1icmVhay1zdGRlcnIudHh0VVQJAAP9J7hV
/Se4VXV4CwABBPUBAAAEFAAAAJ2RT2/CIByG7/0UnBZrdij9X7LsoE7jYhYTzTwaLKDECg1FN7/9
qnUt3aYmOzXA8z68/QEBAM4nhBCHngspeJ31ERoMRwi9SUK7xrp31LRf7k2xKqhCKJOYPJ2PR1T3
jmPyjhXHQj939qLga0EJ4EI//jQ+gj+O2waQSlHoB9ty63KB77DVjTIbLEhGL5rOWfzvFjON9b6o
S3hNidj36I0S+enby2S6bY3AtvxmyA5l+J7itFFpbCtootANk3vRMhEaCZ+YfSuiWY8UzjflH0bf
iVXgpnFkJKYZFgilcpfzjI7FfKMoJuNdnhmWiRTrCT/Q89xoqYsNXRyye7rrKvPVKnaANe7aVlLf
QN0Iewa2kGqb8UIjpPa//S0JdC4SlpAo8MBiPkRIn4kXodVxKsu36xwkJycYNnDqsAr+0Gx+jXdP
fMQYi0O6gnGSgGVeyZcrSY4W9FpA5OIGKLTap3rJBdcW9E0uYGkCagorbX0BUEsDBBQAAgAIAFiR
/EYmqQL0oQAAACwBAAA3ABwAZmFzdC9yZWdpb25zL3JlZ2lvbi1taW4tbWF4LXdpZHRoLXN1cHBv
cnQtY3Jhc2gtbG9nLnR4dFVUCQADFyi4VRcouFV1eAsAAQT1AQAABBQAAADFjsEKgkAUAO99xbt5
0lVBFK9pl6RgITpEyLq+dEF9y9u18O+zrwgGZo5TS3mVJZyUmbAHT8CoegjEzSE70a1m6jvyojEd
K95EQ4MTlVHDQs4bLdESeyc0zZGydsLojt3Z+J+OtHhcfFThGyey895tGidZGOdhUuxkRZq3+HFJ
nEWalRuDEh4180KQPuFC4FY9wmsfA2LoDaP2xFv5r7vDF1BLAwQUAAIACABYkfxGWW3rEXABAADA
AwAANAAcAGZhc3QvcmVnaW9ucy9yZWdpb24tbWluLW1heC13aWR0aC1zdXBwb3J0LXN0ZGVyci50
eHRVVAkAAxcouFUXKLhVdXgLAAEE9QEAAAQUAAAAnZFPb8IgHIbv/RScFmt2KP1fsuygTuNiFhPN
PBosoMQKDUU3v/2qdS3dpiY7NcDzPrz9AQEAzid0GA49F1LwOusjNBiOEHqThHaNde+oab/cm2JV
UIVQJjF5Oh+PqO4dx+QdK46Ffu7sRcHXghLAhX78aXwEfxy3DSCVotAPtuXW5QLfYasbZTZYkIxe
NJ2z+N8tZhrrfVGX8JoSse/RGyXy07eXyXTbGoFt+c2QHcrwPcVpo9LYVtBEoRsm96JlIjQSPjH7
VkSzHimcb8o/jL4Tq8BN48hITDMsEErlLucZHYv5RlFMxrs8MywTKdYTfqDnudFSFxu6OGT3dNdV
5qtV7ABr3LWtpL6BuhH2DGwh1TbjhUZI7X/7WxLoXCQsIVHggcV8iJA+Ey9Cq+NUlm/XOUhOTjBs
4NRhFfyh2fwa7574iDEWh3QF4yQBy7ySL1eSHC3otYDIxQ1QaLVP9ZILri3om1zA0gTUFFba+gJQ
SwMECgAAAAAALpH8RgAAAAAAAAAAAAAAABcAHABmYXN0L3JlZ2lvbnMvc2Nyb2xsaW5nL1VUCQAD
yCe4VTAouFV1eAsAAQT1AQAABBQAAABQSwMEFAACAAgALpH8RjkBy91AAAAAegAAADUAHABmYXN0
L3JlZ2lvbnMvc2Nyb2xsaW5nL3doZWVsLXNjcm9sbC1hYnNwb3Mtc3RkZXJyLnR4dFVUCQADxye4
VccnuFV1eAsAAQT1AQAABBQAAABzLUvNKwlOzUtJLQooyq+otLJKzs8rycwrzS8t9gXi1ODkovyc
HKdKhcxihbz8EoXM3IKc1FygptQULldKNAMAUEsDBBQAAgAIAC6R/EY5AcvdQAAAAHoAAAAuABwA
ZmFzdC9yZWdpb25zL3Njcm9sbGluZy93aGVlbC1zY3JvbGwtc3RkZXJyLnR4dFVUCQADyCe4Vcgn
uFV1eAsAAQT1AQAABBQAAABzLUvNKwlOzUtJLQooyq+otLJKzs8rycwrzS8t9gXi1ODkovycHKdK
hcxihbz8EoXM3IKc1FygptQULldKNAMAUEsDBBQAAgAIAC6R/EbkisdDPAAAAD0AAABAABwAZmFz
dC9yZWdpb25zL3Njcm9sbGluZy93aGVlbC1zY3JvbGxhYmxlLXNpbmdsZS1yZWdpb24tc3RkZXJy
LnR4dFVUCQADyCe4VcgnuFV1eAsAAQT1AQAABBQAAABzLUvNKwlOzUtJLQooyq+otLJKzs8rycwr
zS8t9gXi1ODkovycHKdKhcxihbz8EoXM3IKc1FygptQULgBQSwMECgAAAAAAXZH8RgAAAAAAAAAA
AAAAAA4AHABmYXN0L3JlcGxhY2VkL1VUCQADISi4VTAouFV1eAsAAQT1AQAABBQAAABQSwMEFAAC
AAgAXZH8RpZbeSiwAQAAGQQAACwAHABmYXN0L3JlcGxhY2VkL3ByZWZlcnJlZC13aWR0aHMtY3Jh
c2gtbG9nLnR4dFVUCQADISi4VSEouFV1eAsAAQT1AQAABBQAAACdkltv2jAYhu/9K3w1QVWhnA/W
1AugRWxVhVQ0LpGJP0NUY0fOFzb+/XKoSNjWIu0mPj3f49d2XgzNLC8PVJk9labSov5ampnjhBeF
gskGdt9zbJqZ0QgaJ3M4gTLFse6z2EsDf0JIicJUyNoOWMuISyl1frmOlFHquUC/vc4Ymz8tGHsx
Au4G4+kZYVbPrbgtwTKmDBdf2+UF4PS8FD+4zbnGh1Gly3yvQdBc4/2fxnv6j+VrQ30qXeKXMfEu
4ULuyN0nYQ5cCwXvmlEr/u8Ur8ixKi8h/D4EBD58EqJo2qky2dvVFYxJ0F9yBJLfUjQTnWZMwr40
9qL0VmldEQ0qAjHM2xH9eGF5cahPGHcVruOESZbEg4qV4pqx+icrcgVLvT5Y4GJ5LNTA8mz0/jk/
QXtvUOuSgS6J5C3dx6rhq3XsnCO/G5P0sgMkMfcH2MbYN5WXyJit/vZfSVznXRJwPw59ulk/MYYt
8ajRnlemfrvRyeSigd0ezhzZwT9Rrj/ivYaPpZRJBDs3SVO6LTr5dmfEmbj+FRB7vAdKtFWG21zn
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
mNyLlonQSPjE7FsTzXqkcL4p/zA6JwgJ0jgyEtMMC4RSuct5RsdivlEUk/EuzwzLRIr1hB9oNTda
6mJDF4fsnu66yny1mh1gjbu2lZxvoGEQYc/AFlJtM15ohNT+t78lgU4t8V3XiQIPLOZDhHRFvAit
jlNZvl3nIDk5wbCBU4fV8Idm82u8e+Ijxlgc0hWMkwQs81q+XElytKDXAiIXN0Ch1T7VSy64tqBv
cgFLE3ChsNLWF1BLAwQKAAAAAABJkfxGAAAAAAAAAAAAAAAACQAcAGZhc3QveHNsL1VUCQAD+ie4
VTAouFV1eAsAAQT1AQAABBQAAABQSwMEFAACAAgASZH8RnL9ZfKFAAAA6QAAACUAHABmYXN0L3hz
bC90cmFuc2Zvcm0teGhyLWRvYy1zdGRlcnIudHh0VVQJAAP5J7hV+Se4VXV4CwABBPUBAAAEFAAA
AK1OMQ7CQAzb+4p8oGRguxkm2EB0TttUnJS7VLmc1P6eg36BxbJsy/akaY1CHjUDm6kFWKLwDwIi
vlRq4oIXcsLr8MCBx1t0vNOu1Z9cvOBCxXErgsZFq00tvr2tn3U6NRUkZoYzsHDi7BDTquZdc8JB
IUDNNLZRVxCl+U/j/VHP8/dF9wFQSwMEFAACAAgASZH8RgWPVY6TAAAA0AIAACcAHABmYXN0L3hz
bC94c2x0LWJhZC1pbXBvcnQtdXJpLXN0ZGVyci50eHRVVAkAA/onuFX6J7hVdXgLAAEE9QEAAAQU
AAAA7U87DsIwDN17Cl+geGDLDBNsIDo7qSsiOXGVOBLcnkCPwIZYLNvvo/eCpjUKWdQMXIoWB0sU
/gyHiDeVlrjigYzwOF1wYn+Khmd6arMrV6u4UDV8VMHCVVsJnd4vGz3NY0yrFhtbibv+A4mZYQ8s
nDgbbOjQEbet4KBl8j2AKYjS/G2QrLWF+9uk60SG8O/7031fUEsDBBQAAgAIAEmR/EbPj2YOUAAA
AKAAAAAkABwAZmFzdC94c2wveHNsdC1jb250ZW50VHlwZS1zdGRlcnIudHh0VVQJAAP6J7hV+ie4
VXV4CwABBPUBAAAEFAAAAK3MsQ3AIAwF0Z4p/gZR2myDwAhLNkaWiTJ+yA5prrtXTCdLDrYBcje/
0FgIEB6EEySkNAK2Yq5IPO4sXLG7CM0cStGt7ssslb+wp4fK8ZEvUEsDBBQAAgAIAEmR/EaBSnet
SwAAAKwAAAA0ABwAZmFzdC94c2wveHNsdC10cmFuc2Zvcm0tdG8tZnJhZ21lbnQtY3Jhc2gtc3Rk
ZXJyLnR4dFVUCQAD+ie4VfonuFV1eAsAAQT1AQAABBQAAAC1zLENgDAMRNE+U9wKtGzjwAVZcmxk
LOZHomAD6q/3t5inmpSGg5mRK4YaAVMnFtA46YVbUqUbW3LnUNdXxMBh0cW+juJVbfvl+gBQSwME
FAACAAgAZZH8RsItgRVvAwAAmA8AABEAHABmdWxsX3Jlc3VsdHMuanNvblVUCQADLii4VTAouFV1
eAsAAQT1AQAABBQAAAC1V01v3DYQ/S86pYCZ9celcU9GbLRBgzbwuklui1lpJBHLr3Ao76qB/3tn
SMlxkmNBYAFRXHLecPjmzejm9nZ3f7f95/3D9tXXJiElaq6/Ni3RlTx7g6e9P8mQH4r0v9oNr8dk
jUxFDD6m5rq5v/udjWzf/f1Xc9bgKWCbsOP5DzfbLc9AmybgHc3b+5vtHzwxAu0odRhjc53ihE+8
ZkpejaiHMaludmB1WwXn2zGU1U5ZyK9IVcBabybrSOXDCUwFlCfGGVMKYvX5/gjbKeo0y9jqE3Zv
vUvokrxrl/9FFcw0cAjk10ew/8O5h7vPD83TU/alB0rf8yV7BnuDiuNhIBBWCXaBcL4mitwpuEfI
QT7ifsj20xywUxAjzCThPPp4wFiHUglPSlsYUB11GlXvo4WkwHVKvKjEryNzKWeM71CsB4wts0m8
WFKWwUY/eAdGvVxM6suk44HqXEXnrdjcouHdPt58eFcgSA9qnSSeVZIXr091YvNCImUoJ/ePGHvj
j4rayFxUOqGtREYSwqXIOa1b1WmLPPCOSp6v86I8nWJgA60QdU+sS6mS5uU0rHThxBfKpCsKFzWY
fDCOsg5JPYKZKuW80YuuWsiZLUlOmWAc7DqQEYf1IsvwuVwddceJT1MQtHq1WEgjhuVlSXJGX0ak
bWCx3UeEQzUXfkLNlawaqOSyj+2KoCR3OlTw6HVV0DUvs7BG7PlP9iHfMlVTDbHpWBUZaRHzZyV3
z0pRT7OGyDE1MPsp9wqtt4EF6YWUleMvArqHWIVk2QsRZ1ZO4iPPdQ6sndEOiyTLqFRutCHNaplp
R226iJW0JEtyLlA5gUqj9C365T07tXIhh7+OM+C8m62faPGDiooy6SzXzUqc2xvfHnLZGJlgB8X6
1uvlmNwvcivDtxCXlsp4yA1MxUs5k0oizffaq5aSZvp1QvCz0y98qsyStb4sOvCDLGTsKu2l1PWD
DkH2XZ5f/vrmrHGT3XHV405u6WauziWNEm+bQgaQvWWd1UT5I4OXFE7v8mfQrtOM0Ww+yjcY0uYW
EmzuPm03n3D/p06b93ntQ/5iOmu4YxMoRipWAxAhA1+8ubjkqcCJYxa76IS37EMPhrAciXU7pZl3
pXZcneNkK3l3eX51sRyqN3CYs6sTm9+VgIHwn3a9lsU5KL/89h9QSwMECgAAAAAAXJH8RgAAAAAA
AAAAAAAAAAUAHABodHRwL1VUCQADHyi4VTAouFV1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAYZH8
RgAAAAAAAAAAAAAAAAsAHABodHRwL3Rlc3RzL1VUCQADJii4VTAouFV1eAsAAQT1AQAABBQAAABQ
SwMECgAAAAAAXJH8RgAAAAAAAAAAAAAAABYAHABodHRwL3Rlc3RzL25hdmlnYXRpb24vVVQJAAMf
KLhVMCi4VXV4CwABBPUBAAAEFAAAAFBLAwQUAAIACABckfxG2wjTQjsAAAA/AAAANwAcAGh0dHAv
dGVzdHMvbmF2aWdhdGlvbi9mYWxsYmFjay1hbmNob3ItcmVsb2FkLXN0ZGVyci50eHRVVAkAAx8o
uFUfKLhVdXgLAAEE9QEAAAQUAAAAcywpSc0tKFEoyVdIzSssTS1NVUhUKM8vylbIBEoolGdk5qQq
QMQzixWSUjPz0hUKivKTU4uLU1P0uABQSwMECgAAAAAAY5H8RgAAAAAAAAAAAAAAABQAHABodHRw
L3Rlc3RzL3NlY3VyaXR5L1VUCQADKSi4VTAouFV1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAY5H8
RgAAAAAAAAAAAAAAACoAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGlj
eS9VVAkAAykouFUwKLhVdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAGOR/EZjqqxsggAAAKgAAABA
ABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLWFsbG93ZWQt
c3RkZXJyLnR4dFVUCQADKSi4VSkouFV1eAsAAQT1AQAABBQAAAAtjUEKwzAMBO95hV4QO72k+BWF
viC4G2JQLCMppf59TSl7WobZzXK2wpsXqQRV0UR7YdDh3lIIy22d48iS7jHGYMiXFu8hS3VUf/77
Q7jkHhQml2ZYMO+M+WNMXCpoJTDOIdAP2AH4NGh6Q21cJ5LKnZY50o7NrzFEm4Lsak3U8Zq+UEsD
BBQAAgAIAGOR/EZjqqxsggAAAKgAAABSABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2Vj
dXJpdHlQb2xpY3kveHNsLXVuYWZmZWN0ZWQtYnktc3R5bGUtc3JjLTItc3RkZXJyLnR4dFVUCQAD
KSi4VSkouFV1eAsAAQT1AQAABBQAAAAtjUEKwzAMBO95hV4QO72k+BWFviC4G2JQLCMppf59TSl7
WobZzXK2wpsXqQRV0UR7YdDh3lIIy22d48iS7jHGYMiXFu8hS3VUf/77Q7jkHhQml2ZYMO+M+WNM
XCpoJTDOIdAP2AH4NGh6Q21cJ5LKnZY50o7NrzFEm4Lsak3U8Zq+UEsDBAoAAAAAAGGR/EYAAAAA
AAAAAAAAAAAhABwAaHR0cC90ZXN0cy9zZWN1cml0eS9taXhlZENvbnRlbnQvVVQJAAMmKLhVMCi4
VXV4CwABBPUBAAAEFAAAAFBLAwQUAAIACABhkfxG4kKBPfsAAACFAgAARQAcAGh0dHAvdGVzdHMv
c2VjdXJpdHkvbWl4ZWRDb250ZW50L2luc2VjdXJlLXBsdWdpbi1pbi1pZnJhbWUtYWN0dWFsLnR4
dFVUCQADJii4VSYouFV1eAsAAQT1AQAABBQAAADdkL1Ow0AQhHs/xbyAfxIiAe5QFNEAKRKJAlGc
z+vcKfdj3e3J5O1xjIkIDT3ackYz3+x6+7LbPm3wvNntHh43Nd4a4+WR2nfsFaEXB4JgKOY+1mW5
WN4W1XiL+m61uikjyRQ0n0qrP6hde8fkuAwUfQqSYtkFYSkfNKtcu8lMeW/SQbtCsTUYRITzDGGM
H6gFe4Tk8O2F/EpEF7ydGK4Rqqr6E6FN1p6KOHRFlq1/jzXaEe7/9+i90hFMkWG8aCME5h49gYKV
uEg/KGZivBKi8sm0ONDIjKnxwijHEY2QRzQkRYrnNLrOGH8wuhyiDLrnSZ9VH/S5IcuyT1BLAwQU
AAIACABhkfxGhPlu2V0BAACwAwAAQwAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50
L2luc2VjdXJlLXBsdWdpbi1pbi1pZnJhbWUtZGlmZi50eHRVVAkAAyYouFUmKLhVdXgLAAEE9QEA
AAQUAAAA3ZJPS8NAEMXv+RRzj5tNbEXtKVqDB/8UjNiDeNhsps3STTZkZ0n77U3SWKwiHgXZhYV5
w7zfW4YxBvzFaFei5TeCBE+WKV9idqdofK6d0jl/Qo3CItdiZxwxQkusQes0WV4Q1byvWG5RukbR
jpdqi/ncVIQVcVUNdWS1dmtVsf6uGlEiw22NkjAPaEue7/t/CiMkOaEHlDgGFp1MwI9OziCOPX++
eEwX9wk8JGl6dZvM4DXTRm4wf4PnAqEWawRB0LvbGefR6XkQdieaXUynkx9IOmTjGtmF3fu3igr2
BS8oqNTQCguVIRBamxZzIAONq+CjF+R+IqwaUw4MxwhhGP6KkLuy3AW2XQWe78G3uFpVCJf/OjZ4
XSZloV8e0EbkFgSMTvsNASrEQfrEMTLDEsEWxukc1thRw+B5oJRdjEzIDWQohbP9NDye0f1C11WB
lY2qadBH1TSqd/DeAVBLAwQUAAIACABhkfxGOLNTgPUAAACYAQAARwAcAGh0dHAvdGVzdHMvc2Vj
dXJpdHkvbWl4ZWRDb250ZW50L2luc2VjdXJlLXBsdWdpbi1pbi1pZnJhbWUtZXhwZWN0ZWQudHh0
VVQJAAMmKLhVJii4VXV4CwABBPUBAAAEFAAAAIWQzU7DMBCE73mKeYH8tFQCckNVxAXoIZU4IA6O
s4mtOnZkrxX69qQhVPSE9jijmW9nf3irDy8VXqu6fnquShhtCY8lPhrj5InaTxwVYRQ9QTAU8xjK
PN9s77Nivk35sNvd5YFk9JrP+aC/qN07y2Q59xRc9JJC3nkxUDppVqm2i5nS0cRe20zxYDCJAOsY
whg3UQt28NHi1wv5k4jOu2FhuEUoiuJfhDYOwzkLU5clyVHpAKbAME60AQJrj15AwUpcpT8UKzHe
CUG5aFr0NDNjabwyyvmJRsgTGpIihksa3WbMG8wuiyC9HnnRV9V5fWlIkuQbUEsDBBQAAgAIAGGR
/Eav0Zz2JggAADgbAABLABwAaHR0cC90ZXN0cy9zZWN1cml0eS9taXhlZENvbnRlbnQvaW5zZWN1
cmUtcGx1Z2luLWluLWlmcmFtZS1wcmV0dHktZGlmZi5odG1sVVQJAAMmKLhVJii4VXV4CwABBPUB
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
AwAALgAYAAAAAAABAAAApIHe0AAAY29tcG9zaXRpbmcvZ2VvbWV0cnkvb3V0bGluZS1jaGFuZ2Ut
c3RkZXJyLnR4dFVUBQADaye4VXV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAB2R/EYAAAAAAAAA
AAAAAAAFABgAAAAAAAAAEADtQSfSAABjc3MzL1VUBQADqie4VXV4CwABBPUBAAAEFAAAAFBLAQIe
AwoAAAAAAFWR/EYAAAAAAAAAAAAAAAANABgAAAAAAAAAEADtQWbSAABjc3MzL2ZsZXhib3gvVVQF
AAMRKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZZH8Ru6Qsh/8OgAAlt0AAC4AGAAAAAAA
AQAAAKSBrdIAAGNzczMvZmxleGJveC9hdXRvLWhlaWdodC1keW5hbWljLWNyYXNoLWxvZy50eHRV
VAUAAy0ouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAdkfxGo1DgKXABAADAAwAAKwAYAAAA
AAABAAAApIERDgEAY3NzMy9mbGV4Ym94L2F1dG8taGVpZ2h0LWR5bmFtaWMtc3RkZXJyLnR4dFVU
BQADqie4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGWR/EZNn+BYmj4AAKrxAAAlABgAAAAA
AAEAAACkgeYPAQBjc3MzL2ZsZXhib3gvYm94LXNpemluZy1jcmFzaC1sb2cudHh0VVQFAAMtKLhV
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZZH8Rov2YAJHPQAAK+0AADMAGAAAAAAAAQAAAKSB
304BAGNzczMvZmxleGJveC9ib3gtc2l6aW5nLW1pbi1tYXgtc2l6ZXMtY3Jhc2gtbG9nLnR4dFVU
BQADLSi4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIACqR/EaIDsR7cAEAAMADAAAwABgAAAAA
AAEAAACkgZOMAQBjc3MzL2ZsZXhib3gvYm94LXNpemluZy1taW4tbWF4LXNpemVzLXN0ZGVyci50
eHRVVAUAA8AnuFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABBkfxGsqLGinABAADAAwAAIgAY
AAAAAAABAAAApIFtjgEAY3NzMy9mbGV4Ym94L2JveC1zaXppbmctc3RkZXJyLnR4dFVUBQAD6Se4
VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGWR/EZLzNyvWj4AAHjxAAAsABgAAAAAAAEAAACk
gTmQAQBjc3MzL2ZsZXhib3gvY29sdW1ucy1hdXRvLXNpemUtY3Jhc2gtbG9nLnR4dFVUBQADLSi4
VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFWR/EZ1DEfycgEAAMADAAApABgAAAAAAAEAAACk
gfnOAQBjc3MzL2ZsZXhib3gvY29sdW1ucy1hdXRvLXNpemUtc3RkZXJyLnR4dFVUBQADESi4VXV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGOR/Ea7WGZeoBgAAJu3CQANABgAAAAAAAEAAACkgc7Q
AQBlcnJvcl9sb2cudHh0VVQFAAMqKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAYJH8RgAA
AAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1BtekBAGZhc3QvVVQFAAMjKLhVdXgLAAEE9QEAAAQUAAAA
UEsBAh4DCgAAAAAAPZH8RgAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1B9OkBAGZhc3QvYmxvY2sv
VVQFAAPlJ7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAKJH8RgAAAAAAAAAAAAAAABsAGAAA
AAAAAAAQAO1BOeoBAGZhc3QvYmxvY2svbWFyZ2luLWNvbGxhcHNlL1VUBQADuye4VXV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAGWR/EaNUIuso0MAAFkdAQBSABgAAAAAAAEAAACkgY7qAQBmYXN0
L2Jsb2NrL21hcmdpbi1jb2xsYXBzZS9zZWxmLWNvbGxhcHNpbmctYmxvY2std2l0aC1mbG9hdC1j
aGlsZHJlbi1jcmFzaC1sb2cudHh0VVQFAAMtKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
KJH8RqXNFRBxAQAAwAMAAE8AGAAAAAAAAQAAAKSBvS4CAGZhc3QvYmxvY2svbWFyZ2luLWNvbGxh
cHNlL3NlbGYtY29sbGFwc2luZy1ibG9jay13aXRoLWZsb2F0LWNoaWxkcmVuLXN0ZGVyci50eHRV
VAUAA7snuFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABlkfxGhaA5tedCAADtDAEAPAAYAAAA
AAABAAAApIG3MAIAZmFzdC9ibG9jay9taW4tbWF4LWhlaWdodC1wZXJjZW50LWhlaWdodC1jaGls
ZC1jcmFzaC1sb2cudHh0VVQFAAMtKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAJ5H8Rja4
YThxAQAAwAMAADkAGAAAAAAAAQAAAKSBFHQCAGZhc3QvYmxvY2svbWluLW1heC1oZWlnaHQtcGVy
Y2VudC1oZWlnaHQtY2hpbGQtc3RkZXJyLnR4dFVUBQADuSe4VXV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAGWR/EZ/n6D2pzoAAHHcAABNABgAAAAAAAEAAACkgfh1AgBmYXN0L2Jsb2NrL3Nocmlu
ay10by1maXQtd2lkdGgtY29udGFpbmVyLXdpdGgtZmxvYXRpbmctY2hpbGRyZW4tY3Jhc2gtbG9n
LnR4dFVUBQADLSi4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAD2R/EaDgPMNcAEAAMADAABK
ABgAAAAAAAEAAACkgSaxAgBmYXN0L2Jsb2NrL3Nocmluay10by1maXQtd2lkdGgtY29udGFpbmVy
LXdpdGgtZmxvYXRpbmctY2hpbGRyZW4tc3RkZXJyLnR4dFVUBQAD5Se4VXV4CwABBPUBAAAEFAAA
AFBLAQIeAwoAAAAAAECR/EYAAAAAAAAAAAAAAAAQABgAAAAAAAAAEADtQRqzAgBmYXN0L2JveC1z
aXppbmcvVVQFAAPnJ7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZZH8RgQ/Acw/QwAANhAB
ACwAGAAAAAAAAQAAAKSBZLMCAGZhc3QvYm94LXNpemluZy90YWJsZS1jb2xsYXBzZS1jcmFzaC1s
b2cudHh0VVQFAAMtKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAKZH8RkJvMWhwAQAAwAMA
ACkAGAAAAAAAAQAAAKSBCfcCAGZhc3QvYm94LXNpemluZy90YWJsZS1jb2xsYXBzZS1zdGRlcnIu
dHh0VVQFAAO+J7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZZH8Rn43kg4MPwAA2vMAAC8A
GAAAAAAAAQAAAKSB3PgCAGZhc3QvYm94LXNpemluZy90YWJsZS1uby1jb2xsYXBzZS1jcmFzaC1s
b2cudHh0VVQFAAMtKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAQJH8Ro0ke2twAQAAwAMA
ACwAGAAAAAAAAQAAAKSBUTgDAGZhc3QvYm94LXNpemluZy90YWJsZS1uby1jb2xsYXBzZS1zdGRl
cnIudHh0VVQFAAPnJ7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAKZH8RgAAAAAAAAAAAAAA
AAwAGAAAAAAAAAAQAO1BJzoDAGZhc3QvY2FudmFzL1VUBQADvie4VXV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIABSR/EYk10iAlwAAAEwBAAAmABgAAAAAAAEAAACkgW06AwBmYXN0L2NhbnZhcy9j
YW52YXMtbGluZURhc2gtc3RkZXJyLnR4dFVUBQADlye4VXV4CwABBPUBAAAEFAAAAFBLAQIeAwoA
AAAAAFmR/EYAAAAAAAAAAAAAAAASABgAAAAAAAAAEADtQWQ7AwBmYXN0L2NhbnZhcy93ZWJnbC9V
VAUAAxkouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAApkfxGumaCjaMAAAAwAQAAPgAYAAAA
AAABAAAApIGwOwMAZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10
eXBlLWNyYXNoLWxvZy50eHRVVAUAA74nuFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAApkfxG
NtZQ83EBAADAAwAAOwAYAAAAAAABAAAApIHLPAMAZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdl
LXdpdGgtZm9ybWF0LWFuZC10eXBlLXN0ZGVyci50eHRVVAUAA74nuFV1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACABZkfxGSGhtibEBAAAZBAAANwAYAAAAAAABAAAApIGxPgMAZmFzdC9jYW52YXMv
d2ViZ2wvdHlwZWQtYXJyYXlzLWluLXdvcmtlcnMtY3Jhc2gtbG9nLnR4dFVUBQADGSi4VXV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIAFmR/EYW7vqNcQEAAMADAAA0ABgAAAAAAAEAAACkgdNAAwBm
YXN0L2NhbnZhcy93ZWJnbC90eXBlZC1hcnJheXMtaW4td29ya2Vycy1zdGRlcnIudHh0VVQFAAMZ
KLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAT5H8RgAAAAAAAAAAAAAAAAkAGAAAAAAAAAAQ
AO1BskIDAGZhc3QvY3NzL1VUBQADBii4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABOR/Ebb
CNNCOwAAAD8AAAApABgAAAAAAAEAAACkgfVCAwBmYXN0L2Nzcy9jb21wYXJlLWNvbnRlbnQtc3R5
bGUtc3RkZXJyLnR4dFVUBQADlSe4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAE+R/EZVdV06
sAEAABkEAAA4ABgAAAAAAAEAAACkgZNDAwBmYXN0L2Nzcy9uZXN0ZWQtcGVyY2VudC1oZWlnaHQt
b24tcmVwbGFjZWQtY3Jhc2gtbG9nLnR4dFVUBQADBii4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAE+R/EZHM3LOcAEAAMADAAA1ABgAAAAAAAEAAACkgbVFAwBmYXN0L2Nzcy9uZXN0ZWQtcGVy
Y2VudC1oZWlnaHQtb24tcmVwbGFjZWQtc3RkZXJyLnR4dFVUBQADBii4VXV4CwABBPUBAAAEFAAA
AFBLAQIeAwoAAAAAAFuR/EYAAAAAAAAAAAAAAAAVABgAAAAAAAAAEADtQZRHAwBmYXN0L2Nzcy1n
cmlkLWxheW91dC9VVAUAAx4ouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABlkfxGSS5xAYxC
AAAMBgEARQAYAAAAAAABAAAApIHjRwMAZmFzdC9jc3MtZ3JpZC1sYXlvdXQvY29tcHV0ZS1pbnRy
aW5zaWMtd2lkdGhzLXNjcm9sbGJhci1jcmFzaC1sb2cudHh0VVQFAAMtKLhVdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAKpH8RhyObqRxAQAAwAMAAEIAGAAAAAAAAQAAAKSB7ooDAGZhc3QvY3Nz
LWdyaWQtbGF5b3V0L2NvbXB1dGUtaW50cmluc2ljLXdpZHRocy1zY3JvbGxiYXItc3RkZXJyLnR4
dFVUBQADwCe4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIACyR/Ea8CuwRZQEAAKADAAA7ABgA
AAAAAAEAAACkgduMAwBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWVsZW1lbnQtcGFkZGluZy1t
YXJnaW4tc3RkZXJyLnR4dFVUBQADwye4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFuR/EbW
w6jqrwEAABkEAAA0ABgAAAAAAAEAAACkgbWOAwBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWl0
ZW0tZGlzcGxheS1jcmFzaC1sb2cudHh0VVQFAAMeKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAW5H8Rg0m4YNxAQAAwAMAADEAGAAAAAAAAQAAAKSB0pADAGZhc3QvY3NzLWdyaWQtbGF5b3V0
L2dyaWQtaXRlbS1kaXNwbGF5LXN0ZGVyci50eHRVVAUAAx4ouFV1eAsAAQT1AQAABBQAAABQSwEC
HgMKAAAAAABVkfxGAAAAAAAAAAAAAAAAHgAYAAAAAAAAABAA7UGukgMAZmFzdC9jc3MtaW50cmlu
c2ljLWRpbWVuc2lvbnMvVVQFAAMRKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAQZH8RnFr
lr2wAQAAGQQAAE4AGAAAAAAAAQAAAKSBBpMDAGZhc3QvY3NzLWludHJpbnNpYy1kaW1lbnNpb25z
L2ludHJpbnNpYy1zaXplZC1yZXBsYWNlZC1hYnNvbHV0ZXMtY3Jhc2gtbG9nLnR4dFVUBQAD6Se4
VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAEGR/EZfb+1XcQEAAMADAABLABgAAAAAAAEAAACk
gT6VAwBmYXN0L2Nzcy1pbnRyaW5zaWMtZGltZW5zaW9ucy9pbnRyaW5zaWMtc2l6ZWQtcmVwbGFj
ZWQtYWJzb2x1dGVzLXN0ZGVyci50eHRVVAUAA+knuFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CABlkfxGBc64Cro7AAC14AAAMgAYAAAAAAABAAAApIE0lwMAZmFzdC9jc3MtaW50cmluc2ljLWRp
bWVuc2lvbnMvdGFibGVzLWNyYXNoLWxvZy50eHRVVAUAAy0ouFV1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACABVkfxGvmniXnEBAADAAwAALwAYAAAAAAABAAAApIFa0wMAZmFzdC9jc3MtaW50cmlu
c2ljLWRpbWVuc2lvbnMvdGFibGVzLXN0ZGVyci50eHRVVAUAAxEouFV1eAsAAQT1AQAABBQAAABQ
SwECHgMKAAAAAABBkfxGAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UE01QMAZmFzdC9kb20vVVQF
AAPpJ7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAGZH8RlpSu9fgAAAATgMAADIAGAAAAAAA
AQAAAKSBd9UDAGZhc3QvZG9tL29iamVjdC1wbHVnaW4taGlkZXMtcHJvcGVydGllcy1zdGRlcnIu
dHh0VVQFAAOhJ7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAQZH8RgAAAAAAAAAAAAAAABUA
GAAAAAAAAAAQAO1Bw9YDAGZhc3QvZG9tL1NlbGVjdG9yQVBJL1VUBQAD6Se4VXV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAEGR/EYsi4WfoQAAACwBAAA6ABgAAAAAAAEAAACkgRLXAwBmYXN0L2Rv
bS9TZWxlY3RvckFQSS9yZXNpZy1TZWxlY3RvcnNBUEktdGVzdC1jcmFzaC1sb2cudHh0VVQFAAPp
J7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAQZH8Rir94JBwAQAAwAMAADcAGAAAAAAAAQAA
AKSBJ9gDAGZhc3QvZG9tL1NlbGVjdG9yQVBJL3Jlc2lnLVNlbGVjdG9yc0FQSS10ZXN0LXN0ZGVy
ci50eHRVVAUAA+knuFV1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAgkfxGAAAAAAAAAAAAAAAA
DAAYAAAAAAAAABAA7UEI2gMAZmFzdC9ldmVudHMvVVQFAAOsJ7hVdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAGZH8RlgqZ3U5AAAAQwAAADIAGAAAAAAAAQAAAKSBTtoDAGZhc3QvZXZlbnRzL2Rp
c3BsYXktbm9uZS1vbi1mb2N1cy1jcmFzaC1zdGRlcnIudHh0VVQFAAOiJ7hVdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAIJH8RjC1beM5AAAAQwAAACsAGAAAAAAAAQAAAKSB89oDAGZhc3QvZXZl
bnRzL21vdXNlLWZvY3VzLWltYWdlbWFwLXN0ZGVyci50eHRVVAUAA6snuFV1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAAgkfxG5669XzsAAABDAAAALwAYAAAAAAABAAAApIGR2wMAZmFzdC9ldmVu
dHMvbW91c2V1cC1vdXRzaWRlLWRvY3VtZW50LXN0ZGVyci50eHRVVAUAA6wnuFV1eAsAAQT1AQAA
BBQAAABQSwECHgMKAAAAAABIkfxGAAAAAAAAAAAAAAAADQAYAAAAAAAAABAA7UE13AMAZmFzdC9m
bGV4Ym94L1VUBQAD+Ce4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAEiR/EbhO8UnsQEAABkE
AAA3ABgAAAAAAAEAAACkgXzcAwBmYXN0L2ZsZXhib3gvZmxleGluZy1vdmVyZmxvdy1zY3JvbGwt
aXRlbS1jcmFzaC1sb2cudHh0VVQFAAP4J7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgASJH8
RkQxSmhxAQAAwAMAADQAGAAAAAAAAQAAAKSBnt4DAGZhc3QvZmxleGJveC9mbGV4aW5nLW92ZXJm
bG93LXNjcm9sbC1pdGVtLXN0ZGVyci50eHRVVAUAA/gnuFV1eAsAAQT1AQAABBQAAABQSwECHgMK
AAAAAAAckfxGAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UF94AMAZmFzdC9mcmFtZXMvVVQFAAOn
J7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAHJH8RtsI00I7AAAAPwAAAC8AGAAAAAAAAQAA
AKSBw+ADAGZhc3QvZnJhbWVzL2ZyYW1lLWRpc3BsYXktbm9uZS1mb2N1cy1zdGRlcnIudHh0VVQF
AAOnJ7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAJJH8RgAAAAAAAAAAAAAAAAwAGAAAAAAA
AAAQAO1BZ+EDAGZhc3QvaW1hZ2VzL1VUBQADsye4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ACSR/EYhj704MgAAADMAAAAsABgAAAAAAAEAAACkga3hAwBmYXN0L2ltYWdlcy9wZGYtYXMtaW1h
Z2UtY3JvcC1ib3gtc3RkZXJyLnR4dFVUBQADsye4VXV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAA
AFCR/EYAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQUXiAwBmYXN0L2lubGluZS9VVAUAAwgouFV1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABQkfxGRzxcHLABAAAZBAAAOwAYAAAAAAABAAAApIGL
4gMAZmFzdC9pbmxpbmUvaW5saW5lLXdpdGgtZW1wdHktaW5saW5lLWNoaWxkcmVuLWNyYXNoLWxv
Zy50eHRVVAUAAwgouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABQkfxGT7QpNHABAADAAwAA
OAAYAAAAAAABAAAApIGw5AMAZmFzdC9pbmxpbmUvaW5saW5lLXdpdGgtZW1wdHktaW5saW5lLWNo
aWxkcmVuLXN0ZGVyci50eHRVVAUAAwgouFV1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAqkfxG
AAAAAAAAAAAAAAAACwAYAAAAAAAAABAA7UGS5gMAZmFzdC9saXN0cy9VVAUAA8AnuFV1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAAhkfxGE4N7WEMBAABXAwAALgAYAAAAAAABAAAApIHX5gMAZmFz
dC9saXN0cy9tYXJrZXItcHJlZmVycmVkLW1hcmdpbnMtc3RkZXJyLnR4dFVUBQADrSe4VXV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIACqR/EYYsOxVoQAAACwBAAAtABgAAAAAAAEAAACkgYLoAwBm
YXN0L2xpc3RzL21hcmtlcnMtaW4tc2VsZWN0aW9uLWNyYXNoLWxvZy50eHRVVAUAA8AnuFV1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAAqkfxG4+0CNEcAAABpAAAAKgAYAAAAAAABAAAApIGK6QMA
ZmFzdC9saXN0cy9tYXJrZXJzLWluLXNlbGVjdGlvbi1zdGRlcnIudHh0VVQFAAPAJ7hVdXgLAAEE
9QEAAAQUAAAAUEsBAh4DCgAAAAAAJpH8RgAAAAAAAAAAAAAAAAwAGAAAAAAAAAAQAO1BNeoDAGZh
c3QvbG9hZGVyL1VUBQADuCe4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIACGR/EbbCNNCOwAA
AD8AAABSABgAAAAAAAEAAACkgXvqAwBmYXN0L2xvYWRlci9kaXNwbGF5LWltYWdlLXVuc2V0LWNh
bi1ibG9jay1pbWFnZS1hbmQtY2FuLXJlbG9hZC1pbi1wbGFjZS1zdGRlcnIudHh0VVQFAAOtJ7hV
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAIpH8RtsI00I7AAAAPwAAAFMAGAAAAAAAAQAAAKSB
QusDAGZhc3QvbG9hZGVyL2ltYWdlcy1lbmFibGVkLXVuc2V0LWNhbi1ibG9jay1pbWFnZS1hbmQt
Y2FuLXJlbG9hZC1pbi1wbGFjZS1zdGRlcnIudHh0VVQFAAOvJ7hVdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAJpH8RtsI00I7AAAAPwAAAC0AGAAAAAAAAQAAAKSBCuwDAGZhc3QvbG9hZGVyL3Jl
bG9hZC1wb2xpY3ktZGVsZWdhdGUtc3RkZXJyLnR4dFVUBQADuCe4VXV4CwABBPUBAAAEFAAAAFBL
AQIeAwoAAAAAAFiR/EYAAAAAAAAAAAAAAAANABgAAAAAAAAAEADtQazsAwBmYXN0L3JlZ2lvbnMv
VVQFAAMXKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAVZH8RgAAAAAAAAAAAAAAABcAGAAA
AAAAAAAQAO1B8+wDAGZhc3QvcmVnaW9ucy9hdXRvLXNpemUvVVQFAAMSKLhVdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAZZH8RrhEW5R4RgAAni8BAEUAGAAAAAAAAQAAAKSBRO0DAGZhc3QvcmVn
aW9ucy9hdXRvLXNpemUvYXV0b2hlaWdodC1tYXhoZWlnaHQtbWl4ZWQtYnJlYWstY3Jhc2gtbG9n
LnR4dFVUBQADLSi4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAECR/Ea7bYnhcgEAAMADAABC
ABgAAAAAAAEAAACkgTs0BABmYXN0L3JlZ2lvbnMvYXV0by1zaXplL2F1dG9oZWlnaHQtbWF4aGVp
Z2h0LW1peGVkLWJyZWFrLXN0ZGVyci50eHRVVAUAA+gnuFV1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACABlkfxGhABAT4Y7AAAK4wAARgAYAAAAAAABAAAApIEpNgQAZmFzdC9yZWdpb25zL2F1dG8t
c2l6ZS9hdXRvaGVpZ2h0LW1heGhlaWdodC1zaW1wbGUtYnJlYWstY3Jhc2gtbG9nLnR4dFVUBQAD
LSi4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFWR/EZXuF7WcAEAAMADAABDABgAAAAAAAEA
AACkgS9yBABmYXN0L3JlZ2lvbnMvYXV0by1zaXplL2F1dG9oZWlnaHQtbWF4aGVpZ2h0LXNpbXBs
ZS1icmVhay1zdGRlcnIudHh0VVQFAAMSKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAS5H8
RqM+9UWhAAAALAEAADoAGAAAAAAAAQAAAKSBHHQEAGZhc3QvcmVnaW9ucy9mb3JjZWQtYnJlYWst
aW5zaWRlLWF2b2lkLWJyZWFrLWNyYXNoLWxvZy50eHRVVAUAA/0nuFV1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACABLkfxGOSiJaHABAADAAwAANwAYAAAAAAABAAAApIExdQQAZmFzdC9yZWdpb25z
L2ZvcmNlZC1icmVhay1pbnNpZGUtYXZvaWQtYnJlYWstc3RkZXJyLnR4dFVUBQAD/Se4VXV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIAFiR/EYmqQL0oQAAACwBAAA3ABgAAAAAAAEAAACkgRJ3BABm
YXN0L3JlZ2lvbnMvcmVnaW9uLW1pbi1tYXgtd2lkdGgtc3VwcG9ydC1jcmFzaC1sb2cudHh0VVQF
AAMXKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAWJH8Rllt6xFwAQAAwAMAADQAGAAAAAAA
AQAAAKSBJHgEAGZhc3QvcmVnaW9ucy9yZWdpb24tbWluLW1heC13aWR0aC1zdXBwb3J0LXN0ZGVy
ci50eHRVVAUAAxcouFV1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAukfxGAAAAAAAAAAAAAAAA
FwAYAAAAAAAAABAA7UECegQAZmFzdC9yZWdpb25zL3Njcm9sbGluZy9VVAUAA8gnuFV1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAAukfxGOQHL3UAAAAB6AAAANQAYAAAAAAABAAAApIFTegQAZmFz
dC9yZWdpb25zL3Njcm9sbGluZy93aGVlbC1zY3JvbGwtYWJzcG9zLXN0ZGVyci50eHRVVAUAA8cn
uFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAukfxGOQHL3UAAAAB6AAAALgAYAAAAAAABAAAA
pIECewQAZmFzdC9yZWdpb25zL3Njcm9sbGluZy93aGVlbC1zY3JvbGwtc3RkZXJyLnR4dFVUBQAD
yCe4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAC6R/EbkisdDPAAAAD0AAABAABgAAAAAAAEA
AACkgap7BABmYXN0L3JlZ2lvbnMvc2Nyb2xsaW5nL3doZWVsLXNjcm9sbGFibGUtc2luZ2xlLXJl
Z2lvbi1zdGRlcnIudHh0VVQFAAPIJ7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAXZH8RgAA
AAAAAAAAAAAAAA4AGAAAAAAAAAAQAO1BYHwEAGZhc3QvcmVwbGFjZWQvVVQFAAMhKLhVdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAXZH8RpZbeSiwAQAAGQQAACwAGAAAAAAAAQAAAKSBqHwEAGZh
c3QvcmVwbGFjZWQvcHJlZmVycmVkLXdpZHRocy1jcmFzaC1sb2cudHh0VVQFAAMhKLhVdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAXZH8RuAXqHdxAQAAwAMAACkAGAAAAAAAAQAAAKSBvn4EAGZh
c3QvcmVwbGFjZWQvcHJlZmVycmVkLXdpZHRocy1zdGRlcnIudHh0VVQFAAMhKLhVdXgLAAEE9QEA
AAQUAAAAUEsBAh4DCgAAAAAAYJH8RgAAAAAAAAAAAAAAAA0AGAAAAAAAAAAQAO1BkoAEAGZhc3Qv
c3RvcmFnZS9VVAUAAyMouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABgkfxGWMngRbIBAAAZ
BAAAMgAYAAAAAAABAAAApIHZgAQAZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2NyaXB0LXZhbHVl
LWNyYXNoLWxvZy50eHRVVAUAAyMouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABgkfxG/OeT
iHIBAADAAwAALwAYAAAAAAABAAAApIH3ggQAZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLXN0ZGVyci50eHRVVAUAAyMouFV1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABjkfxG
AAAAAAAAAAAAAAAACwAYAAAAAAAAABAA7UHShAQAZmFzdC90YWJsZS9VVAUAAykouFV1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACABjkfxGCeyQqbABAAAZBAAAOAAYAAAAAAABAAAApIEXhQQAZmFz
dC90YWJsZS9hbm9ueW1vdXMtdGFibGUtc2VjdGlvbi1yZW1vdmVkLWNyYXNoLWxvZy50eHRVVAUA
AykouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABjkfxG8LHyd3ABAADAAwAANQAYAAAAAAAB
AAAApIE5hwQAZmFzdC90YWJsZS9hbm9ueW1vdXMtdGFibGUtc2VjdGlvbi1yZW1vdmVkLXN0ZGVy
ci50eHRVVAUAAykouFV1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABLkfxGAAAAAAAAAAAAAAAA
HgAYAAAAAAAAABAA7UEYiQQAZmFzdC90YWJsZS9maXhlZC10YWJsZS1sYXlvdXQvVVQFAAP9J7hV
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZZH8RjG30eguRAAA6gkBAEQAGAAAAAAAAQAAAKSB
cIkEAGZhc3QvdGFibGUvZml4ZWQtdGFibGUtbGF5b3V0L3RhYmxlLXdpdGgtcGVyY2VudC13aWR0
aC1jcmFzaC1sb2cudHh0VVQFAAMtKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAS5H8RpzJ
RyVwAQAAwAMAAEEAGAAAAAAAAQAAAKSBHM4EAGZhc3QvdGFibGUvZml4ZWQtdGFibGUtbGF5b3V0
L3RhYmxlLXdpdGgtcGVyY2VudC13aWR0aC1zdGRlcnIudHh0VVQFAAP9J7hVdXgLAAEE9QEAAAQU
AAAAUEsBAh4DCgAAAAAAQpH8RgAAAAAAAAAAAAAAAAoAGAAAAAAAAAAQAO1BB9AEAGZhc3QvdGV4
dC9VVAUAA+wnuFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABCkfxG19KkKUsBAADKAwAAJAAY
AAAAAAABAAAApIFL0AQAZmFzdC90ZXh0L2ZvbnQtd2VpZ2h0cy16aC1zdGRlcnIudHh0VVQFAAPs
J7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAV5H8RgAAAAAAAAAAAAAAABIAGAAAAAAAAAAQ
AO1B9NEEAGZhc3Qvd3JpdGluZy1tb2RlL1VUBQADFii4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAGWR/EYKrolWQUAAAN37AABRABgAAAAAAAEAAACkgUDSBABmYXN0L3dyaXRpbmctbW9kZS9w
ZXJjZW50YWdlLWhlaWdodC1vcnRob2dvbmFsLXdyaXRpbmctbW9kZXMtcXVpcmtzLWNyYXNoLWxv
Zy50eHRVVAUAAy0ouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABXkfxGpc0VEHEBAADAAwAA
TgAYAAAAAAABAAAApIEMEwUAZmFzdC93cml0aW5nLW1vZGUvcGVyY2VudGFnZS1oZWlnaHQtb3J0
aG9nb25hbC13cml0aW5nLW1vZGVzLXF1aXJrcy1zdGRlcnIudHh0VVQFAAMWKLhVdXgLAAEE9QEA
AAQUAAAAUEsBAh4DCgAAAAAASZH8RgAAAAAAAAAAAAAAAAkAGAAAAAAAAAAQAO1BBRUFAGZhc3Qv
eHNsL1VUBQAD+ie4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAEmR/EZy/WXyhQAAAOkAAAAl
ABgAAAAAAAEAAACkgUgVBQBmYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1zdGRlcnIudHh0VVQF
AAP5J7hVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgASZH8RgWPVY6TAAAA0AIAACcAGAAAAAAA
AQAAAKSBLBYFAGZhc3QveHNsL3hzbHQtYmFkLWltcG9ydC11cmktc3RkZXJyLnR4dFVUBQAD+ie4
VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAEmR/EbPj2YOUAAAAKAAAAAkABgAAAAAAAEAAACk
gSAXBQBmYXN0L3hzbC94c2x0LWNvbnRlbnRUeXBlLXN0ZGVyci50eHRVVAUAA/onuFV1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACABJkfxGgUp3rUsAAACsAAAANAAYAAAAAAABAAAApIHOFwUAZmFz
dC94c2wveHNsdC10cmFuc2Zvcm0tdG8tZnJhZ21lbnQtY3Jhc2gtc3RkZXJyLnR4dFVUBQAD+ie4
VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGWR/EbCLYEVbwMAAJgPAAARABgAAAAAAAEAAACk
gYcYBQBmdWxsX3Jlc3VsdHMuanNvblVUBQADLii4VXV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAA
AFyR/EYAAAAAAAAAAAAAAAAFABgAAAAAAAAAEADtQUEcBQBodHRwL1VUBQADHyi4VXV4CwABBPUB
AAAEFAAAAFBLAQIeAwoAAAAAAGGR/EYAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQYAcBQBodHRw
L3Rlc3RzL1VUBQADJii4VXV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAFyR/EYAAAAAAAAAAAAA
AAAWABgAAAAAAAAAEADtQcUcBQBodHRwL3Rlc3RzL25hdmlnYXRpb24vVVQFAAMfKLhVdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAXJH8RtsI00I7AAAAPwAAADcAGAAAAAAAAQAAAKSBFR0FAGh0
dHAvdGVzdHMvbmF2aWdhdGlvbi9mYWxsYmFjay1hbmNob3ItcmVsb2FkLXN0ZGVyci50eHRVVAUA
Ax8ouFV1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABjkfxGAAAAAAAAAAAAAAAAFAAYAAAAAAAA
ABAA7UHBHQUAaHR0cC90ZXN0cy9zZWN1cml0eS9VVAUAAykouFV1eAsAAQT1AQAABBQAAABQSwEC
HgMKAAAAAABjkfxGAAAAAAAAAAAAAAAAKgAYAAAAAAAAABAA7UEPHgUAaHR0cC90ZXN0cy9zZWN1
cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvVVQFAAMpKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAY5H8RmOqrGyCAAAAqAAAAEAAGAAAAAAAAQAAAKSBcx4FAGh0dHAvdGVzdHMvc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L3hzbC1hbGxvd2VkLXN0ZGVyci50eHRVVAUAAykouFV1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABjkfxGY6qsbIIAAACoAAAAUgAYAAAAAAABAAAApIFv
HwUAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLXVuYWZmZWN0
ZWQtYnktc3R5bGUtc3JjLTItc3RkZXJyLnR4dFVUBQADKSi4VXV4CwABBPUBAAAEFAAAAFBLAQIe
AwoAAAAAAGGR/EYAAAAAAAAAAAAAAAAhABgAAAAAAAAAEADtQX0gBQBodHRwL3Rlc3RzL3NlY3Vy
aXR5L21peGVkQ29udGVudC9VVAUAAyYouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABhkfxG
4kKBPfsAAACFAgAARQAYAAAAAAABAAAApIHYIAUAaHR0cC90ZXN0cy9zZWN1cml0eS9taXhlZENv
bnRlbnQvaW5zZWN1cmUtcGx1Z2luLWluLWlmcmFtZS1hY3R1YWwudHh0VVQFAAMmKLhVdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAYZH8RoT5btldAQAAsAMAAEMAGAAAAAAAAQAAAKSBUiIFAGh0
dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50L2luc2VjdXJlLXBsdWdpbi1pbi1pZnJhbWUt
ZGlmZi50eHRVVAUAAyYouFV1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABhkfxGOLNTgPUAAACY
AQAARwAYAAAAAAABAAAApIEsJAUAaHR0cC90ZXN0cy9zZWN1cml0eS9taXhlZENvbnRlbnQvaW5z
ZWN1cmUtcGx1Z2luLWluLWlmcmFtZS1leHBlY3RlZC50eHRVVAUAAyYouFV1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACABhkfxGr9Gc9iYIAAA4GwAASwAYAAAAAAABAAAApIGiJQUAaHR0cC90ZXN0
cy9zZWN1cml0eS9taXhlZENvbnRlbnQvaW5zZWN1cmUtcGx1Z2luLWluLWlmcmFtZS1wcmV0dHkt
ZGlmZi5odG1sVVQFAAMmKLhVdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA9pD8RuqKfEJhBQAA
BQ8AAAoAGAAAAAAAAQAAAKSBTS4FAGh0dHBkLmNvbmZVVAUAA2AnuFV1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACABkkfxGMT+BfRsCAADEBQAAKwAYAAAAAAABAAAApIHyMwUAcHl3ZWJzb2NrZXQu
d3MubG9nLTI4SnVsMjAxNS0xODA3NDYtZXJyLnR4dFVUBQADKyi4VXV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAGWR/EZW07nQfwAAAIYAAAArABgAAAAAAAEAAACkgXI2BQBweXdlYnNvY2tldC53
cy5sb2ctMjhKdWwyMDE1LTE4MDc0Ni1vdXQudHh0VVQFAAMtKLhVdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAZpH8RndMSBKlJgAA3KQAAAwAGAAAAAAAAQAAAKSBVjcFAHJlc3VsdHMuaHRtbFVU
BQADLyi4VXV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGWR/EZE3YsxwdYDAKT1FAAKABgAAAAA
AAEAAACkgUFeBQBzdGF0cy5qc29uVVQFAAMuKLhVdXgLAAEE9QEAAAQUAAAAUEsFBgAAAACFAIUA
RzoAAEY1CQAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257768</attachid>
            <date>2015-07-29 14:26:09 -0700</date>
            <delta_ts>2015-07-29 15:37:10 -0700</delta_ts>
            <desc>passing more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>262901</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yOTMsOCArMjk1LDYgQEAKIAkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCN0UyQTE5QTExQjgwMDBE
OUJDNTYgLyogQ2FsbFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNw
cCAqLzsgfTsKIAkJMEYzQjdFMkIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNTE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVjay5jcHAgKi87IH07Ci0JCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0Uw
MUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2
MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4OCw2ICs1ODgsMTQgQEAKIAkJMEZEMkM5MjQx
NkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9
OworCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRkQzRTQwMjFCNjE4QUFG
MDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMDFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZEM0U0MDkxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDAzMUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBG
RDNFNDBBMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDQxQjYxOEI2
NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi87IH07CisJCTBGRDNFNDBDMUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5
Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87
IH07CisJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDgxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8q
IERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICov
OyB9OwogCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9
OwpAQCAtNjk0LDYgKzcwMiw4IEBACiAJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdF
ZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjRCNTFCMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdFZGdlLmNwcCAqLzsgfTsKIAkJMEZGMEYxOUYx
NkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjExNkI2Mjc4RDAwM0Y2
OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwICovOyB9OwogCQkwRkYwRjFBMDE2Qjcy
QTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8q
IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcCAqLzsgfTsKKwkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0
QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY0
MjczMTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyog
RGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjcz
MDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZG
NDI3NDAxNThFQkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAv
KiB1ZGlzODZfZGVjb2RlLmMgKi87IH07CkBAIC0xMzg5LDggKzEzOTksNiBAQAogCQlBNzg0QTI2
NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5
bnRheENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFG
NkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYgLyogU3BpbGxSZWdpc3RlcnNNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZGNjQ3
QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0
MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwotCQlBNzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzhBOTc3NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZD
MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovOyB9OwogCQlBNzhB
OTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RDE3OTczOEI4MDA5REY3
NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi87IH07CiAJCUE3OEE5Nzc2MTc5NzM4QjgwMDlE
Rjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5j
cHAgKi87IH07CkBAIC0xODU3LDYgKzE4NjUsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhE
RTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVG
MTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGgu
Y3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
OEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8q
IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9m
aWxlckpldHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
OTBDQUIxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMDQyLDggKzIwNTIsNiBAQAogCQkwRjNCM0EyQTE1NDc0RkY0MDAz
RUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHVmFsaWRhdGUuaDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyog
Q2FsbFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFZhcmlh
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5
Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcv
REZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
M0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRm
Zy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIzNDgsNiArMjM1NiwxNCBAQAogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIw
MTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyog
REZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5o
OyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcv
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDMxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA1MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA2MUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlDb25k
aXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwODFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBh
dGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRG9taW5hdG9ycy5jcHA7IHBhdGgg
PSBkZmcvREZHRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0
b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQ5LDYgKzI0NjUsOCBAQAog
CQkwRkVGQzlBODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJs
ZUFsbG9jYXRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enou
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25G
dXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5
NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHBhdGggPSBkZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc2Fzc2VtYmxlci5oOyBwYXRoID0g
ZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY0MjczMDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHA7
IHBhdGggPSBkaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNv
ZGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdWRpczg2X2RlY29kZS5jOyBw
YXRoID0gZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZGlzODZfZGVjb2RlLmM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMTY5LDggKzMxODcsNiBAQAogCQlBNzdGMTgyMDE2NDA4OEIyMDA2
NDBBNDcgLyogQ29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
ZGVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgyNDE2NDE5MjU0
MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8q
IE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5
REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVk
RmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRG
aW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTAxLDggKzQ1MTcsNiBAQAogCQkJCUE3
QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3
QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCi0JCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0
IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAotCQkJCUE3ODg1M0Y4MTc5NzI2Mjkw
MDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5
NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUx
OTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJQTEyQkJGRjMxQjA0
NEE5ODAwNjY0QjY5IC8qIEludGxPYmplY3QuY3BwICovLApAQCAtNDg4OSw2ICs0OTAzLDEwIEBA
CiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0
VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFZhbHVlLmggKi8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZEM0U0MDAxQjYx
OEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dC5oICovLAorCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1
MzMgLyogREZHQW5hbHlzaXMuaCAqLywKQEAgLTUwNDgsNiArNTA2Niw4IEBACiAJCQkJMEYyQkRD
M0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAogCQkJCTBGOEYxNDMx
MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLywKIAkJCQkw
RjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oICovLAor
CQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5j
cHAgKi8sCisJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmggKi8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9t
aW5hdG9ycy5jcHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1
cmFsTG9vcHMuY3BwICovLApAQCAtNTMxOSw4ICs1MzM5LDYgQEAKIAkJCQkwRjBCODNBNTE0QkNG
NTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQw
MkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY2RkM3NEYxOTYxMTBBODAwRTFE
MDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8sCi0JCQkJMEYzRDBCQkIxOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLywKIAkJCQkwRjQyNkE0QTE0
NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAogCQkJCTBGQzcxMkRDMTdDRDg3Nzgw
MDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAogCQkJCTBGQzcx
MkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywK
QEAgLTUzNTMsNiArNTM3MSwxMCBAQAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0RjVDN0Q0
MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJCTE0Q0E5
NThDMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJ
CTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAg
Ki8sCisJCQkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmggKi8sCisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5NjlBMDc5NDBFRDFEM0FFMDBGMUY2
ODEgLyogT3Bjb2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8s
CkBAIC01MzY0LDYgKzUzODYsOCBAQAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAy
IC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQw
RDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4
MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDgxQjYxOEI2NjAw
QzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1
RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKQEAgLTU4NzQsNiArNTg5OCw3IEBACiAJCQkJQzI5
ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0Rv
bWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAv
KiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JC
OTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MTI2LDYgKzYxNTEsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21i
aW5lZERvbWFpbnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzg4MTg1NjgzMzUwMDJF
RDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIw
MEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQz
OEMxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTM1LDcgKzYxNjEsNiBAQAogCQkJCUE3QThBRjNC
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4
QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyog
SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIy
RiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0OCw2ICs2MTczLDcgQEAKIAkJ
CQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzYyLDcgKzYzODgsNiBAQAogCQkJCUJDMThDNDNDMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0Uz
RTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAwOENFNzE4NzYzMUI2
MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIx
M0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5
MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjQ0NSw5ICs2NDcwLDExIEBACiAJCQkJMkFBRDk2NEExODU2OTQxNzAwMUY5M0JF
IC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBB
QzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBS
ZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8q
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4
cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTI0LDYgKzY1NTEsNyBAQAog
CQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBDMUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzE1LDYgKzczNDMs
NyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNC
MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0
IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMjUsNiArNzM1NCw3
IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1
NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTczNzYsNiArNzQwNiw3IEBACiAJCQkJQTVDRUVFMTQxODdG
M0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwMTFCNjE4
QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUY3MzgyQzE4
QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzM4Niw3ICs3NDE3LDYgQEAKIAkJCQlBNTMyNDM4QjE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3Rv
clZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
RjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0MDMsNiArNzQzMyw3IEBACiAJCQkJQkNERDUxRUIw
RkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcx
MjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0QzE3RUUy
NzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkND
ODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDU4LDcgKzc0ODksNiBAQAogCQkJCUE1MDNGQTFC
MTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAxM0U3
QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0QwQkJDMTk0QTQxNDMwMEZD
OUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
NUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUE3MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2NTEsNiArNzY4MSw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMyRDAw
MTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBFQkI3
QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJG
MEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMg
LyogSlNKb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzY2MCw2ICs3NjkxLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3
MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4
MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQw
MTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTEx
ODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IDA7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0g
MDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBl
KSB7CkBAIC0zNzAsMTEgKzM2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByb3RvdHlwZVN0
cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
LCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CkBAIC0z
ODIsOSArMzc2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAog
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiKCIpOwogICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJl
KG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGR1bXBDaGFpbihvdXQsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTQ1NiwxMCArNDUwLDggQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAicHJldiIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUu
Z2V0KCksIGlkZW50KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAgICAg
ICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAg
ICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCJsaXN0ID0gWyIpOwpAQCAtNDgzLDEwICs0NzUsOCBAQCB2b2lkIENvZGVCbG9jazo6
cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRl
bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGFjY2Vzcy5jaGFpbigpLCBpZGVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vz
cy5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsICIsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJ1bmtub3duIik7
CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw5ICszOCw2IEBAIHZvaWQgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXIKICAg
ICAgICAgZGF0YUxvZygiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiBv
biAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogCiAgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6
YXRpb24sICZkZXRhaWwpOwotCi0gICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgIHJlbW92ZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzQ4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvbXBsZXhH
ZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAotICAgIHVuc2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisg
ICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQK
ICAgICAvLyBoYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRv
bid0CkBAIC00MCwzMiArMzksMjYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdQogICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpOworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5E
RkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwog
ICAgIAogICAgIENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJ
bmxpbmVhYmxlOwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAg
IHJlc3VsdC5tX2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0g
ICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3Vu
dCkpOworICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQu
bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJl
c3VsdC5tX2NoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25k
aXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
c2tpcCgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWlu
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIHRha2VzU2xvd1BhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50
T2JqZWN0ID0gcmVzdWx0Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0
cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAg
ICAgIAotICAgICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3Qp
OworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0
aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0
Lm1fYXR0cmlidXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
aGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7
Ci0gICAgfQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0g
ZWxzZQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3
NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVz
X2gKICNkZWZpbmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3Rh
dHVzKCkKICAgICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChp
bnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAg
ICAgfQogICAgIApAQCAtOTcsMjEgKzk2LDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
c3RhdGljIENvbXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CisgICAgICAgIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0gICAgSlNWYWx1ZSBzcGVjaWZpY1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7
CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVz
OwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2su
Y3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihDaGVjayBpZiAi
LCBpbkNvbnRleHQoSlNWYWx1ZShtX2NvbnN0YW50KSwgY29udGV4dCksICIgaGFzIHN0cnVjdHVy
ZSAiLAotICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCks
ICIpIik7Ci19Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQot
U3RydWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgdmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IHZl
Y3Rvci5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHZlY3RvcltpXS5jb25zdGFudCgpID09
IGNvbnN0YW50KQotICAgICAgICAgICAgcmV0dXJuIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgYXJlQ29tcGF0aWJsZShjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBhLCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrVmVjdG9yJiBiKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IGEuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogb3RoZXJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IoYiwgYVtp
XS5jb25zdGFudCgpKTsKLSAgICAgICAgaWYgKCFvdGhlclN0cnVjdHVyZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYVtpXS5zdHJ1Y3R1cmUoKSAhPSBvdGhlclN0cnVjdHVy
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNv
dXJjZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KQotewotICAgIGZvciAo
dW5zaWduZWQgaSA9IHNvdXJjZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZUZvcih0YXJnZXQsIHNvdXJjZVtpXS5jb25zdGFudCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB0YXJnZXQuYXBwZW5kKHNvdXJjZVtpXSk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0
YW50U3RydWN0dXJlQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLSNk
ZWZpbmUgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KLSNpbmNsdWRlICJEdW1wQ29udGV4dC5o
IgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIENvbnN0YW50U3RydWN0dXJlQ2hlY2sgewotcHVibGljOgotICAgIENv
bnN0YW50U3RydWN0dXJlQ2hlY2soKQotICAgICAgICA6IG1fY29uc3RhbnQobnVsbHB0cikKLSAg
ICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIGNvbnN0YW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICAgICAgOiBtX2NvbnN0YW50KGNvbnN0YW50KQotICAgICAgICAsIG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghIW1fY29uc3RhbnQgPT0gISFtX3N0
cnVjdHVyZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fY29uc3RhbnQ7IH0KLSAgICAKLSAgICBKU0NlbGwqIGNvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudDsgfQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KLSAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0NlbGwqIG1fY29uc3RhbnQ7Ci0gICAgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPENvbnN0YW50U3RydWN0
dXJlQ2hlY2ssIDI+IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3I7Ci0KLVN0cnVjdHVyZSog
c3RydWN0dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3Rvciwg
SlNDZWxsKiBjb25zdGFudCk7Ci1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVja1ZlY3RvciYsIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsK
LXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNvdXJj
ZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OSw4ICsxNjksNyBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0KGxpc3RJbmRleCkuc3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENv
bXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0gICAgICAgICAgICAg
ICAgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbkNvdW50KCksIHVpZCk7CisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQo
KSkgewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAt
MjA2LDggKzIwNSw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdl
dEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCi0gICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwor
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25k
aXRpb25TZXQoKSwgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRy
dWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwyMyArMzQsMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVy
ZVNldCkKLSAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQorICAgICwgbV9jb25kaXRpb25T
ZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9jYWxsTGlu
a1N0YXR1cyhXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKQogewogICAgIGlmICghc3RydWN0dXJl
U2V0LnNpemUoKSkgewogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpOwot
ICAgICAgICBBU1NFUlQoIWNoYWluKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGNoYWluICYmIGNo
YWluLT5zaXplKCkpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFs
UHJvdG90eXBlKCk7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MobV9jb25zdGFudENoZWNr
cyk7CisgICAgICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKICAgICB9CiB9Ci0K
KyAgICAgICAgICAgICAgICAgICAgIAogR2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlkVmFyaWFudCgp
IHsgfQogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlh
bnQmIG90aGVyKQpAQCAtNjIsOCArNTgsNyBAQCBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlh
bnQoY29uc3QgR2V0CiBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShj
b25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQgPSBvdGhl
ci5tX3N0cnVjdHVyZVNldDsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFu
dENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7Cisg
ICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29mZnNldCA9
IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAg
ICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90
aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzIsMjggKzY3LDE5IEBAIEdldEJ5SWRWYXJpYW50
JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVN0cnVj
dHVyZVNldCBHZXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKTsKLSAgICAK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tz
LCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAg
cmV0dXJuIHN0cnVjdHVyZTsKLX0KLQogYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVy
Z2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQogewotICAgIGlmIChtX2FsdGVybmF0ZUJh
c2UgIT0gb3RoZXIubV9hbHRlcm5hdGVCYXNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghYXJlQ29tcGF0aWJsZShtX2NvbnN0YW50Q2hlY2tz
LCBvdGhlci5tX2NvbnN0YW50Q2hlY2tzKSkKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQgPQorICAgICAgICBtX2NvbmRpdGlvblNldC5tZXJn
ZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNl
dC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlv
bigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgbWVyZ2VJbnRvKG90aGVyLm1f
Y29uc3RhbnRDaGVja3MsIG1fY29uc3RhbnRDaGVja3MpOworICAgIG1fY29uZGl0aW9uU2V0ID0g
bWVyZ2VkQ29uZGl0aW9uU2V0OwogICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3Ry
dWN0dXJlU2V0KTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMiwxMCArOTgsNyBAQCB2
b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgfQogICAgIAogICAg
IG91dC5wcmludCgKLSAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRl
eHQpLCAiLCAiLAotICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVj
a3MsIGNvbnRleHQpLCAiXSIpOwotICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIG91
dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5h
dGVCYXNlKSwgY29udGV4dCkpOworICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQo
KSwgY29udGV4dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCkpOwog
ICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2FsbExp
bmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0
dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw5ICsyNyw4IEBACiAjZGVm
aW5lIEdldEJ5SWRWYXJpYW50X2gKIAogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5j
bHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotI2luY2x1ZGUgIkludGVuZGVkU3RydWN0
dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBAIC00Myw3ICs0Miw3IEBAIGNsYXNzIEdldEJ5SWRWYXJp
YW50IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gaW52YWxpZE9mZnNldCwKLSAgICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
biogY2hhaW4gPSBudWxscHRyLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0gbnVsbHB0cik7CiAgICAgCiAg
ICAgfkdldEJ5SWRWYXJpYW50KCk7CkBAIC01NSw5ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0K
ICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0
OyB9Ci0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVj
a3MoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3QqIGFs
dGVybmF0ZUJhc2UoKSBjb25zdCB7IHJldHVybiBtX2FsdGVybmF0ZUJhc2U7IH0KLSAgICBTdHJ1
Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OworCisgICAgLy8gVGhlIHByZXNlbmNlIG9m
IGEgY29uZGl0aW9uIHNldCBtZWFucyB0aGF0IHRoaXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KKyAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxs
TGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAg
ICAKQEAgLTcwLDggKzcwLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgR2V0QnlJZFN0
YXR1czsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBt
X2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgiPCIsIGluQ29udGV4dChKU1Zh
bHVlKG1fb2JqZWN0KSwgY29udGV4dCksICI6ICIsIGluQ29udGV4dChtX2NvbmRpdGlvbiwgY29u
dGV4dCksICI+Iik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7
Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxp
ZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOwor
fQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJl
dHVybiBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRo
aXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1
aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChz
dHJ1Y3R1cmUsIG1fb2JqZWN0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChtX29iamVjdC0+c3RydWN0dXJl
KCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
ZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRj
aGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5p
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgbV9v
YmplY3QsIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0
Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgUHJvcGVydHlDb25k
aXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhp
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZWZm
b3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dhdGNoYWJs
ZShzdHJ1Y3R1cmUsIG1fb2JqZWN0LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjppc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZm
b3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwg
ZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUo
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpOworfQorCit2b2lk
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tl
ZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIHRyYWNrZWQuY2hlY2sobV9vYmplY3QpOworICAgIG1fY29uZGl0
aW9uLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAi
UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisKK2NsYXNzIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpCisg
ICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSB0b2tlbikK
KyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgICAgICAsIG1fY29uZGl0aW9uKHRva2Vu
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oSlNPYmpl
Y3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKKyAgICAgICAg
OiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9jb25kaXRpb24oY29uZGl0aW9uKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNl
bmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykK
KyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0
cmlidXRlcyk7IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsK
KyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3du
ZXIpOworICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwg
b2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0
eUNvbmRpdGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmpl
Y3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJy
aWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VXaXRob3V0QmFycmllcihvYmplY3Qs
IHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVj
dCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFBy
b3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3Rv
dHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
SlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VP
ZlNldHRlcldpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VXaXRob3V0
QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1
bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFy
cmllcih1aWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAg
ICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFs
ZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29uZGl0aW9uOyB9OworICAgIAor
ICAgIEpTT2JqZWN0KiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIFBy
b3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uOyB9
CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IGNvbmRpdGlvbigpLmtpbmQoKTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS51aWQoKTsgfQorICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzT2Zmc2V0KCk7IH0KKyAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5vZmZzZXQoKTsgfQorICAgIHVu
c2lnbmVkIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNBdHRy
aWJ1dGVzKCk7IH0KKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gY29u
ZGl0aW9uKCkuYXR0cmlidXRlcygpOyB9CisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7
IHJldHVybiBjb25kaXRpb24oKS5oYXNQcm90b3R5cGUoKTsgfQorICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5wcm90b3R5cGUoKTsgfQorICAgIGJv
b2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1JlcXVp
cmVkVmFsdWUoKTsgfQorICAgIEpTVmFsdWUgcmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IGNvbmRpdGlvbigpLnJlcXVpcmVkVmFsdWUoKTsgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEpTT2JqZWN0Kj46Omhhc2gobV9vYmplY3Qp
ICsgbV9jb25kaXRpb24uaGFzaCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0CisgICAgICAgICAgICAmJiBtX2Nv
bmRpdGlvbiA9PSBvdGhlci5tX2NvbmRpdGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2Jq
ZWN0ICYmIG1fY29uZGl0aW9uLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAg
IAorICAgIC8vIFR3byBjb25kaXRpb25zIGFyZSBjb21wYXRpYmxlIGlmIHRoZXkgYXJlIGlkZW50
aWNhbCBvciBpZiB0aGV5IHNwZWFrIG9mIGRpZmZlcmVudCB1aWRzIG9yCisgICAgLy8gZGlmZmVy
ZW50IG9iamVjdHMuIElmIGZhbHNlIGlzIHJldHVybmVkLCB5b3UgaGF2ZSB0byBkZWNpZGUgaG93
IHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0IC0KKyAgICAvLyBmb3IgZXhhbXBsZSBpZiB0aGVyZSBp
cyBhIFByZXNlbmNlIGFuZCBhbiBFcXVpdmFsZW5jZSB0aGVuIGluIHNvbWUgY2FzZXMgeW91J2xs
IHdhbnQgdGhlCisgICAgLy8gbW9yZSBnZW5lcmFsIG9mIHRoZSB0d28gd2hpbGUgaW4gb3RoZXIg
Y2FzZXMgeW91J2xsIHdhbnQgdGhlIG1vcmUgc3BlY2lmaWMgb2YgdGhlIHR3by4gVGhpcworICAg
IC8vIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UgZm9yIGNvbnRyYWRpY3Rpb25zLCBsaWtlIFByZXNl
bmNlIGFuZCBBYnNlbmNlIG9uIHRoZSBzYW1lCisgICAgLy8gb2JqZWN0L3VpZC4gQnkgY29udmVu
dGlvbiwgaW52YWxpZCBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcu
CisgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwg
dWlkKCkgIT0gb3RoZXIudWlkKCkgfHwgb2JqZWN0KCkgIT0gb3RoZXIub2JqZWN0KCk7CisgICAg
fQorICAgIAorICAgIC8vIFRoZXNlIHZhbGlkaXR5LWNoZWNraW5nIG1ldGhvZHMgY2FuIG9wdGlv
bmFsbHkgdGFrZSBhIFN0cnV0dXJlKiBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlCisgICAgLy8gU3Ry
dWN0dXJlKiBmcm9tIHRoZSBvYmplY3QuIElmIHlvdSdyZSBpbiB0aGUgY29uY3VycmVudCBKSVQs
IHRoZW4geW91IG11c3QgdXNlIHRoZSBmb3JtcworICAgIC8vIHRoYXQgdGFrZSBhbiBleHBsaWNp
dCBTdHJ1Y3R1cmUqIGJlY2F1c2UgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZv
ciB0aGUgc2FtZQorICAgIC8vIHN0cnVjdHVyZSB0aGF0IHlvdSB2YWxpZGF0ZWQgKGkuZS4gYXZv
aWQgYSBUT0NUT1UgcmFjZSkuCisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBz
dHJ1Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLiBW
YWxpZGl0eQorICAgIC8vIGRvZXMgbm90IHJlcXVpcmUgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVj
dC4KKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hw
b2ludCB0byBlbnN1cmUgdmFsaWRpdHkgZXZlbiBpZgorICAgIC8vIGlzU3RpbGxWYWxpZEFjY29y
ZGluZ1RvU3RydWN0dXJlKCkgcmV0dXJuZWQgdHJ1ZS4KKyAgICBib29sIHZhbGlkaXR5UmVxdWly
ZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCB2
YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisKKyAgICAv
LyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBzdGlsbCBob2xkcy4gTWF5IGNvbnNlcnZhdGl2ZWx5
IHJldHVybiBmYWxzZSwgaWYgdGhlIG9iamVjdCBhbmQKKyAgICAvLyBzdHJ1Y3R1cmUgYWxvbmUg
ZG9uJ3QgZ3VhcmFudGVlIHRoZSBjb25kaXRpb24uIE5vdGUgdGhhdCB0aGlzIG1heSByZXR1cm4g
dHJ1ZSBpZiB0aGUKKyAgICAvLyBjb25kaXRpb24gc3RpbGwgcmVxdWlyZXMgc29tZSB3YXRjaHBv
aW50cyBvbiB0aGUgb2JqZWN0IGluIGFkZGl0aW9uIHRvIGNoZWNraW5nIHRoZQorICAgIC8vIHN0
cnVjdHVyZS4gSWYgeW91IHdhbnQgdG8gY2hlY2sgaWYgdGhlIGNvbmRpdGlvbiBob2xkcyBieSB1
c2luZyB0aGUgc3RydWN0dXJlIGFsb25lLAorICAgIC8vIHVzZSBzdHJ1Y3R1cmVFbnN1cmVzVmFs
aWRpdHkoKS4KKyAgICBib29sIGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBi
b29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIAorICAgIC8vIFNob3J0aGFuZCBmb3IgY29u
ZGl0aW9uKCkuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSkuCisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1
cmVzVmFsaWRpdHkoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGls
bCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNp
dGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZSBhbmQgcG9zc2libHkgYW4g
aW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQuCisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBTdHJ1Y3R1cmUqLAorICAgICAgICBQ
cm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246
Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJp
bGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKwor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZv
cmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBv
biB0aGUgc3RydWN0dXJlLgorICAgIGJvb2wgaXNXYXRjaGFibGUoCisgICAgICAgIFN0cnVjdHVy
ZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJs
ZSgKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNo
aW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gY29uZGl0aW9uKCkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50KCk7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxh
Y2VtZW50V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uZGl0aW9u
KCkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpOworICAgIH0KKyAgICAK
KyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdHMgaW52b2x2ZWQgaW4gdGhpcyBhcmUg
c3RpbGwgbGl2ZS4KKyAgICBib29sIGlzU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9p
ZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBKU09iamVjdCogbV9vYmplY3Q7CisgICAgUHJvcGVydHlDb25kaXRpb24g
bV9jb25kaXRpb247Cit9OworCitzdHJ1Y3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIHsK
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAg
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
IgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQ6OmZvck9iamVjdChKU09iamVjdCogb2JqZWN0KSBjb25zdAoreworICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7
CisgICAgICAgIGlmIChjb25kaXRpb24ub2JqZWN0KCkgPT0gb2JqZWN0KQorICAgICAgICAgICAg
cmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0Ojpmb3JDb25kaXRpb25LaW5kKAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtp
bmQpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkK
KyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbigpOworfQorCit1bnNpZ25lZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldDo6bnVtYmVyT2ZDb25kaXRpb25zV2l0aEtpbmQoUHJvcGVydHlDb25kaXRpb246OktpbmQg
a2luZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgIGZvciAoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlm
IChjb25kaXRpb24ua2luZCgpID09IGtpbmQpCisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6aGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBudW1iZXJP
ZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpID09IDE7Cit9
CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpz
bG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
cmVzdWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29u
ZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAg
IH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFvdGhlci5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisgICAgZm9yIChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3RoZXIpIHsKKyAg
ICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3RpbmdDb25kaXRp
b24gOiAqdGhpcykgeworICAgICAgICAgICAgaWYgKG5ld0NvbmRpdGlvbiA9PSBleGlzdGluZ0Nv
bmRpdGlvbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghbmV3
Q29uZGl0aW9uLmlzQ29tcGF0aWJsZVdpdGgoZXhpc3RpbmdDb25kaXRpb24pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5ld0Nv
bmRpdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbm9uRW1wdHkocmVzdWx0
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3Vy
ZVZhbGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJl
c0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAor
eworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6Om5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAg
IGlmIChjb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxMaXZlKCkgY29uc3QK
K3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAq
dGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAg
ICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG91dC5wcmludCgiWyIpOworICAgIGlmIChtX2RhdGEpCisgICAgICAgIG91dC5wcmlu
dChsaXN0RHVtcEluQ29udGV4dChtX2RhdGEtPnZlY3RvciwgY29udGV4dCkpOworICAgIG91dC5w
cmludCgiXSIpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIp
OworfQorCituYW1lc3BhY2UgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNv
bmRpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbktp
bmQpCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOwor
ICAgIAorICAgIHN3aXRjaCAoY29uZGl0aW9uS2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25k
aXRpb246OlByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwg
YXR0cmlidXRlcyk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAg
ICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgICAgICByZXR1cm4g
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQs
IG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246
OkFic2VuY2U6IHsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNl
bmNlKAorICAgICAgICAgICAgdm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpOworICAgIH0KKyAgICBjYXNlIFByb3BlcnR5
Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9i
amVjdCwgdWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSk7
CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgIH0KK30K
KworZW51bSBDb25jdXJyZW5jeSB7CisgICAgTWFpblRocmVhZCwKKyAgICBDb25jdXJyZW50Cit9
OworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zKAorICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCwKKyAgICBDb25jdXJyZW5jeSBj
b25jdXJyZW5jeSA9IE1haW5UaHJlYWQpCit7CisgICAgQVNTRVJUKCEhcHJvdG90eXBlID09IChr
aW5kID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkpOworICAgIAorICAgIFZlY3RvcjxP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gY29uZGl0aW9uczsKKyAgICAKKyAgICBmb3IgKDs7KSB7
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICAKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVj
dCk7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAg
IGlmICghcHJvdG90eXBlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1
ZSk7CisgICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSByZXBlYXRlZGx5
LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQgbm90IGJlCisgICAgICAgIC8vIHRyZWF0
ZWQgYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkgeworICAgICAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IE1haW5UaHJlYWQpCisgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgb2JqZWN0
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIHRoaXNDb25kaXRpb25LaW5kOworICAgICAgICBp
ZiAoa2luZCA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UgJiYgb2JqZWN0ICE9IHByb3Rv
dHlwZSkKKyAgICAgICAgICAgIHRoaXNDb25kaXRpb25LaW5kID0gUHJvcGVydHlDb25kaXRpb246
OkFic2VuY2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXNDb25kaXRpb25LaW5kID0g
a2luZDsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG5ld0NvbmRp
dGlvbiA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwg
dWlkLCB0aGlzQ29uZGl0aW9uS2luZCk7CisgICAgICAgIGlmICghbmV3Q29uZGl0aW9uIHx8ICFu
ZXdDb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldDo6aW52YWxpZCgpOworICAgICAgICAKKyAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQobmV3
Q29uZGl0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvYmplY3QgPT0gcHJvdG90eXBlKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8vIFZhbGlkYXRlIHRoZSByZXN1
bHQuCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJl
c2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgcHJlc2VuY2VDb3VudCA9IDA7CisgICAgICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlvbnMp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICAgICAg
Y2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICAgICAgcHJlc2Vu
Y2VDb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChwcmVz
ZW5jZUNvdW50ID09IDEpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDogewor
ICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBj
b25kaXRpb25zKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLmtpbmQoKSA9
PSBraW5kKTsKKyAgICB9IH0KKyAgICAKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlvbnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAg
cmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwKKyAgICAgICAg
UHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVy
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRp
b25zKAorICAgICAgICB2bSwgb3duZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVh
ZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlkLAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJz
ZW5jZU9mU2V0dGVyKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3Qq
IHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBn
ZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBwcm90b3R5cGUsIHVpZCwKKyAgICAgICAgUHJvcGVy
dHlDb25kaXRpb246OlByZXNlbmNlKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAg
IFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkU3Ry
dWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNv
bmRpdGlvbnMoCisgICAgICAgIHZtLCBudWxscHRyLCBnbG9iYWxPYmplY3QsIGhlYWRTdHJ1Y3R1
cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlciwKKyAg
ICAgICAgQ29uY3VycmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBB
biBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUg
c2V0IG9mIGFkZGl0aW9uYWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Ig
c29tZSBoZWFwIGFjY2VzcyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93
aW5nCisvLyBpbnRlcmVzdGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBz
cGVjaWFsIGNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBo
ZWFwIGFjY2VzcyBpcyBuZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3Mg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0KCkgeyB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGludmFsaWQoKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBub25FbXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlD
b25kaXRpb24+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAg
ICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEtPnZlY3RvciA9IHZlY3RvcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRh
IHx8ICFtX2RhdGEtPnZlY3Rvci5pc0VtcHR5KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YTsKKyAgICB9CisgICAg
CisgICAgdHlwZWRlZiBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiogaXRlcmF0b3I7Cisg
ICAgCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rh
dGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+
dmVjdG9yLmJlZ2luKCk7CisgICAgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gbV9kYXRhLT52ZWN0b3IuZW5kKCk7CisgICAgfQorICAgIAorICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIGZvck9iamVjdChKU09iamVjdCogb2JqZWN0KSBjb25zdDsKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JDb25kaXRpb25LaW5kKFByb3BlcnR5Q29uZGl0aW9u
OjpLaW5kKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5k
KFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kKSBjb25zdDsKKworICAgIGJvb2wgaGFzT25lU2xvdEJh
c2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGlzIGEgY29uZGl0aW9u
IHNldCBmb3IgYSBwcm90b3R5cGUgaGl0LCB0aGVuIHRoaXMgaXMgZ3VhcmFudGVlZCB0byByZXR1
cm4gdGhlCisgICAgLy8gY29uZGl0aW9uIG9uIHRoZSBwcm90b3R5cGUgaXRzZWxmLiBUaGlzIGFs
bG93cyB5b3UgdG8gZ2V0IHRoZSBvYmplY3QsIG9mZnNldCwgYW5kCisgICAgLy8gYXR0cmlidXRl
cyBmb3IgdGhlIHByb3RvdHlwZS4gVGhpcyB3aWxsIFJFTEVBU0VfQVNTRVJUIHRoYXQgdGhlcmUg
aXMgZXhhY3RseSBvbmUgUHJlc2VuY2UKKyAgICAvLyBpbiB0aGUgc2V0LCBhbmQgaXQgd2lsbCBy
ZXR1cm4gdGhhdCBwcmVzZW5jZS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBzbG90QmFz
ZUNvbmRpdGlvbigpIGNvbnN0OworICAgIAorICAgIC8vIEF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3
IGNvbmRpdGlvbiBzZXQgYnkgbWVyZ2luZyB0aGlzIG9uZSB3aXRoIHRoZSBvdGhlciBvbmUuIFRo
aXMgd2lsbAorICAgIC8vIGZhaWwgaWYgYW55IG9mIHRoZSBjb25kaXRpb25zIGFyZSBpbmNvbXBh
dGlibGUgd2l0aCBlYWNoIG90aGVyLiBXaGVuIGlmIGZhaWxzLCBpdCByZXR1cm5zCisgICAgLy8g
aW52YWxpZCgpLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZFdpdGgoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVyKSBjb25zdDsKKyAgICAKKyAgICBi
b29sIHN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJl
c0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsK
KyAgICAKKyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAg
ICBib29sIGFyZVN0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gSGVscGVycyBmb3IgdXNpbmcgdGhpcyBpbiBh
IHVuaW9uLgorICAgIHZvaWQqIHJlbGVhc2VSYXdQb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx2b2lkKj4obV9kYXRhLmxlYWtSZWYoKSk7CisgICAgfQorICAgIHN0
YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBhZG9wdFJhd1BvaW50ZXIodm9pZCogcmF3
UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PERhdGEqPihy
YXdQb2ludGVyKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHN0YXRpYyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBmcm9tUmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVy
KQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9kYXRhID0gc3RhdGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gSW50ZXJu
YWxseSwgdGhpcyByZXByZXNlbnRzIEludmFsaWQgdXNpbmcgYSBwb2ludGVyIHRvIGEgRGF0YSB0
aGF0IGhhcyBhbiBlbXB0eSB2ZWN0b3IuCisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY291bGQg
YmUgbWFkZSBtb3JlIGNvbXBhY3QgYnkgaGF2aW5nIGl0IGludGVybmFsbHkgdXNlIGEgdmVjdG9y
IHRoYXQganVzdCBoYXMKKyAgICAvLyB0aGUgbm9uLXVpZCBwb3J0aW9uIG9mIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLCBhbmQgdGhlbiByZXF1aXJpbmcgdGhhdCB0aGUgY2FsbGVycyBvZiBhbGwK
KyAgICAvLyBvZiB0aGUgQVBJcyBzdXBwbHkgdGhlIHVpZC4KKyAgICAKKyAgICBjbGFzcyBEYXRh
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGE+IHsKKyAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGF0YSk7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
ICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIERhdGEoKSB7IH0KKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gdmVjdG9yOworICAgIH07CisgICAgCisg
ICAgUmVmUHRyPERhdGE+IG1fZGF0YTsKK307CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
OworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
CShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgdW5zaWduZWQgY2hhaW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKICAgICA6
IG1fdHlwZSh0eXBlKQotICAgICwgbV9jaGFpbkNvdW50KGNoYWluQ291bnQpCiAgICAgLCBtX3N0
cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRp
dGlvblNldCkKICAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0gICAgaWYgKGNo
YWluKQotICAgICAgICBtX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKIH0KIAogR2V0QnlJ
ZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQpAQCAtNzEsNyArNjksNyBAQCBib29sIEdldEJ5SWRB
Y2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFI
ZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzQ4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4u
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTMsMTMgKzU0LDEyIEBAIHB1YmxpYzoK
ICAgICAKICAgICBHZXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAg
ICAgICAgLCBtX2NoYWluQ291bnQoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRB
Y2Nlc3MoCiAgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0
cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9
IDAsIHVuc2lnbmVkIGNoYWluQ291bnQgPSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAg
ICAgfkdldEJ5SWRBY2Nlc3MoKTsKICAgICAKQEAgLTcyLDggKzcyLDcgQEAgcHVibGljOgogICAg
IAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUu
Z2V0KCk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVy
biBtX2NoYWluLmdldCgpOyB9Ci0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hhaW5Db3VudDsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAog
ICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtOTEsOSAr
OTAsOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAg
QWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OwogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRp
dGlvblNldDsgLy8gRklYTUUgd2hhdCBhYm91dCBiYXJyaWVycz8KICAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShy
ZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUx
LDggQEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgICAgICBy
ZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
LmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUp
OwogICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRC
eUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJv
bShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1f
Y29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRl
cigKKyAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0KTsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGlu
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtNjQsNiArNjUsOSBAQCBQdXRCeUlkQWNj
ZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAKIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlz
aXRXZWFrKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpIGNvbnN0CiB7CisgICAgaWYgKCFt
X2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKQEAgLTc0LDE1ICs3OCwxMSBA
QCBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUu
Z2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhlYXA6Omlz
TWFya2VkKG1fY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFNldHRlcjoKICAgICBjYXNlIEN1c3RvbVNldHRlcjoKICAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZCht
X2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVk
ZSAiUHV0UHJvcGVydHlTbG90LmgiCkBAIC01Myw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICAKICAg
ICBQdXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBt
X2NoYWluQ291bnQoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTYyLDE0ICs2Miwx
NCBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAg
U3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAg
ICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25l
d1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQu
bV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsK
ICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTk1LDggKzk1LDcgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93
bmVyLAogICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2ln
bmVkIGNoYWluQ291bnQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1
c3RvbVNldHRlciwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmUpCiAgICAgewpAQCAtMTA0LDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRB
Y2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25l
ciwgc3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAg
ICAgIGlmIChjaGFpbikgewotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25l
ciwgY2hhaW4pOwotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7
Ci0gICAgICAgIH0KKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0
OwogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAg
IHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC0xNDYsMTcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3Ry
dWN0dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkg
fHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluLmdldCgpOwotICAgIH0KLSAg
ICAKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50
OwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHVi
Um91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAgLTE3OCw4ICsxNjQsNyBAQCBw
cml2YXRlOgogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3Ry
dWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1
bnNpZ25lZCBtX2NoYWluQ291bnQ7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9j
b25kaXRpb25TZXQ7CiAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21T
ZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29u
ZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykg
eworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIG91dC5wcmludChtX2tpbmQsICIgb2YgIiwgbV91aWQpOworICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCIgYXQg
Iiwgb2Zmc2V0KCksICIgd2l0aCBhdHRyaWJ1dGVzICIsIGF0dHJpYnV0ZXMoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgiIHdpdGggcHJvdG90eXBlICIsIGluQ29udGV4dChKU1ZhbHVlKHBy
b3RvdHlwZSgpKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFcXVpdmFs
ZW5jZToKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCAiLCBpbkNvbnRleHQocmVxdWlyZWRWYWx1
ZSgpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsK
K30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBi
YXNlKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBj
YXNlIFByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZz
ZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgQWJzZW5jZTogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSkgIT0gaW52YWxpZE9mZnNldCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PnN0b3JlZFByb3RvdHlwZSgpICE9IHByb3RvdHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGNh
c2UgQWJzZW5jZU9mU2V0dGVyOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgdW5zaWdu
ZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50QXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29y
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpICE9IHByb3RvdHlwZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAgIGlmICgh
YmFzZSB8fCBiYXNlLT5zdHJ1Y3R1cmUoKSAhPSBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8v
IENvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgc2luY2Ugd2UgY2Fubm90IHZlcmlmeSB0aGlz
IG9uZSB3aXRob3V0IGhhdmluZyB0aGUKKyAgICAgICAgICAgIC8vIG9iamVjdC4KKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgaXMgc29tZXdoYXQgcmFjeSwgYW5kIG1heWJlIG1vcmUgcmlza3kgdGhhbiB3ZSB3YW50
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0
NjQxCisgICAgICAgIAorICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpOworICAgICAgICBKU1ZhbHVlIGN1cnJlbnRW
YWx1ZSA9IGJhc2UtPmdldERpcmVjdChjdXJyZW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKGN1cnJl
bnRWYWx1ZSAhPSByZXF1aXJlZFZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNl
bmNlOgorICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFz
ZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KHN0cnVjdHVyZSwgYmFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBhbiBpbXB1cmUgcHJvcGVydHkgY2FuIGNhdXNl
IGEgcHJvcGVydHkgdG8gYXBwZWFyLCBhbmQgY2FuIGFsc28KKyAgICAvLyAic2hhZG93IiBhbiBl
eGlzdGluZyBKUyBwcm9wZXJ0eSBvbiB0aGUgc2FtZSBvYmplY3QuIEhlbmNlIGl0IGFmZmVjdHMg
Ym90aCBwcmVzZW5jZSBhbmQKKyAgICAvLyBhYnNlbmNlLiBJdCBkb2Vzbid0IGFmZmVjdCBBYnNl
bmNlT2ZTZXR0ZXIgYmVjYXVzZSBpbXB1cmUgcHJvcGVydGllcyBhcmVuJ3QgZXZlciBzZXR0ZXJz
LgorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFi
c2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9u
Ojppc1dhdGNoYWJsZVdoZW5WYWxpZCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2F0Y2hh
YmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOiB7
CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KHVpZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCB3aGVuIHNvbWUgdmFyaWFudCBvZiBpc1ZhbGlkIHJldHVybmVkIHRydWUsIHdo
aWNoCisgICAgICAgIC8vIGltcGxpZXMgdGhhdCB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRo
ZSBzdHJ1Y3R1cmUga25vd3Mgb2YgdGhlIHByb3BlcnR5LiBXZSBzaG91bGQKKyAgICAgICAgLy8g
YWxzbyBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlIFN0cnVjdHVyZSBpcyBhIGNhY2hlYWJsZSBkaWN0
aW9uYXJ5LCB3aGljaCBtZWFucyB3ZQorICAgICAgICAvLyBzaG9sZG4ndCBoYXZlIGEgVE9DVE9V
IHJhY2UgZWl0aGVyLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgIT0gaW52YWxpZE9m
ZnNldCk7CisgICAgICAgIAorICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgICAgIHN3
aXRjaCAoZWZmb3J0KSB7CisgICAgICAgIGNhc2UgTWFrZU5vQ2hhbmdlczoKKyAgICAgICAgICAg
IHNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuc3VyZVdhdGNoYWJpbGl0eToK
KyAgICAgICAgICAgIHNldCA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQoCisgICAgICAgICAgICAgICAgKkhlYXA6OmhlYXAoc3RydWN0dXJlKS0+dm0o
KSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoIXNldCB8fCAhc2V0LT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFz
ZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGls
bFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBiYXNlKQor
ICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisK
K2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogYmFzZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSwgYmFzZSkKKyAgICAgICAgJiYg
aXNXYXRjaGFibGVXaGVuVmFsaWQoc3RydWN0dXJlLCBlZmZvcnQpOworfQorCitib29sIFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlw
ZSgpICYmICFIZWFwOjppc01hcmtlZChwcm90b3R5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBpZiAoaGFzUmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVk
VmFsdWUoKQorICAgICAgICAmJiByZXF1aXJlZFZhbHVlKCkuaXNDZWxsKCkKKyAgICAgICAgJiYg
IUhlYXA6OmlzTWFya2VkKHJlcXVpcmVkVmFsdWUoKS5hc0NlbGwoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRp
dGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2Vk
KSBjb25zdAoreworICAgIGlmIChoYXNQcm90b3R5cGUoKSkKKyAgICAgICAgdHJhY2tlZC5jaGVj
ayhwcm90b3R5cGUoKSk7CisgICAgCisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKSkKKyAgICAg
ICAgdHJhY2tlZC5jaGVjayhyZXF1aXJlZFZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0
Y2ggKGNvbmRpdGlvbikgeworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2Vu
Y2U6CisgICAgICAgIG91dC5wcmludCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50
KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25k
aXRpb246OkFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxl
bmNlOgorICAgICAgICBvdXQucHJpbnQoIkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlD
b25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgUHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBQcm9wZXJ0eUNvbmRpdGlvbl9oCisK
KyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgUHJvcGVydHlD
b25kaXRpb24geworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIFByZXNlbmNlLAor
ICAgICAgICBBYnNlbmNlLAorICAgICAgICBBYnNlbmNlT2ZTZXR0ZXIsCisgICAgICAgIEVxdWl2
YWxlbmNlIC8vIEFuIGFkYXB0aXZlIHdhdGNocG9pbnQgb24gdGhpcyB3aWxsIGJlIGEgcGFpciBv
ZiB3YXRjaHBvaW50cywgYW5kIHdoZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9ucywgd2Ugd2ls
bCBzZXQgdGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1Y3R1cmUuCisg
ICAgfTsKKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV91aWQobnVs
bHB0cikKKyAgICAgICAgLCBtX2tpbmQoUHJlc2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQo
JnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQor
ICAgICAgICAsIG1fa2luZChBYnNlbmNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBz
aXplb2YodSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJl
c2VuY2VXaXRob3V0QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNv
bmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFByZXNlbmNlOworICAgICAgICByZXN1bHQudS5wcmVzZW5jZS5vZmZzZXQg
PSBvZmZzZXQ7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1
dGVzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJv
cGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZz
ZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRp
b24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0
KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2Vu
Y2U7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25k
aXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93
bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICBy
ZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJy
aWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1
bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBYnNlbmNlT2ZTZXR0ZXI7
CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRp
b24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBp
ZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAg
ICAgIHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdp
dGhvdXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFcXVpdmFsZW5jZTsK
KyAgICAgICAgcmVzdWx0LnUuZXF1aXZhbGVuY2UudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFs
dWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAgc3RhdGlj
IFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNDZWxsKCkgJiYgb3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndy
aXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJy
aWVyKHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIAorICAg
IEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wgaGFzT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07Cisg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCho
YXNPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldDsKKyAgICB9Cisg
ICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQg
PT0gUHJlc2VuY2U7IH07CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2Vu
Y2UuYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25z
dCB7IHJldHVybiAhISp0aGlzICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQgPT0gQWJz
ZW5jZU9mU2V0dGVyKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGhhc1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuYWJzZW5j
ZS5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9CisgICAgSlNW
YWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNSZXF1
aXJlZFZhbHVlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuZXF1aXZhbGVu
Y2UudmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91
aWQpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXN1bHQgKz0gdS5w
cmVzZW5jZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5jZS5hdHRyaWJ1
dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAgICAgICAg
Y2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNo
PEpTT2JqZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBFbmNv
ZGVkSlNWYWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQcmVzZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldCA9PSBvdGhl
ci51LnByZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2VuY2UuYXR0cmli
dXRlcyA9PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNhc2UgQWJzZW5j
ZToKKyAgICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdS5h
YnNlbmNlLnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOworICAgICAgICBj
YXNlIEVxdWl2YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWUg
PT0gb3RoZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9CisgICAgCisgICAg
Ly8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9y
IGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMuIElmCisgICAgLy8gZmFsc2UgaXMgcmV0
dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLSBm
b3IgZXhhbXBsZSBpZiB0aGVyZSBpcworICAgIC8vIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxl
bmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBnZW5lcmFsIG9mIHRo
ZSB0d28KKyAgICAvLyB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBz
cGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UKKyAgICAvLyBm
b3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUg
dWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlkCisgICAgLy8gY29uZGl0aW9ucyBhcmVuJ3QgY29t
cGF0aWJsZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChjb25zdCBQ
cm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlz
IHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0
aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpOworICAgIH0KKyAgICAKKyAgICAv
LyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVy
dHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxw
dHIpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVy
ZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8g
aXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJv
b2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBj
b25zdDsKKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBpcyBzdGlsbCB2YWxp
ZCByaWdodCBub3cgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIHN0cnVjdHVyZS4KKyAgICAvLyBN
YXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZCBzdHJ1Y3R1
cmUgYWxvbmUgZG9uJ3QgZ3VhcmFudGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbi4gVGhpcyBoYXBw
ZW5zIGZvciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3QgdGhhdCBtYXkgaGF2ZSBp
bXB1cmUKKyAgICAvLyBwcm9wZXJ0aWVzLiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBzdXBwbGllZCwg
dGhlbiBhICJ0cnVlIiByZXR1cm4gaW5kaWNhdGVzIHRoYXQgY2hlY2tpbmcgaWYKKyAgICAvLyBh
biBvYmplY3QgaGFzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgZ3VhcmFudGVlcyB0aGUgY29uZGl0aW9u
IHN0aWxsIGhvbGRzLiBJZiBhbiBvYmplY3QgaXMKKyAgICAvLyBzdXBwbGllZCwgdGhlbiB5b3Ug
bWF5IG5lZWQgdG8gdXNlIHNvbWUgb3RoZXIgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdCB0byBn
dWFyYW50ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uIGluIGFkZGl0aW9uIHRvIHRoZSBzdHJ1Y3R1
cmUgY2hlY2suCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNPYmplY3QqIGJh
c2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgY29u
ZGl0aW9uIGlzIG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNoYWJsZSBieSBl
bmFibGluZyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3IgZXhhbXBsZSwg
cmVwbGFjZW1lbnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNvbWUKKyAgICAv
LyBhY2Nlc3MgaXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVjdHVyZS4gVGhp
cyBpcyBtYWlubHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5IHByb3BlcnRp
ZXMgb3IgcHJvcGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBpdCdzIGFsd2F5
cyBzYWZlIHRvCisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0IHRoaXMgaXMg
Y2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmlsaXR5RWZmb3J0
IHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhhdCB3ZSBkb24n
dCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAgLy8gb2JqZWN0
LCBhbmQgaW1wbGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0byBiZSB3YXRj
aGFibGUgdGhlbiB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJsZS4gVGhpcyBp
cyBtYW5kYXRvcnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBpcyBhbHNvIHNv
bWV3aGF0CisgICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGluZyB3aGV0aGVy
IHRvIHdhdGNoIGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgorICAgICAgICAv
LyBub3QgZnJvbSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBzZWUgaWYgd2Ug
c2hvdWxkIGFkYXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5vdCBiZWluZyBp
bml0aWFsaXplZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRvbid0IGtub3cg
ZW5vdWdoCisgICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8gd2F0Y2ggLS0g
YXMgaW4sIHRoZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAgICAgICAvLyBz
dGFiaWxpemVkIHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBjb25kaXRpb24g
d2lsbCBob2xkIGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhvbGQgZm9yIGEg
d2hpbGUgYWxyZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAgCisgICAgICAg
IC8vIERvIHdoYXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5IGNhbiBiZSB3
YXRjaGVkLCBpZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNlcnZhYmxlIGVm
ZmVjdC4gRm9yIG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3VyZSB0aGF0IGEg
cHJvcGVydHkKKyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBlbmFibGVkIGlm
IGl0IGhhZG4ndCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlzCisgICAgICAg
IC8vIGZyb20gSklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcgd2F0Y2hwb2lu
dHMgaXMgbm90IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxpdHkKKyAgICB9
OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBj
b3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0
Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkg
d2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwg
V2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgLy8g
VGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFs
aWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBz
dHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNP
YmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2Vz
KSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50bHksIHRoaXMg
aXMgcmVxdWlyZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAgcmV0dXJuICEh
KnRoaXM7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hw
b2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0g
RXF1aXZhbGVuY2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2Jq
ZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExp
dmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFj
a2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaXNXYXRjaGFibGVX
aGVuVmFsaWQoU3RydWN0dXJlKiwgV2F0Y2hhYmlsaXR5RWZmb3J0KSBjb25zdDsKKworICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKKyAgICBLaW5kIG1fa2luZDsKKyAgICB1bmlvbiB7Cisg
ICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAg
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB9IHByZXNlbmNlOworICAgICAg
ICBzdHJ1Y3QgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZTsKKyAgICAgICAgfSBh
YnNlbmNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFs
dWU7CisgICAgICAgIH0gZXF1aXZhbGVuY2U7CisgICAgfSB1OworfTsKKworc3RydWN0IFByb3Bl
cnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvcGVy
dHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKAorICAgICAgICBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgUHJvcGVy
dHlDb25kaXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBK
U0M6OlByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6UHJvcGVydHlD
b25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBQcm9wZXJ0
eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05MCwxOSArOTAsMjIgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
RnJvbQogICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bj
b2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkpOwogICAgIAog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gaW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmUu
Z2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gaW5zdHJ1Y3Rpb25bN10udS5zdHJ1
Y3R1cmVDaGFpbi5nZXQoKTsKLSAgICBBU1NFUlQobmV3U3RydWN0dXJlKTsKLSAgICBBU1NFUlQo
Y2hhaW4pOwogICAgIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIFJl
ZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBpbnRlbmRlZENoYWluOwotICAgIGlmIChjaGFp
bikKLSAgICAgICAgaW50ZW5kZWRDaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKTsKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKGluc3RydWN0aW9uWzBdLnUu
b3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
KQorICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2Rl
KG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkpIHsKKyAgICAgICAg
Y29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+
dm0oKSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKKyAg
ICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgfQogICAgIAotICAgIHJldHVybiBQdXRC
eUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgaW50ZW5kZWRD
aGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKIH0KIAog
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgU3R1YkluZm9NYXAmIG1hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTE2NSwxNiArMTY4LDE0IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
CiAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAg
ICAgICAgICBpZiAoc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pIHsKLSAgICAg
ICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAot
ICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHViSW5mby0+dS5wdXRCeUlkVHJh
bnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcigKKyAgICAgICAgICAgICAg
ICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAg
ICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAg
c3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCiAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdl
dCgpLAotICAgICAgICAgICAgICAgIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkBAIC0yMTksMTUgKzIyMCwxMSBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAg
ICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIFJl
ZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgICAgICBpZiAo
YWNjZXNzLmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihu
ZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Zp
bGVkQmxvY2ssIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLmNoYWluKCkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlv
blNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1
cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhz
bG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6
OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwg
YWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNv
bmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKQEAgLTIzNSw3ICsyMzIsNyBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1
czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3RydWN0
dXJlLCBhY2Nlc3MuY2hhaW4oKSwgYWNjZXNzLmNoYWluQ291bnQoKSwgdWlkKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtp
bmQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tp
cDoKQEAgLTI1Myw3ICsyNTAsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRC
bG9jaywgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlh
bnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdl
dFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4
R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjpt
b3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zNjgsMjIgKzM2NSwxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2Jq
ZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICAKLSAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgICAgIGlm
ICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVk
U3RydWN0dXJlQ2hhaW4oZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKTsKLSAgICAgICAgCi0gICAg
ICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBzZXR0ZXJzIG9yIHJlYWQtb25s
eSBwcm9wZXJ0aWVzLCB0aGVuIGdpdmUgdXAuCi0gICAgICAgICAgICBpZiAoY2hhaW4tPm1heUlu
dGVyY2VwdFN0b3JlVG8odWlkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGUgcHJvdG90
eXBlIGNoYWluIGhhc24ndCBiZWVuIG5vcm1hbGl6ZWQgKGkuZS4gdGhlcmUgYXJlIHByb3hpZXMg
b3IgZGljdGlvbmFyaWVzKQotICAgICAgICAgICAgLy8gdGhlbiBnaXZlIHVwLiBUaGUgZGljdGlv
bmFyeSBjYXNlIHdvdWxkIG9ubHkgaGFwcGVuIGlmIHRoaXMgc3RydWN0dXJlIGhhcyBub3QgYmVl
bgotICAgICAgICAgICAgLy8gdXNlZCBpbiBhbiBvcHRpbWl6ZWQgcHV0X2J5X2lkIHRyYW5zaXRp
b24uIEFuZCByZWFsbHkgdGhlIG9ubHkgcmVhc29uIHdoeSB3ZSB3b3VsZAotICAgICAgICAgICAg
Ly8gYmFpbCBoZXJlIGlzIHRoYXQgSSBkb24ndCByZWFsbHkgZmVlbCBsaWtlIGhhdmluZyB0aGUg
b3B0aW1pemluZyBKSVQgZ28gYW5kIGZsYXR0ZW4KLSAgICAgICAgICAgIC8vIGRpY3Rpb25hcmll
cyBpZiB3ZSBoYXZlIGV2aWRlbmNlIHRvIHN1Z2dlc3QgdGhhdCB0aG9zZSBvYmplY3RzIHdlcmUg
bmV2ZXIgdXNlZCBhcwotICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBpbiBhIGNhY2hlYWJsZSBw
cm90b3R5cGUgYWNjZXNzIC0gaS5lLiB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCBzb21lIG9m
Ci0gICAgICAgICAgICAvLyB0aGUgb3RoZXIgY2hlY2tzIGJlbG93IHdpbGwgZmFpbC4KLSAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSB8fCAhY2hhaW4tPmlzTm9ybWFsaXplZCgp
KQorICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVy
dHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
dm0oKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIH0KICAgICAKQEAgLTM5NCw3ICszODAsNyBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIEFTU0VSVChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJl
c3VsdC5hcHBlbmRWYXJpYW50KAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KSk7CisgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNv
bmRpdGlvblNldCwgb2Zmc2V0KSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShy
ZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw4ICs0Myw3IEBAIFB1dEJ5SWRWYXJpYW50
JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7CiAg
ICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKICAgICBtX25ld1N0cnVj
dHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwotICAgIG1fY29uc3RhbnRDaGVja3MgPSBvdGhl
ci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0ZXJu
YXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAg
IG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0
dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5r
U3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC02NCwyOSArNjMsMjYgQEAgUHV0
QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoYwogCiBQdXRCeUlkVmFyaWFudCBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5t
X2tpbmQgPSBUcmFuc2l0aW9uOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVj
dHVyZTsKICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgaWYg
KHN0cnVjdHVyZUNoYWluKQotICAgICAgICBzdHJ1Y3R1cmVDaGFpbi0+Z2F0aGVyQ2hlY2tzKHJl
c3VsdC5tX2NvbnN0YW50Q2hlY2tzKTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2Fs
bExpbmtTdGF0dXMpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5t
X2tpbmQgPSBTZXR0ZXI7CiAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwot
ICAgIGlmIChjaGFpbikgewotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5tX2Nv
bnN0YW50Q2hlY2tzKTsKLSAgICAgICAgcmVzdWx0Lm1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50
ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgIH0KKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBj
b25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJlc3VsdC5t
X2NhbGxMaW5rU3RhdHVzID0gV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKTsKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMTM0LDE4ICsxMzAsNiBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjptYWtlc0Nh
bGxzKCkgY29uc3QKICAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKIH0KIAotU3RydWN0dXJl
U2V0IFB1dEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
a2luZCgpID09IFNldHRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJF
TEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKLX0KLQogYm9v
bCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90
aGVyKQogewogICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKQEAgLTE1NSw4ICsx
MzksOCBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgY2Fz
ZSBSZXBsYWNlOgogICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewogICAgICAgICBjYXNl
IFJlcGxhY2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50Q2hlY2tzLmlzRW1wdHko
KSk7Ci0gICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb25zdGFudENoZWNrcy5pc0VtcHR5KCkp
OworICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICBBU1NFUlQob3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xOTYsNiArMTgwLDcgQEAgYm9vbCBQdXRC
eUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIEFTU0VSVChtX29mZnNldCA9PSBy
ZXBsYWNlLm1fb2Zmc2V0KTsKICAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygp
KTsKICAgICBBU1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VS
VChyZXBsYWNlLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgCiAgICAgLy8gVGhpcyBz
b3J0IG9mIG1lcmdpbmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hp
Y2ggd2UgYWRkIGEgbmV3IGZpZWxkIHdoaWNoCiAgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0
dXJlIFMgd2hpbGUgdGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRo
aXMgZG9lc24ndApAQCAtMjMyLDE1ICsyMTcsMTMgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVt
cEluQ29udGV4dChQcmludAogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFRyYW5z
aXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKICAg
ICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwg
IiwgWyIsCi0gICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygpLCBj
b250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5D
b250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgp
LCAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVyOgogICAg
ICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChj
b25zdGFudENoZWNrcygpLCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgaWYgKG1fYWx0ZXJuYXRl
QmFzZSkKLSAgICAgICAgICAgIG91dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250
ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwgY29udGV4dCkpOworICAgICAgICAgICAgaW5D
b250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKICAgICAgICAgb3V0LnByaW50
KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAi
LCAqbV9jYWxsTGlua1N0YXR1cyk7CiAgICAgICAgIG91dC5wcmludCgiPiIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlz
aW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFB1dEJ5SWRWYXJp
YW50X2gKICNkZWZpbmUgUHV0QnlJZFZhcmlhbnRfaAogCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAj
aW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKIApA
QCAtNDYsNyArNDYsNiBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoKQogICAgICAgICA6
IG1fa2luZChOb3RTZXQpCiAgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICAg
ICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlk
T2Zmc2V0KQogICAgIHsKICAgICB9CkBAIC01NCwxNiArNTMsMTUgQEAgcHVibGljOgogICAgIFB1
dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgUHV0QnlJZFZhcmlhbnQm
IG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogCi0gICAgc3RhdGljIFB1dEJ5SWRW
YXJpYW50IHJlcGxhY2UoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNl
KGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9m
ZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAgICAgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAg
ICAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpOworICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CiAgICAgCiAg
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkBAIC03Niw2ICs3
NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKICAgICB9CiAg
ICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKICAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRl
cik7CkBAIC0xMDAsMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3Rv
cmFnZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNv
bnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBj
b25zdAogICAgIHsKQEAgLTExMSwxNCArMTExLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9vZmZzZXQ7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0
dXJuIG1fYWx0ZXJuYXRlQmFzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VT
dHJ1Y3R1cmUoKSBjb25zdDsKLSAgICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0
dXMoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAt
MTM2LDggKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJl
U2V0IG1fb2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAg
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2Jq
ZWN0KiBtX2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9j
b25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMzMgKzM3LDQ2IEBAIG5hbWVzcGFjZSBKU0MgewogU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6flN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQoKSB7IH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6cHVzaCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5LAogICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVy
LAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiYg
aGVhZCkKIHsKLSAgICBoZWFkID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50Pihob2xkZXIsIFdURjo6bW92ZShoZWFkKSk7CisgICAgaGVhZCA9IHN0ZDo6
bWFrZV91bmlxdWU8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4oa2V5LCBob2xkZXIs
IFdURjo6bW92ZShoZWFkKSk7CiAgICAgcmV0dXJuIGhlYWQuZ2V0KCk7CiB9CiAKIHZvaWQgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRh
aWwmKQogewotICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1pc2U6
IHN0dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCi0gICAgLy8gVGhhdCB3b3Jrcywg
YmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBs
aXN0LCBhbmQKLSAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9yIGZpcmluZyBpcyBy
b2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgotICAgIG1faG9sZGVyLmNvZGVCbG9jaygp
LT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgIGlmICghbV9rZXkgfHwgIW1f
a2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7
CisgICAgICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1pc2U6IHN0
dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCisgICAgICAgIC8vIFRoYXQgd29ya3Ms
IGJlY2F1c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3Mg
bGlzdCwgYW5kCisgICAgICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5n
IGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCisgICAgICAgIG1faG9sZGVyLmNv
ZGVCbG9jaygpLT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG1fa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2UpIHsKKyAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBwcmVzZW5jZSBjb25kaXRpb24s
IGxldCdzIHdhdGNoIHRoZSBwcm9wZXJ0eSBmb3IgcmVwbGFjZW1lbnRzLiBUaGlzIGlzIHByb2Zp
dGFibGUKKyAgICAgICAgLy8gZm9yIHRoZSBERkcsIHdoaWNoIHdpbGwgd2FudCB0aGUgcmVwbGFj
ZW1lbnQgc2V0IHRvIGJlIHZhbGlkIGluIG9yZGVyIHRvIGRvIGNvbnN0YW50IGZvbGRpbmcuCisg
ICAgICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKG1fa2V5Lm9iamVjdCgpKS0+dm0oKTsKKyAgICAg
ICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIG1fa2V5Lm9mZnNldCgpKTsKKyAgICB9CisKKyAgICBtX2tleS5vYmpl
Y3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm8oKQogewogfQogCi1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRj
aHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJu
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7Cisg
ICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhp
cywgbV9oZWFkKTsKIH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50
KAogICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYs
IENvZGVCbG9jayogY29kZUJsb2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykK
KyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXkpCiB7CiAgICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9
IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBz
dHViSW5mbykpOwpAQCAtNzIsNyArODUsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50KiBXYXRjaHBvCiAgICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1
YkluZm8pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50
KCk7CisgICAgcmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAog
I2lmbmRlZiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBA
IC00NiwxNSArNDcsMTEgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6
IAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbyYgaG9sZGVyKQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIp
CisgICAgICAgIDogbV9rZXkoa2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAg
ICAgLCBtX25leHQoV1RGOjptb3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02Miw2ICs1OSw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
KCk7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIHB1
c2goCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAg
IFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4mIGhlYWQpOwogCkBAIC02
OSw2ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNv
bnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBtX2tleTsKICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1f
aG9sZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50PiBtX25leHQ7CiB9OwpAQCAtODMsMTEgKzgyLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSk7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKik7CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQog
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1Yklu
Zm87IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDgsOSArNDgsMTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQog
ICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9kaXJlY3Q6CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9w
dFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAg
ICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZToKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8g
VGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1l
bW9yeQpAQCAtNzUsOCArNzgsMTAgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFr
UmVmZXJlbgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQo
KSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0
cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1
LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQ
b2ludGVyKAorICAgICAgICAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0KS5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJJ
bnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgog
I2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCkBAIC0xMTMsNyArMTE0LDcgQEAgc3Ry
dWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIC8vIFB1dEJ5SWQqCiAKLSAgICB2b2lkIGlu
aXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJl
dmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4sIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24oVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0LCBib29s
IGlzRGlyZWN0KQogICAgIHsKICAgICAgICAgaWYgKGlzRGlyZWN0KQogICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7CkBAIC0xMjIsNyAr
MTIzLDcgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3RydWN0
dXJlKTsKICAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25l
ciwgc3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5zZXQodm0s
IG93bmVyLCBjaGFpbik7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0LnJlbGVhc2VSYXdQb2ludGVyKCk7CiAgICAgfQogCiAgICAgdm9p
ZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJh
c2VPYmplY3RTdHJ1Y3R1cmUpCkBAIC0xNzUsMTAgKzE3NiwxMSBAQCBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm8gewogICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICB9CiAgICAgICAgIAotICAgIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hw
b2ludCgKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBjb25kaXRpb24gPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVm
ZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxv
Y2ssIHRoaXMpOworICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29u
ZGl0aW9uKTsKICAgICB9CiAgICAgCiAgICAgaW50OF90IGFjY2Vzc1R5cGU7CkBAIC0yMTcsMjMg
KzIxOSwxMiBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIH0gZ2V0
QnlJZFNlbGY7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBwcm90b3R5cGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBib29sIGlz
RGlyZWN0OwotICAgICAgICB9IGdldEJ5SWRQcm90bzsKLSAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBjb3VudCA6IDMxOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA6
IDE7Ci0gICAgICAgIH0gZ2V0QnlJZENoYWluOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAg
ICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBnZXRCeUlkTGlzdDsK
ICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJl
PiBwcmV2aW91c1N0cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBzdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNo
YWluPiBjaGFpbjsKKyAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKICAgICAgICAg
fSBwdXRCeUlkVHJhbnNpdGlvbjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc5
LDcgKzE3NzksMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8KICAgICAgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFzdGF0dXNbaV0uYWx0ZXJuYXRlQmFzZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyB0aGluZyB3b24ndCBnaXZlIHVzIGEgdmFyaWFudCB0aGF0
IGludm9sdmVzIHByb3RvdHlwZXMuIElmIGl0IGRpZCwgd2UnZAorICAgICAgICAgICAgICAgICAg
ICAvLyBoYXZlIG1vcmUgd29yayB0byBkbyBoZXJlLgorICAgICAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkp
OworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25z
dGFudFJlc3VsdCA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0
YW50UHJvcGVydHkodmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKQEAgLTIwNjAsMzAgKzIwNjMsMjIgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVl
IGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RydWN0dXJlU2V0IGJh
c2VTZXQ7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgU3RydWN0dXJlU2V0IHNl
dCA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCk7CisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRC
eU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2Vz
KSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gZ2V0Q2FzZS5zZXQoKTsKICAgICAg
ICAgICAgIHNldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKLSAgICAg
ICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAgICBiYXNl
Rm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZS5tX3ZhbHVlOwotICAgICAgICAgICAgSlNW
YWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25z
dGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCwgdmFyaWFudC5i
YXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjb25z
dGFudFJlc3VsdCkgeworICAgICAgICAgICAgaWYgKGdldENhc2UubWV0aG9kKCkua2luZCgpICE9
IEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudCkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5t
YWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CiAgICAg
ICAgICAgICB0aGlzUmVzdWx0LnNldCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAgICAg
ICAgICAgICAgICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCisgICAgICAgICAgICAg
ICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKICAgICAgICAgICAgICAgICBtX3N0YXRl
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlz
UmVzdWx0KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9r
ZXkoa2V5KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsKK30KKwor
dm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omluc3RhbGwoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1f
a2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJm1fc3Ry
dWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbV9r
ZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkobV9rZXkudWlkKCkpOwor
ICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+cHJv
cGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICBzZXQtPmFkZCgmbV9w
cm9wZXJ0eVdhdGNocG9pbnQpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludDo6ZmlyZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgLy8g
T25lIG9mIHRoZSB3YXRjaHBvaW50cyBmaXJlZCwgYnV0IHRoZSBvdGhlciBvbmUgZGlkbid0LiBN
YWtlIHN1cmUgdGhhdCBuZWl0aGVyIG9mIHRoZW0gYXJlCisgICAgLy8gaW4gYW55IHNldCBhbnlt
b3JlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGJ5IGFsbG93aW5nIHVzIHRvIHJlaW5zdGFsbCB0
aGUgd2F0Y2hwb2ludHMKKyAgICAvLyB3aGVyZXZlciBmcm9tIHNjcmF0Y2guCisgICAgaWYgKG1f
c3RydWN0dXJlV2F0Y2hwb2ludC5pc09uTGlzdCgpKQorICAgICAgICBtX3N0cnVjdHVyZVdhdGNo
cG9pbnQucmVtb3ZlKCk7CisgICAgaWYgKG1fcHJvcGVydHlXYXRjaHBvaW50LmlzT25MaXN0KCkp
CisgICAgICAgIG1fcHJvcGVydHlXYXRjaHBvaW50LnJlbW92ZSgpOworICAgIAorICAgIGlmICht
X2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkg
eworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
aWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBt
X2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3Ry
aW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tl
eSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBzdHJp
bmdEZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2st
PmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRj
aHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWlsKTsKK30KKwordm9pZCBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9p
bnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAg
cHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fc3RydWN0dXJlV2F0Y2hwb2ludCk7Cisg
ICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQg
PQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZz
ZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50OjpmaXJl
SW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIHB0cmRpZmZf
dCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAgQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3Byb3BlcnR5V2F0Y2hwb2ludCk7CisgICAgCisgICAg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAg
ICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4o
CisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAg
IAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lk
IGluc3RhbGwoKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBTdHJ1Y3R1cmVXYXRjaHBvaW50IDog
cHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RydWN0dXJlV2F0Y2hw
b2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRl
cm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICBjbGFzcyBQcm9w
ZXJ0eVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAg
ICBQcm9wZXJ0eVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1
YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07
CisgICAgCisgICAgdm9pZCBmaXJlKGNvbnN0IEZpcmVEZXRhaWwmKTsKKyAgICAKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwor
ICAgIFN0cnVjdHVyZVdhdGNocG9pbnQgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50OworICAgIFByb3Bl
cnR5V2F0Y2hwb2ludCBtX3Byb3BlcnR5V2F0Y2hwb2ludDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisg
ICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoa2V5LndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgha2V5LndhdGNoaW5nUmVxdWlyZXNSZXBsYWNl
bWVudFdhdGNocG9pbnQoKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgpKTsK
KyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRj
aHBvaW50KHRoaXMpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6Zmly
ZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAobV9rZXkuaXNX
YXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAg
ICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChERkc6
OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAg
ICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIp
IG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgfQorICAgIAorICAgIFN0cmluZ1ByaW50
U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFkYXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFp
bGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0cmluZ0ZpcmVEZXRhaWwgc3RyaW5nRGV0YWls
KG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5qZXR0aXNv
bigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2ludCwg
Q291bnRSZW9wdGltaXphdGlvbiwgJnN0cmluZ0RldGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9Cisg
ICAgCisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsMTQgQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFu
ZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1
bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENo
ZWNrcyk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5k
bGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJl
U2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBl
IG9wID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0
ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9m
ZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZz
ZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zm
c2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSog
YmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRC
eU9mZnNldCk7CisgICAgCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5SWRWYXJpYW50IGFu
ZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFyaWFudFR5cGU+CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmIHZhcmlhbnQp
OworICAgICAgICAKICAgICB2b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBkZXN0aW5h
dGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CkBAIC0yMTIsNyArMjE5
LDMyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAogICAgICAgICBOb2RlKiBi
YXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJ
ZFN0YXR1cyYsCiAgICAgICAgIGJvb2wgaXNEaXJlY3QpOwotICAgIHZvaWQgZW1pdENoZWNrcyhj
b25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7CisgICAgCisgICAgLy8gRWl0aGVy
IHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9u
LiBSZXR1cm5zIGZhbHNlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBubyBsb25nZXIgaG9sZHMs
IGFuZCB0aGVyZWZvcmUgbm8gcmVhc29uYWJsZSBjaGVjayBjYW4gYmUgZW1pdHRlZC4KKyAgICBi
b29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCisgICAgR2V0
QnlPZmZzZXRNZXRob2QgcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2QpOworICAg
IAorICAgIC8vIEVpdGhlciByZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1pdCBhIGNoZWNrIGZv
ciB0aGlzIGNvbmRpdGlvbi4gSXQgbXVzdCBiZSBhIFByZXNlbmNlCisgICAgLy8gY29uZGl0aW9u
LiBJdCB3aWxsIGF0dGVtcHQgdG8gcHJvbW90ZSBhIFByZXNlbmNlIGNvbmRpdGlvbiB0byBhbiBF
cXVpdmFsZW5jZSBjb25kaXRpb24uCisgICAgLy8gRW1pdHMgY29kZSBmb3IgdGhlIGxvYWRlZCB2
YWx1ZSB0aGF0IHRoZSBjb25kaXRpb24gZ3VhcmRzLCBhbmQgcmV0dXJucyBhIG5vZGUgY29udGFp
bmluZworICAgIC8vIHRoZSBsb2FkZWQgdmFsdWUuIFJldHVybnMgbnVsbCBpZiB0aGUgY29uZGl0
aW9uIG5vIGxvbmdlciBob2xkcy4KKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwbGFuTG9hZChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5
cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiwg
Tm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsK
KyAgICAKKyAgICAvLyBDYWxscyBjaGVjaygpIGZvciBlYWNoIGNvbmRpdGlvbiBpbiB0aGUgc2V0
OiB0aGF0IGlzLCBpdCBlaXRoZXIgZW1pdHMgY2hlY2tzIG9yIHJlZ2lzdGVycworICAgIC8vIHdh
dGNocG9pbnRzIChvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28pIHRvIG1ha2UgdGhlIGNvbmRp
dGlvbnMgaG9sZC4gSWYgYW55IG9mIHRob3NlCisgICAgLy8gY29uZGl0aW9ucyBhcmUgbm8gbG9u
Z2VyIGNoZWNrYWJsZSwgcmV0dXJucyBmYWxzZS4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0Jik7CisgICAgCisgICAgLy8gQ2FsbHMgY2hlY2soKSBmb3Ig
dGhvc2UgY29uZGl0aW9ucyB0aGF0IGFyZW4ndCB0aGUgc2xvdCBiYXNlLCBhbmQgY2FsbHMgbG9h
ZCgpIGZvciB0aGUgc2xvdAorICAgIC8vIGJhc2UuIERvZXMgYSBjb21iaW5hdGlvbiBvZiB3YXRj
aHBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgY2hlY2sgZW1pc3Npb24gdG8gZ3VhcmQgdGhlCisgICAg
Ly8gY29uZGl0aW9ucywgYW5kIGVtaXRzIGNvZGUgdG8gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUg
c2xvdCBiYXNlLiBSZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2
YWx1ZS4gUmV0dXJucyBudWxsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyB3ZXJlIG5vIGxvbmdl
ciBjaGVja2FibGUuCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcGxhbkxvYWQoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQp
OwogCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVhckNhY2hl
cygpOwpAQCAtNzA2LDYgKzczOCw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogY2VsbENv
bnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0ZSB0byBlbWl0
UHJvcGVydHlDaGVjaywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3VycmVudGx5LAor
ICAgICAgICAvLyB0aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFByb3BlcnR5Q2hl
Y2soKSBzaW5jZSB3ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKKyAgICAgICAgLy8gb2Jq
ZWN0J3Mgc3RydWN0dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nvc250YW50Lgog
ICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0KTsKICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHN0cnVjdHVyZSkpLCBvYmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7
CkBAIC0yMjQwLDE1ICsyMjc1LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3Rh
bnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJh
c2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9k
ZVR5cGUgb3ApCiB7Ci0gICAgaWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgaWYg
KEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+
YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkgewotICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChj
b25zdGFudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgTm9kZSogcHJvcGVydHlTdG9y
YWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBiYXNlOwpAQCAtMjI2NCw2ICsyMjkyLDE4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9CiAKK05vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkK
K3sKKyAgICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBj
b25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUo
KSwgc3RydWN0dXJlU2V0LCBvZmZzZXQpKSB7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJl
ZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0LCBvcCk7Cit9CisKIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQogewogICAgIE5v
ZGUqIHByb3BlcnR5U3RvcmFnZTsKQEAgLTIyODEsMTAgKzIzMjEsMjE2IEBAIE5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3ImIHZlY3RvcikKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCit7CisgICAgaWYgKG1fZ3JhcGgud2F0Y2hD
b25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAg
IGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tT
dHJ1Y3R1cmUsCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpKSwKKyAgICAgICAgd2Vha0pTQ29uc3RhbnQoY29uZGl0aW9uLm9iamVjdCgpKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwcm9t
b3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QpCit7CisgICAgaWYgKG1ldGhv
ZC5raW5kKCkgPT0gR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlCisgICAgICAg
ICYmIG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPmRmZ1Nob3VsZFdhdGNoKCkpIHsK
KyAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJv
cGVydHkobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLCBtZXRob2QucHJvdG90eXBlKCktPnN0
cnVjdHVyZSgpLCBtZXRob2Qub2Zmc2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zm
c2V0TWV0aG9kOjpjb25zdGFudChtX2dyYXBoLmZyZWV6ZShjb25zdGFudCkpOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gbWV0aG9kOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBh
cnNlcjo6cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikK
K3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUGxhbm5pbmcgYSBsb2FkOiAi
LCBjb25kaXRpb24sICJcbiIpOworICAgIAorICAgIC8vIFdlIG1pZ2h0IHByb21vdGUgdGhpcyB0
byBFcXVpdmFsZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBzdWNoIHBy
b21vdGlvbgorICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5IHRoaXMg
Y2Fubm90IGJlIGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8v
IE5vbmUgb2YgdGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEgbG9hZCBv
ZiBhbiBFcXVpdmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBwb3J0aW5n
IGl0IHdvdWxkIGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVMRUFTRV9B
U1NFUlQoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwor
ICAgIAorICAgIC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRoaXMsIGZy
b20gbW9zdCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAgLy8gMSkg
V2F0Y2hwb2ludCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBhIGNvbnN0
YW50IG5vZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIgY29kZSBp
cyBlbWl0dGVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMgbmV2ZXIg
cmVnaXN0ZXJlZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBjb2RlIGFu
ZCB3ZSB3b24ndCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QKKyAgICAv
LyAgICB0cmFuc2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJsZSByaWdo
dCBub3cuCisgICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1
cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQgYnkgdGhl
CisgICAgLy8gICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNoIHRoZSBz
dHJ1Y3R1cmUgYW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8vICAgIGNv
bmRpdGlvbiwgc2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBjb25zdGFu
dCBpbiBJUiB3aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUgc3RydWN0
dXJlIGFueXdheSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUgY29uZGl0
aW9uLgorICAgIC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJy
ZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0aGUKKyAg
ICAvLyAgICBERkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSBh
bmQgIWRmZ1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0aGUgY29u
ZGl0aW9uLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRvIGVtaXQg
YSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5vdCB3YXRj
aGFibGUuIEVtaXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQgYSBsb2Fk
LgorICAgIC8vCisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBHaXZlIHVw
IGFuZCByZXR1cm4gbnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWdyZWUgb24gd2hh
dCB0aGUgc3RydWN0dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGluZyB0aGVzZSB2YXJp
b3VzCisgICAgLy8gY2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9u
Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRvIHByb21v
dGUgUHJlc2VuY2UgdG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5nIGFueXRo
aW5nIGVsc2UKKyAgICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4gQWxzbywg
dGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0CisgICAg
Ly8gd2UgZG9uJ3Qgd2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVxdWl2YWxl
bmNlIChzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAoMiksIGFuZCAo
MykgYWJvdmUpLgorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQoY29uZGl0aW9uLm9m
ZnNldCgpKSkgeworICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNhdXNlIG9ubHkgdGhl
IEdDIGNhbiBjYXVzZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdhcmJhZ2UKKyAgICAg
ICAgLy8gdmFsdWUuCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRpb24ub2JqZWN0KCkt
PmdldERpcmVjdChjb25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiBlcXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgICAgICBj
b25kaXRpb24ub2JqZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOworICAgICAgICBpZiAo
bV9ncmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgICAg
ICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKHZhbHVl
KSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ2xsIGhhdmUgdG8gbWF0
ZXJpYWxpemUgdGhlIGNvbmRpdGlvbidzIGJhc2UgYXMgYSBjb25zdGFudCBpbiBERkcgSVIuIE9u
Y2UKKyAgICAvLyB3ZSBkbyB0aGlzLCB0aGUgZnJvemVuIHZhbHVlIHdpbGwgaGF2ZSBpdHMgb3du
IGlkZWEgb2Ygd2hhdCB0aGUgc3RydWN0dXJlIGlzLiBVc2UgdGhhdCBmcm9tCisgICAgLy8gbm93
IG9uIGp1c3QgYmVjYXVzZSBpdCdzIGxlc3MgY29uZnVzaW5nLgorICAgIEZyb3plblZhbHVlKiBi
YXNlID0gbV9ncmFwaC5mcmVlemUoY29uZGl0aW9uLm9iamVjdCgpKTsKKyAgICBzdHJ1Y3R1cmUg
PSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiB0aGUgc3RydWN0dXJl
IHRoYXQgd2UndmUgcmVnaXN0ZXJlZCBtYWtlcyB0aGUgY29uZGl0aW9uIGhvbGQuIElmIG5vdCwg
anVzdCBnaXZlCisgICAgLy8gdXAuIFRoaXMgaXMgY2FzZSAoNSkgYWJvdmUuCisgICAgaWYgKCFj
b25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJl
dHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgIAorICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUg
aXMgd2F0Y2hlZCBieSB0aGUgREZHIGFscmVhZHksIHRoZW4ganVzdCB1c2UgdGhpcyBmYWN0IHRv
IGVtaXQgdGhlIGxvYWQuCisgICAgLy8gVGhpcyBpcyBjYXNlICgyKSBhYm92ZS4KKyAgICBpZiAo
c3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICByZXR1cm4gcHJvbW90ZVRvQ29u
c3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlv
bi5vZmZzZXQoKSkpOworICAgIAorICAgIC8vIElmIHdlIGNhbiB3YXRjaCB0aGUgY29uZGl0aW9u
IHJpZ2h0IG5vdywgdGhlbiB3ZSBjYW4gZW1pdCB0aGUgbG9hZCBhZnRlciB3YXRjaGluZyBpdC4g
VGhpcworICAgIC8vIGlzIGNhc2UgKDMpIGFib3ZlLgorICAgIGlmIChtX2dyYXBoLndhdGNoQ29u
ZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRC
eU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgp
KSk7CisgICAgCisgICAgLy8gV2UgY2FuJ3Qgd2F0Y2ggYW55dGhpbmcgYnV0IHdlIGtub3cgdGhh
dCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgc2F0aXNmaWVzIHRoZSBjb25kaXRpb24uIFNvLAorICAg
IC8vIGNoZWNrIGZvciB0aGF0IHN0cnVjdHVyZSBhbmQgdGhlbiBlbWl0IHRoZSBsb2FkLgorICAg
IGFkZFRvR3JhcGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLCAKKyAgICAgICAgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICBhZGRUb0dyYXBoKEpT
Q29uc3RhbnQsIE9wSW5mbyhiYXNlKSkpOworICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChH
ZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNl
dCgpKSk7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IEdldEJ5T2Zm
c2V0TWV0aG9kJiBtZXRob2QsCisgICAgTm9kZVR5cGUgb3ApCit7CisgICAgc3dpdGNoIChtZXRo
b2Qua2luZCgpKSB7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6
CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QuY29u
c3RhbnQoKSkpOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBl
OiB7CisgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcElu
Zm8obWV0aG9kLnByb3RvdHlwZSgpKSk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNl
dChwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgp
LCBvcCk7CisgICAgfQorICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAg
IC8vIFdpbGwgbmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgTm9k
ZVR5cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQoY29u
ZGl0aW9uKTsKKyAgICByZXR1cm4gbG9hZChwcmVkaWN0aW9uLCBtX2dyYXBoLmlkZW50aWZpZXJz
KCkuZW5zdXJlKGNvbmRpdGlvbi51aWQoKSksIG1ldGhvZCwgb3ApOworfQorCitib29sIEJ5dGVD
b2RlUGFyc2VyOjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0KQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0
aW9uIDogY29uZGl0aW9uU2V0KSB7CisgICAgICAgIGlmICghY2hlY2soY29uZGl0aW9uKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dl
dEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCJjb25kaXRpb25TZXQgPSAiLCBjb25kaXRpb25TZXQsICJcbiIpOworICAg
IAorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlvblNldCkgeworICAgICAgICBzd2l0
Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2U6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsgLy8gU2hvdWxk
IG9ubHkgc2VlIGV4YWN0bHkgb25lIG9mIHRoZXNlLgorICAgICAgICAgICAgcmVzdWx0ID0gcGxh
bkxvYWQoY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAg
ICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIWNoZWNrKGNvbmRpdGlvbikpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghIXJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwgTm9kZVR5cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9k
ID0gcGxhbkxvYWQoY29uZGl0aW9uU2V0KTsKKyAgICByZXR1cm4gbG9hZCgKKyAgICAgICAgcHJl
ZGljdGlvbiwKKyAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25kaXRpb25T
ZXQuc2xvdEJhc2VDb25kaXRpb24oKS51aWQoKSksCisgICAgICAgIG1ldGhvZCwgb3ApOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjps
b2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJiB2YXJpYW50KQogewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNlbGxD
b25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ld
LnN0cnVjdHVyZSgpKTsKKyAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKKyAg
ICAKKyAgICBTcGVjdWxhdGVkVHlwZSBsb2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlwZSBsb2Fk
T3A7CisgICAgaWYgKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgeworICAgICAgICBsb2FkUHJl
ZGljdGlvbiA9IFNwZWNDZWxsT3RoZXI7CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRlclNldHRl
ckJ5T2Zmc2V0OworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gcHJlZGlj
dGlvbjsKKyAgICAgICAgbG9hZE9wID0gR2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIGxvYWRlZFZhbHVlOworICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5
KCkpCisgICAgICAgIGxvYWRlZFZhbHVlID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFyaWFudC5j
b25kaXRpb25TZXQoKSwgbG9hZE9wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUg
PSBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCB2
YXJpYW50LnN0cnVjdHVyZVNldCgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgp
LAorICAgICAgICAgICAgbG9hZE9wKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgYmFja3dh
cmRzIHByb3BhZ2F0aW9uIGtub3dzIHRoYXQgd2UndmUgdXNlZCBiYXNlLgorICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgYmFzZSk7CisgICAgCisgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMwNywxOCArMjU1MywzNiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigp
KQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJ
ZCgpOwotICAgIAorICAgICAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2Vz
OworICAgICAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNr
cyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAgICAg
ICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNlIGlu
IHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNrcyBh
bmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAodW5z
aWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50
SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFudElu
ZGV4XS5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgR2V0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAg
ICAgICAgIGlmICh2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNl
dENhc2UoCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNldCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5v
ZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxv
YWQodmFyaWFudC5jb25kaXRpb25TZXQoKSk7CisgICAgICAgICAgICBpZiAoIW1ldGhvZCkgewor
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwK
KyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZXMuYXBw
ZW5kKE11bHRpR2V0QnlPZmZzZXRDYXNlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIG1ldGhvZCkp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAg
ICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKKyAg
ICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0QnlPZmZzZXQKICAgICAgICAgTXVsdGlH
ZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEuYWRk
KCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gZ2V0QnlJZFN0YXR1cy52YXJpYW50cygpOwor
ICAgICAgICBkYXRhLT5jYXNlcyA9IGNhc2VzOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVt
YmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbk9wZXJhbmQpLAogICAgICAgICAgICAgYWRkVG9HcmFwaChNdWx0aUdldEJ5T2Zmc2V0
LCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwpAQCAtMjMyOCwzMCAr
MjU5MiwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIEFTU0VS
VChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CiAgICAgR2V0QnlJZFZhcmlhbnQg
dmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAgICAgICAgICAgICAgCisgICAgTm9kZSog
bG9hZGVkVmFsdWUgPSBsb2FkKHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZh
cmlhbnQpOworICAgIGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlk
LCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkK
ICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwog
ICAgIAotICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7Ci0gICAgCi0gICAgZW1pdENoZWNr
cyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotCi0gICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKQotICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVC
YXNlKCkpOwotICAgIAotICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQgdG8KLSAgICAvLyBl
bnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxp
dmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCi0gICAgLy8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMu
IFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1
Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcg
dGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UuCi0gICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNl
KQotICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZSk7Ci0gICAgCi0gICAg
Tm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgdmFyaWFudC5j
YWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0gICAgICAgIGJh
c2UsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9m
ZnNldCgpLAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0
ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICAKICAgICBpZiAoIXZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSkgewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3Bl
cmFuZCksIGxvYWRlZFZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4OCw3ICsyNjM4LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyAgICBzaW5jZSB3
ZSBvbmx5IHJlYWxseSBjYXJlIGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBu
b3QgZ29pbmcgdG8gdGFrZSB0aGF0CiAgICAgLy8gICAgc2hvcnRjdXQuCiAgICAgaW50IG5leHRS
ZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
LSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJ
bW1lZGlhdGVOYWtlZFNldCk7CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAKICAgICBoYW5kbGVDYWxsKAogICAg
ICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2Fs
bCwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLApAQCAtMjQyMiwxNyArMjY3MiwyMCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQot
ICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgp
OwotICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlh
bnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJ
bmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0
dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
KyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGgu
Y29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgCiAgICAgICAg
IE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXRE
YXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFu
dHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CkBAIC0yNDU0LDcgKzI3MDcsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJ
ZCgKICAgICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tzKHZh
cmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25k
aXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkp
OwogICAgIApAQCAtMjUwNSwxOSArMjc2MSwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeUlkKAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0
dGVyOiB7Ci0gICAgICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgIAotICAg
ICAgICBhZGRUb0dyYXBoKAotICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAg
ICAKLSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgYmFz
ZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAgCi0g
ICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAg
ICBTcGVjQ2VsbE90aGVyLCBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmll
ck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIEdldEdldHRlclNldHRlckJ5
T2Zmc2V0KTsKKyAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIs
IGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgICAgICBpZiAoIWxvYWRlZFZh
bHVlKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2
YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRUb0dyYXBoKEdldFNl
dHRlciwgbG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI1NDUsNyArMjc5Myw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKICAgICAKICAgICAgICAgaW50IG5l
eHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZTsKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIG9yaWdpbmFs
QmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5l
eHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0KTsK
ICAgICAKICAgICAgICAgaGFuZGxlQ2FsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiAr
ODksOSBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAg
ICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVS
ZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBmb3IgKEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNl
cyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAx
ODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50
LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CkBAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Nl
bGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+
IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOwogICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ+IHdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRz
OwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQs
MjEgKzI5NCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBn
ZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRy
dWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGlu
Z3MgdG8gdGhpcy4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAg
ICAgICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0cnVjdHVyZVNldCgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52
YXJpYW50cy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJl
bW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0
YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSYgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGdl
dENhc2Uuc2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChn
ZXRDYXNlLnNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5j
YXNlc1tpLS1dID0gZGF0YS5jYXNlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLmNhc2VzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAx
KQorICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhc2VzLnNpemUoKSAhPSAxKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbWl0
R2V0QnlPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFz
ZVZhbHVlLCBkYXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGRhdGEuY2FzZXNb
MF0ubWV0aG9kKCksIGRhdGEuaWRlbnRpZmllck51bWJlcik7CiAgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0z
NzQsOCArMzczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51
bVZhcmlhbnRzKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0u
Y29uc3RhbnRDaGVja3MoKS5pc0VtcHR5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0
YXR1c1tpXS5hbHRlcm5hdGVCYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0
dXNbaV0uY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2UgY291bGQgaGFuZGxlIHByb3RvdHlwZSBjYXNlcy4KICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTAzODYKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzkyLDcgKzM5MCwxMiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9t
dWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50
cyA9IHN0YXR1cy52YXJpYW50cygpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgR2V0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhLT5jYXNlcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVj
dHVyZVNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9k
Ojpsb2FkKHZhcmlhbnQub2Zmc2V0KCkpKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb011bHRpR2V0QnlPZmZzZXQoZGF0YSk7CiAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CkBAIC00MzIsOSArNDM1LDMxIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KQotICAgICAgICAgICAg
ICAgICAgICBhZGRDaGVja3Mob3JpZ2luLCBpbmRleEluQmxvY2ssIHN0YXR1c1tpXS5jb25zdGFu
dENoZWNrcygpKTsKKworICAgICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52
YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlvblNldCgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihj
b25kaXRpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmpl
Y3QoKS0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
bi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgbm9kZS0+b3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldChzdHJ1Y3R1cmUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnRDb25zdGFudEZvclVzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBub2RlLT5vcmlnaW4sIGNvbmRpdGlvbi5vYmplY3QoKSwgS25vd25D
ZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMo
KSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeU9mZnNldChpbmRleEluQmxv
Y2ssIG5vZGUsIGJhc2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKQEAgLTUy
OSw0MSArNTU0LDY4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKICAgICB9CisgICAgCisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJ
bkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICAgICAgLy8gV2hlbiB3ZSBnZXQgdG8g
aGVyZSB3ZSBoYXZlIGFscmVhZHkgZW1pdHRlZCBhbGwgb2YgdGhlIHJlcXVpc2l0ZSBjaGVja3Mg
Zm9yIGV2ZXJ5dGhpbmcuCisgICAgICAgIC8vIFNvLCB3ZSBqdXN0IG5lZWQgdG8gZW1pdCB3aGF0
IHRoZSBtZXRob2Qgb2JqZWN0IHRlbGxzIHVzIHRvIGVtaXQuCiAgICAgICAgIAorICAgICAgICBz
d2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6
SW52YWxpZDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1l
dGhvZDo6Q29uc3RhbnQ6CisgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5v
ZGUsIG1ldGhvZC5jb25zdGFudCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAgICAgZW1p
dEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZp
ZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6
IHsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3Rh
bnQoCisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBub2RlLT5vcmlnaW4sIG1ldGhvZC5w
cm90b3R5cGUoKSk7CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoCisgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBub2RlLCBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpLCBpZGVudGlm
aWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9IH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAogICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKICAgICB7Ci0g
ICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNo
aWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleElu
QmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAg
IAotICAgICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAgICBpZiAodmFyaWFudC5hbHRl
cm5hdGVCYXNlKCkpCi0gICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2VWYWx1
ZS5tX3ZhbHVlOwotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29u
c3RhbnRQcm9wZXJ0eShiYXNlRm9yTG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlh
bnQub2Zmc2V0KCkpKSB7CisgICAgICAgIC8vIFdlIGFyZW4ndCBzZXQgdXAgdG8gaGFuZGxlIHBy
b3RvdHlwZSBzdHVmZi4KKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUg
PSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZVZhbHVlLm1fdmFsdWUsIHZhcmlh
bnQuc3RydWN0dXJlU2V0KCksIHZhcmlhbnQub2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICBtX2dy
YXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSkgewotICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2luc2VydGlv
blNldC5pbnNlcnRDb25zdGFudChpbmRleEluQmxvY2ssIG9yaWdpbiwgdmFyaWFudC5hbHRlcm5h
dGVCYXNlKCkpOwotICAgICAgICAgICAgY2hpbGRFZGdlID0gRWRnZShjaGlsZCwgS25vd25DZWxs
VXNlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOworICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2Rl
LCBjaGlsZEVkZ2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5v
ZGUqIG5vZGUsIEVkZ2UgY2hpbGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOwogICAgICAgICAKICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAg
ICAgICAgIAotICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hpbGRFZGdl
KSk7CisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5
LCBub2RlLT5vcmlnaW4sIGNoaWxkRWRnZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEu
YWRkKCk7Ci0gICAgICAgIGRhdGEub2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsKKyAgICAgICAg
ZGF0YS5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlk
ZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIAogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9m
ZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtNjQzLDE1ICs2OTUsNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q2hlY2soaW5kZXhJbkJsb2NrLCBu
b2RlLT5vcmlnaW4sIG5vZGUtPmNoaWxkMSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRD
aGVja3MoCi0gICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ss
IGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNoZWNrcykKLSAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGVja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBvcmln
aW4sIGluZGV4SW5CbG9jaywgY2hlY2tzW2ldLmNvbnN0YW50KCksIGNoZWNrc1tpXS5zdHJ1Y3R1
cmUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjayhOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwq
IGNlbGwsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgu
cmVnaXN0ZXJTdHJ1Y3R1cmUoY2VsbC0+c3RydWN0dXJlKCkpID09IFN0cnVjdHVyZVJlZ2lzdGVy
ZWRBbmRXYXRjaGVkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw4ICszNSw5IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZv
aWQgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIFdhdGNocG9pbnQqIHdhdGNocG9p
bnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBD
b21tb25EYXRhJiBjb21tb24pCiB7CisgICAgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IGNvbW1v
bi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKTsKICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dh
dGNocG9pbnQqIG5ldXRlcmluZ1dhdGNocG9pbnQgPQogICAgICAgICBBcnJheUJ1ZmZlck5ldXRl
cmluZ1dhdGNocG9pbnQ6OmNyZWF0ZSgqY29kZUJsb2NrLT52bSgpKTsKICAgICBuZXV0ZXJpbmdX
YXRjaHBvaW50LT5zZXQoKS0+YWRkKHdhdGNocG9pbnQpOwpAQCAtNDUsMTAgKzQ2LDIzIEBAIHZv
aWQgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmEKIH0KIAogdm9pZCBJbmZlcnJl
ZFZhbHVlQWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJlZFZh
bHVlKiBpbmZlcnJlZFZhbHVlLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBDb21tb25EYXRhJiBj
b21tb24pCiB7CiAgICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChpbmZlcnJlZFZhbHVlKTsgLy8g
Rm9yIGNvbW1vbiB1c2VycywgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBv
ciBub3QuIElmIHJlZmVyZW5jZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgotICAg
IGluZmVycmVkVmFsdWUtPmFkZCh3YXRjaHBvaW50KTsKKyAgICBpbmZlcnJlZFZhbHVlLT5hZGQo
Y29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjphZGQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikK
K3sKKyAgICBzd2l0Y2ggKGtleS5raW5kKCkpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9u
OjpFcXVpdmFsZW5jZToKKyAgICAgICAgY29tbW9uLmFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29kZUJsb2NrKS0+aW5zdGFsbCgpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBjb21tb24uYWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KIH0KIAogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0K
QEAgLTc0LDYgKzg4LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSlNB
cnIKICAgICBtX2J1ZmZlclZpZXdzLmFkZExhemlseSh2aWV3KTsKIH0KIAordm9pZCBEZXNpcmVk
V2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
KQoreworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOworfQorCiBi
b29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7
CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC04OCw2ICsxMDcsNyBA
QCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmxpbmVT
ZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1faW5mZXJyZWRWYWx1
ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJl
U2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVk
V2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtOTUsNyArMTE1LDE4IEBAIGJv
b2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICByZXR1cm4gbV9zZXRz
LmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgp
CiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYm
IG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2J1ZmZlclZpZXdz
LmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVT
dGlsbFZhbGlkKCk7Cit9CisKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiRGVzaXJlZCB3YXRjaHBvaW50czpcbiIpOworICAgIG91dC5wcmludCgiICAgIFdh
dGNocG9pbnQgc2V0czogIiwgaW5Db250ZXh0KG1fc2V0cywgY29udGV4dCksICJcbiIpOworICAg
IG91dC5wcmludCgiICAgIElubGluZSB3YXRjaHBvaW50IHNldHM6ICIsIGluQ29udGV4dChtX2lu
bGluZVNldHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB2
YWx1ZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVmFsdWVzLCBjb250ZXh0KSwgIlxuIik7Cisg
ICAgb3V0LnByaW50KCIgICAgQnVmZmVyIHZpZXdzOiAiLCBpbkNvbnRleHQobV9idWZmZXJWaWV3
cywgY29udGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIE9iamVjdCBwcm9wZXJ0eSBj
b25kaXRpb25zOiAiLCBpbkNvbnRleHQobV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMsIGNvbnRleHQp
LCAiXG4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lv
biAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiREZHQ29t
bW9uRGF0YS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5j
bHVkZSAiV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBA
IC00MCwzMyArNDIsNTYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3Mg
R3JhcGg7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3Ig
ewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBUIHNldCwgV2F0Y2hwb2ludCogd2F0
Y2hwb2ludCkKK3N0cnVjdCBTZXRQb2ludGVyQWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRk
KENvZGVCbG9jayogY29kZUJsb2NrLCBUIHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHNldC0+YWRkKHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0
LT5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3Rh
dGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5J
bnZhbGlkYXRlZCgpOyB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBUIHNldCwgRHVtcENvbnRleHQqKQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KFJh
d1BvaW50ZXIoc2V0KSk7CisgICAgfQogfTsKIAogc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9y
IHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIFdhdGNo
cG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSos
IENvbW1vbkRhdGEmKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSW5mZXJy
ZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBpbmZlcnJlZFZh
bHVlLT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKICAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBE
dW1wQ29udGV4dCopCisgICAgeworICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihpbmZlcnJl
ZFZhbHVlKSk7CisgICAgfQogfTsKIAogc3RydWN0IEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRB
ZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZp
ZXcqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJy
YXlCdWZmZXJWaWV3KiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZh
bGlkYXRlZChKU0FycmF5QnVmZmVyVmlldyogdmlldykKICAgICB7Ci0gICAgICAgIGJvb2wgcmVz
dWx0ID0gIXZpZXctPmxlbmd0aCgpOwotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuICF2aWV3LT5sZW5ndGgoKTsKKyAg
ICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBKU0Fy
cmF5QnVmZmVyVmlldyogdmlldywgRHVtcENvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAg
ICBvdXQucHJpbnQoaW5Db250ZXh0KEpTVmFsdWUodmlldyksIGNvbnRleHQpKTsKKyAgICB9Cit9
OworCitzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvciB7CisgICAgc3Rh
dGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwg
Q29tbW9uRGF0YSYpOworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFrZXku
aXNXYXRjaGFibGUoKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dCgKKyAg
ICAgICAgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtl
eSwgRHVtcENvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250
ZXh0KGtleSwgY29udGV4dCkpOwogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdhdGNo
cG9pbnRTZXRUeXBlLCB0eXBlbmFtZSBBZGFwdG9yID0gR2VuZXJpY1NldEFkYXB0b3I8V2F0Y2hw
b2ludFNldFR5cGU+PgordGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVu
YW1lIEFkYXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+CiBjbGFz
cyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
dHlwZWRlZiBIYXNoTWFwPFdhdGNocG9pbnRTZXRUeXBlLCBib29sPiBTdGF0ZU1hcDsKQEAgLTg3
LDcgKzExMiw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVhbGx5QWRk
ZWQpOwogICAgICAgICAKICAgICAgICAgZm9yIChhdXRvJiBzZXQgOiBtX3NldHMpCi0gICAgICAg
ICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbi53YXRjaHBvaW50cy5hZGQo
Y29kZUJsb2NrKSk7CisgICAgICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNv
bW1vbik7CiAgICAgICAgIAogICAgICAgICBtX3JlYWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CkBA
IC0xMDcsNiArMTMyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc2V0cy5jb250YWlu
cyhzZXQpOwogICAgIH0KIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0
LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKKyAgICAgICAgZm9yIChjb25zdCBXYXRjaHBvaW50U2V0VHlwZSYgZW50cnkgOiBt
X3NldHMpIHsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICBBZGFw
dG9yOjpkdW1wSW5Db250ZXh0KG91dCwgZW50cnksIGNvbnRleHQpOworICAgICAgICB9CisgICAg
fQorCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5cGU+IG1fc2V0czsKICAg
ICBib29sIG1fcmVhbGx5QWRkZWQ7CkBAIC0xMjIsNiArMTU2LDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIGFkZExhemlseShJbmZlcnJlZFZhbHVlKik7CiAgICAgdm9pZCBhZGRMYXppbHkoSlNBcnJh
eUJ1ZmZlclZpZXcqKTsKICAgICAKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRv
bid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjp3YXRjaENvbmRpdGlvbigpLCB3aGlj
aCBkb2VzCisgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwgYXMgc29tZSBvdGhl
ciBib29ra2VlcGluZy4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYpOworICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCiAg
ICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwgQ29tbW9uRGF0YSYpOwpAQCAtMTQ0LDEyICsx
ODIsMjAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNX
YXRjaGVkKHZpZXcpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1
Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8V2F0Y2hwb2ludFNldCo+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9p
bnRzPElubGluZVdhdGNocG9pbnRTZXQqPiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rlc2ly
ZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5m
ZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVy
VmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwor
ICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRz
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDE0IEBAIERlc2ly
ZWRXZWFrUmVmZXJlbmNlczo6fkRlc2lyZWRXZWFrUmVmZXIKIAogdm9pZCBEZXNpcmVkV2Vha1Jl
ZmVyZW5jZXM6OmFkZExhemlseShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgbV9yZWZlcmVuY2VzLmFk
ZChjZWxsKTsKKyAgICBpZiAoY2VsbCkKKyAgICAgICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsK
K30KKwordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU1ZhbHVlIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYWRkTGF6aWx5KHZhbHVlLmFz
Q2VsbCgpKTsKIH0KIAogYm9vbCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKEpTQ2Vs
bCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyAKIAogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgSlNDZWxsOworY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3Mg
Vk07CiAKQEAgLTQ4LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIH5EZXNpcmVkV2Vha1JlZmVyZW5j
ZXMoKTsKIAogICAgIHZvaWQgYWRkTGF6aWx5KEpTQ2VsbCopOworICAgIHZvaWQgYWRkTGF6aWx5
KEpTVmFsdWUpOwogICAgIGJvb2wgY29udGFpbnMoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBy
ZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw4ICsyNTcsOCBAQCB2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgaWYgKG5vZGUtPmhhc011
bHRpR2V0QnlPZmZzZXREYXRhKCkpIHsKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRh
dGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJpZCIsIGRhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBpZGVudGlmaWVycygpW2RhdGEu
aWRlbnRpZmllck51bWJlcl0sICJ9Iik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBpbkNvbnRleHQoZGF0YS52YXJpYW50c1tpXSwgY29udGV4dCkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgaW5Db250ZXh0KGRhdGEuY2FzZXNbaV0sIGNvbnRleHQpKTsKICAgICB9
CiAgICAgaWYgKG5vZGUtPmhhc011bHRpUHV0QnlPZmZzZXREYXRhKCkpIHsKICAgICAgICAgTXVs
dGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOwpA
QCAtNTMwLDYgKzUzMCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cEMKICAgICAgICAgaWYgKHZhbHVlLT5wb2ludHNUb0hlYXAoKSkKICAgICAgICAgICAgIG91dC5w
cmludCgiICAgICIsIGluQ29udGV4dCgqdmFsdWUsICZteUNvbnRleHQpLCAiXG4iKTsKICAgICB9
CisKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KHdhdGNocG9pbnRzKCksICZteUNvbnRleHQpKTsK
ICAgICAKICAgICBpZiAoIW15Q29udGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgbXlDb250ZXh0
LmR1bXAob3V0KTsKQEAgLTg0OCw2ICs4NTAsMzAgQEAgdm9pZCBHcmFwaDo6Y2xlYXJGbGFnc09u
QWxsTm9kZXMoTm9kZUZsYQogICAgIH0KIH0KIAorYm9vbCBHcmFwaDo6d2F0Y2hDb25kaXRpb24o
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1dh
dGNoYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9wbGFuLndlYWtS
ZWZlcmVuY2VzLmFkZExhemlseShrZXkub2JqZWN0KCkpOworICAgIGlmIChrZXkuaGFzUHJvdG90
eXBlKCkpCisgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5LnByb3Rv
dHlwZSgpKTsKKyAgICBpZiAoa2V5Lmhhc1JlcXVpcmVkVmFsdWUoKSkKKyAgICAgICAgbV9wbGFu
LndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucmVxdWlyZWRWYWx1ZSgpKTsKKyAgICAKKyAg
ICBtX3BsYW4ud2F0Y2hwb2ludHMuYWRkTGF6aWx5KGtleSk7CisKKyAgICBpZiAoa2V5LmtpbmQo
KSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpCisgICAgICAgIG1fc2FmZVRvTG9hZC5h
ZGQoc3RkOjptYWtlX3BhaXIoa2V5Lm9iamVjdCgpLCBrZXkub2Zmc2V0KCkpKTsKKyAgICAKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBi
YXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5j
b250YWlucyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQpKTsKK30KKwogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVz
cz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsK
QEAgLTEwMjAsOCArMTA0NiwxMiBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3Bl
cnR5KEpTCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KAogICAgIEpTVmFs
dWUgYmFzZSwgY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVy
ZS5pc0Nsb2JiZXJlZCgpKQorICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUu
aXNDbG9iYmVyZWQoKSkgeworICAgICAgICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQg
dGhlIG9mZnNldCB0byBhIHVpZCwgd2UgY291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24K
KyAgICAgICAgLy8gd2F0Y2hpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyeUdldENv
bnN0YW50UHJvcGVydHkoYmFzZSwgc3RydWN0dXJlLnNldCgpLCBvZmZzZXQpOwogfQpAQCAtMTE2
NywxNyArMTE5Nyw5IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAg
ICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsgai0tOykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc2V0W2pd
KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIG1hcmsgYW55dGhpbmcg
aW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAgICAg
ICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBEb24n
dCBuZWVkIHRvIG1hcmsgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVz
IGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQot
ICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYW50cyBkaWQgdGhhdC4KLSAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOworICAgICAgICAgICAgICAg
IGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgOiBnZXRDYXNlLnNldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODc0
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY2NSw2ICs2NjUsMTUgQEAgcHVibGljOgogICAgIERlc2lyZWRJZGVudGlmaWVycyYg
aWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KICAgICBEZXNpcmVk
V2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9
CiAgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW52YWxp
ZCBvciB1bndhdGNoYWJsZS4gSWYgdGhpcyBpcyBhIFByZXNlbmNlIGNvbmRpdGlvbiwKKyAgICAv
LyB0aGlzIGFsc28gbWFrZXMgaXQgY2hlYXAgdG8gcXVlcnkgaWYgdGhlIGNvbmRpdGlvbiBob2xk
cy4gQWxzbyBtYWtlcyBzdXJlIHRoYXQgdGhlIEdDIGtub3dzCisgICAgLy8gd2hhdCdzIGdvaW5n
IG9uLgorICAgIGJvb2wgd2F0Y2hDb25kaXRpb24oY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mKTsKKworICAgIC8vIENoZWNrcyBpZiBpdCdzIGtub3duIHRoYXQgbG9hZGluZyBmcm9tIHRo
ZSBnaXZlbiBvYmplY3QgYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBmaW5lLiBUaGlzIGlzCisgICAg
Ly8gY29tcHV0ZWQgYnkgdHJhY2tpbmcgd2hpY2ggY29uZGl0aW9ucyB3ZSB0cmFjayB3aXRoIHdh
dGNoQ29uZGl0aW9uKCkuCisgICAgYm9vbCBpc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFBy
b3BlcnR5T2Zmc2V0KTsKKyAgICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NG
b3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElu
bGluZUNhbGxGcmFtZSopOwogICAgIApAQCAtODQ0LDYgKzg1Myw3IEBAIHB1YmxpYzoKICAgICBW
ZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVl
X3B0cjxCeXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxzOworICAgIEhhc2hTZXQ8c3RkOjpw
YWlyPEpTT2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CiAgICAgRG9taW5h
dG9ycyBtX2RvbWluYXRvcnM7CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJp
bmc7CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdGcm96ZW5WYWx1ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEdldEJ5T2Zmc2V0TWV0
aG9kOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICI6Iik7CisgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQocG9p
bnRlckR1bXBJbkNvbnRleHQoY29uc3RhbnQoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KG9m
ZnNldCgpLCAiQCIsIHBvaW50ZXJEdW1wSW5Db250ZXh0KHByb3RvdHlwZSgpLCBjb250ZXh0KSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVs
bHB0cik7Cit9CisKK3ZvaWQgTXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KGluQ29udGV4dChtX3NldCwgY29udGV4dCksICI6IiwgaW5Db250ZXh0KG1fbWV0aG9kLCBj
b250ZXh0KSk7Cit9CisKK3ZvaWQgTXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEdldEJ5T2Zmc2V0TWV0aG9kOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpD
b25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJM
b2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2Fk
RnJvbVByb3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KCJMb2FkRnJvbVByb3RvdHlwZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNl
dERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRp
R2V0QnlPZmZzZXREYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YV9oCisjZGVmaW5lIERGR011bHRpR2V0QnlPZmZz
ZXREYXRhX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiRHVtcENvbnRleHQu
aCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEZyb3plblZhbHVlOworCitj
bGFzcyBHZXRCeU9mZnNldE1ldGhvZCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAg
ICAgSW52YWxpZCwKKyAgICAgICAgQ29uc3RhbnQsCisgICAgICAgIExvYWQsCisgICAgICAgIExv
YWRGcm9tUHJvdG90eXBlCisgICAgfTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCgpCisg
ICAgICAgIDogbV9raW5kKEludmFsaWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
R2V0QnlPZmZzZXRNZXRob2QgY29uc3RhbnQoRnJvemVuVmFsdWUqIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
Q29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC51LmNvbnN0YW50ID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBs
b2FkKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEdldEJ5T2Zmc2V0TWV0
aG9kIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IExvYWQ7CisgICAgICAgIHJlc3Vs
dC51LmxvYWQub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgR2V0QnlPZmZzZXRNZXRob2QgbG9hZEZyb21Qcm90b3R5cGUoRnJv
emVuVmFsdWUqIHByb3RvdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9h
ZEZyb21Qcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQucHJvdG90eXBlID0gcHJvdG90
eXBlOworICAgICAgICByZXN1bHQudS5sb2FkLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQgPT0gSW52YWxpZDsgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIEZyb3plblZhbHVlKiBjb25zdGFudCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0
dXJuIHUuY29uc3RhbnQ7CisgICAgfQorICAgIAorICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkRnJvbVByb3RvdHlw
ZSk7CisgICAgICAgIHJldHVybiB1LmxvYWQucHJvdG90eXBlOworICAgIH0KKyAgICAKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBMb2FkIHx8IGtpbmQoKSA9PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVy
biB1LmxvYWQub2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIEZyb3plblZh
bHVlKiBjb25zdGFudDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEZyb3plblZhbHVl
KiBwcm90b3R5cGU7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAg
IH0gbG9hZDsKKyAgICB9IHU7CisgICAgS2luZCBtX2tpbmQ7Cit9OworCitjbGFzcyBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSB7CitwdWJsaWM6CisgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoY29uc3QgU3RydWN0dXJl
U2V0JiBzZXQsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2QpCisgICAgICAgIDogbV9z
ZXQoc2V0KQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIFN0cnVjdHVyZVNldCYgc2V0KCkgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisgICAgY29uc3QgR2V0QnlP
ZmZzZXRNZXRob2QmIG1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0aG9kOyB9CisgICAgCisg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJ1
Y3R1cmVTZXQgbV9zZXQ7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbV9tZXRob2Q7Cit9OworCitz
dHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgeworICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXI7CisgICAgVmVjdG9yPE11bHRpR2V0QnlPZmZzZXRDYXNlLCAyPiBjYXNlczsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6S2luZCk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0Vwb2NoLmgiCiAjaW5jbHVkZSAiREZHTGF6
eUpTVmFsdWUuaCIKKyNpbmNsdWRlICJERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIgogI2luY2x1
ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRl
ICJERkdOb2RlVHlwZS5oIgpAQCAtNjUsMTEgKzY2LDYgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NE
YXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwogfTsKIAotc3RydWN0IE11bHRp
R2V0QnlPZmZzZXREYXRhIHsKLSAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZl
Y3RvcjxHZXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7Ci19OwotCiBzdHJ1Y3QgTXVsdGlQdXRC
eU9mZnNldERhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiAgICAgVmVjdG9y
PFB1dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzI4LDEwICszMjgsMTggQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBz
dAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNl
dDoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkub2Zmc2V0OworCisgICAgICAgIGlmIChzdGF0
ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkgeworICAg
ICAgICAgICAgaWYgKEpTT2JqZWN0KiBrbm93bkJhc2UgPSBub2RlLT5jaGlsZDEoKS0+ZHluYW1p
Y0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3JhcGgu
aXNTYWZlVG9Mb2FkKGtub3duQmFzZSwgb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV9zdHJ1Y3R1cmU7CiAgICAgICAgIGlmICh2YWx1ZS5pc0luZmluaXRlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5vZGUt
PnN0b3JhZ2VBY2Nlc3NEYXRhKCkub2Zmc2V0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2
YWx1ZS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGlmICghdmFsdWVbaV0tPmlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDEsNDIg
KzM0OSwyOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAg
ICAgIAogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogewogICAgICAgICAvLyBXZSBjYW4ndCBh
bHdheXMgZ3VhcmFudGVlIHRoYXQgdGhlIE11bHRpR2V0QnlPZmZzZXQgaXMgc2FmZSB0byBleGVj
dXRlIGlmIGl0Ci0gICAgICAgIC8vIGNvbnRhaW5zIGxvYWRzIGZyb20gcHJvdG90eXBlcy4gV2Ug
a25vdyB0aGF0IGl0IHdvbid0IGxvYWQgZnJvbSB0aG9zZSBwcm90b3R5cGVzIGlmCi0gICAgICAg
IC8vIHdlIHdhdGNoIHRoZSBtdXRhYmlsaXR5IG9mIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGxvYWRl
ZC4gU28sIGhlcmUgd2UgdHJ5IHRvCi0gICAgICAgIC8vIGNvbnN0YW50LWZvbGQgcHJvdG90eXBl
IGxvYWRzLCBhbmQgaWYgdGhhdCBmYWlscywgd2UgY2xhaW0gdGhhdCB3ZSBjYW5ub3QgaG9pc3Qu
IFdlCi0gICAgICAgIC8vIGFsc28ga25vdyB0aGF0IGEgbG9hZCBpcyBzYWZlIHRvIGV4ZWN1dGUg
aWYgd2UgYXJlIHdhdGNoaW5nIHRoZSBwcm90b3R5cGUncwotICAgICAgICAvLyBzdHJ1Y3R1cmUu
Ci0gICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBub2RlLT5tdWx0
aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIXZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBwcm90b3R5
cGUgbG9hZC4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZSBiYXNlID0gdmFyaWFudC5hbHRlcm5hdGVCYXNl
KCk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gZ3JhcGguZnJlZXplKGJhc2Up
OwotICAgICAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVj
dHVyZXNBcmVXYXRjaGVkCi0gICAgICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+
ZGZnU2hvdWxkV2F0Y2goKQotICAgICAgICAgICAgICAgICYmIGZyb3plbi0+c3RydWN0dXJlKCkt
PmlzVmFsaWRPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBX
ZSdyZSBhbHJlYWR5IHdhdGNoaW5nIHRoYXQgaXQncyBzYWZlIHRvIGxvYWQgZnJvbSB0aGlzLgot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0gZ3JhcGgudHJ5R2V0Q29uc3RhbnRQ
cm9wZXJ0eSgKLSAgICAgICAgICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFu
dC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYgKCFj
b25zdGFudFJlc3VsdCkgewotICAgICAgICAgICAgICAgIC8vIENvdWxkbid0IGNvbnN0YW50LWZv
bGQgYSBwcm90b3R5cGUgbG9hZC4gVGhlcmVmb3JlLCB3ZSBzaG91bGRuJ3QgaG9pc3QKLSAgICAg
ICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBzYWZldHkgb2YgdGhlIGxvYWQgZGVwZW5kcyBvbiBz
dHJ1Y3R1cmUgY2hlY2tzIG9uIHRoZSBwcm90b3R5cGUsCi0gICAgICAgICAgICAgICAgLy8gYW5k
IHdlJ3JlIHRvbyBjaGVhcCB0byB2ZXJpZnkgdGhhdCBoZXJlLgotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgLy8gY29udGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5cGVzLiBJ
ZiB0aGUgbG9hZCByZXF1aXJlcyBhIGNoZWNrIGluIElSLCB3aGljaCBpcyByYXJlLCB0aGVuCisg
ICAgICAgIC8vIHdlIGN1cnJlbnRseSBjbGFpbSB0aGF0IHdlIGRvbid0IGtub3cgaWYgaXQncyBz
YWZlIHRvIGV4ZWN1dGUgYmVjYXVzZSBmaW5kaW5nIHRoYXQKKyAgICAgICAgLy8gY2hlY2sgaW4g
dGhlIGFic3RyYWN0IHN0YXRlIHdvdWxkIGJlIGhhcmQuIElmIHRoZSBsb2FkIHJlcXVpcmVzIHdh
dGNocG9pbnRzLCB3ZSBqdXN0CisgICAgICAgIC8vIGNoZWNrIGlmIHdlJ3JlIG5vdCBpbiBhIGNs
b2JiZXJlZCBzdGF0ZSAoaS5lLiBpbiBiZXR3ZWVuIGEgc2lkZSBlZmZlY3QgYW5kIGFuCisgICAg
ICAgIC8vIGludmFsaWRhdGlvbiBwb2ludCkuCisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRC
eU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2Vz
KSB7CisgICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhv
ZCgpOworICAgICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDogLy8gT0sgYmVjYXVzZSBjb25zdGFu
dHMgYXJlIGFsd2F5cyBzYWZlIHRvIGV4ZWN1dGUuCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0TWV0aG9kOjpMb2FkOiAvLyBPSyBiZWNhdXNlIHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGhhcyBp
dHMgb3duIGNoZWNrcyBmb3IgbG9hZGluZyBmcm9tIHNlbGYuCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlw
ZToKKyAgICAgICAgICAgICAgICAvLyBPbmx5IE9LIGlmIHRoZSBzdGF0ZSBpc24ndCBjbG9iYmVy
ZWQuIFRoYXQncyBhbG1vc3QgYWx3YXlzIHRoZSBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChz
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSAhPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghZ3Jh
cGguaXNTYWZlVG9Mb2FkKG1ldGhvZC5wcm90b3R5cGUoKS0+Y2FzdDxKU09iamVjdCo+KCksIG1l
dGhvZC5vZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlLCB3ZSB3aWxsIGVpdGhlcjoKLSAgICAgICAgICAgIC8vIC0gTm90IGxv
YWQgZnJvbSB0aGUgcHJvdG90eXBlIGJlY2F1c2UgY29uc3RhbnQgZm9sZGluZyB3aWxsIHN1Y2Nl
ZWQgaW4gdGhlCi0gICAgICAgICAgICAvLyAgIGJhY2tlbmQsIG9yCi0gICAgICAgICAgICAvLyAt
IEVtaXQgaW52YWxpZCBjb2RlIHRoYXQgZmFpbHMgd2F0Y2hwb2ludCBjaGVja3MuIFRoaXMgY291
bGQgaGFwcGVuIGlmIHRoZQotICAgICAgICAgICAgLy8gICBwcm9wZXJ0eSBiZWNvbWVzIG11dGFi
bGUgYWZ0ZXIgdGhpcyBwb2ludCwgc2luY2Ugd2UgYWxyZWFkeSBzZXQgdGhlIHdhdGNocG9pbnQK
LSAgICAgICAgICAgIC8vICAgYWJvdmUuIFRoaXMgY2FzZSBpcyBPSyBzaW5jZSB0aGUgY29kZSB3
aWxsIGZhaWwgd2F0Y2hwb2ludCBjaGVja3MgYW5kIG5ldmVyCi0gICAgICAgICAgICAvLyAgIGdl
dCBpbnN0YWxsZWQuCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NiwxNSArODYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0
QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11
bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rl
clN0cnVjdHVyZXModmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBEb24ndCBuZWVkIHRvIHdhdGNoIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hh
aW4gYmVjYXVzZSB0aGF0IHdvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJl
ZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gd2F0Y2gg
dGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdl
IHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOwotICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2Um
IGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmVzKGdldENhc2Uuc2V0KCkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODcwLDI0ICszODcwLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBNdWx0
aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsK
IAotICAgICAgICBpZiAoZGF0YS52YXJpYW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGRh
dGEuY2FzZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3Jl
YXRpbmcgYSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2Ug
dGhhdC4KICAgICAgICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4g
YmxvY2tzKGRhdGEudmFyaWFudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywg
Mj4gYmxvY2tzKGRhdGEuY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS5jYXNlcy5zaXplKCk7IGktLTspCiAgICAgICAgICAgICBibG9ja3NbaV0gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY2FzZSAiLCBpKSk7CiAgICAgICAgIExC
YXNpY0Jsb2NrIGV4aXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQg
ZmFpbCIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCiAg
ICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKICAgICAgICAgU3RydWN0dXJlU2V0
IGJhc2VTZXQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJp
YW50c1tpXTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkuc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpW2pdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNl
dENhc2UgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSBnZXRDYXNlLnNldCgpLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2V0Q2FzZS5zZXQoKVtqXTsKICAgICAgICAgICAgICAgICBiYXNl
U2V0LmFkZChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hD
YXNlKHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwog
ICAgICAgICAgICAgfQpAQCAtMzg5OCwyOSArMzg5OCwzNiBAQCBwcml2YXRlOgogICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOwogICAgICAgICAKICAgICAg
ICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiByZXN1bHRzOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tz
W2kgKyAxXSA6IGV4aXQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9
IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBn
ZXRDYXNlLm1ldGhvZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS5jYXNlcy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDog
ZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQg
PSBkYXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgYmFzZVNldC5tZXJnZSh2YXJpYW50LnN0
cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0gICAgICAgICAgICBK
U1ZhbHVlIGNvbnN0YW50UmVzdWx0OwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRSZXN1bHQgPSBtX2dyYXBoLnRyeUdl
dENvbnN0YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY29uc3RhbnRSZXN1bHQpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnRSZXN1
bHQpKTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0
Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkludmFsaWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKG1ldGhvZC5jb25zdGFudCgpLT52YWx1
ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgICAgICAgICBMVmFs
dWUgcHJvcGVydHlCYXNlOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIodmFy
aWFudC5hbHRlcm5hdGVCYXNlKCkpOwotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZCkKICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsKLSAgICAgICAgICAgICAgICBpZiAo
IWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIobWV0aG9kLnBy
b3RvdHlwZSgpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW5s
aW5lT2Zmc2V0KG1ldGhvZC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
QmFzZSA9IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5KHByb3BlcnR5QmFz
ZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkoCisgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBA
IHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIg
JnNsb3dQYXRoRnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAg
aWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2
bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJ
bmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CkBAIC0xMzIsNDcgKzEzMiwzMyBAQCBzdGF0aWMgdm9p
ZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgYWRkU3Ry
dWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgIEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKG9iamVjdC0+c3RydWN0
dXJlKCkgPT0gc3RydWN0dXJlICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJ
c1N0aWxsVmFsaWQoKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBv
aW50KHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIGlmICghQVNT
RVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBleGVjdXRlIHRoaXMgY29kZSwg
dGhlIG9iamVjdCBtdXN0IGhhdmUgdGhlIHN0cnVjdHVyZSB3ZSBleHBlY3QuIEFzc2VydAotICAg
ICAgICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KLSAgICAgICAgICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBicmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAg
ICAgICAgICAgaml0LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbmVmZmVjdGl2ZVdhdGNocG9pbnQp
OwotICAgICAgICAgICAgb2subGluaygmaml0KTsKLSAgICAgICAgfQorc3RhdGljIHZvaWQgY2hl
Y2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGlmIChjb25kaXRp
b24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAg
ICAgIGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBv
aW50KAorICAgICAgICAgICAgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRp
dGlvbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOworCisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAg
IFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BS
KTsKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoaml0
LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSkpOworICAgICAgICBicmFuY2hTdHJ1Y3R1cmUo
CisgICAgICAgICAgICBqaXQsIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHN0cnVjdHVyZSkpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BS
KQotewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LAotICAgICAgICBm
YWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbnMoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBN
YWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2Vz
LCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24gOiBzZXQpIHsKKyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbigKKyAgICAgICAgICAgIGNvbmRpdGlvbiwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0
LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgcmVw
bGFjZVdpdGhKdW1wKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKQEAgLTI5
NiwxMSArMjgyLDEyIEBAIHN0YXRpYyBGdW5jdGlvblB0ciBjdXN0b21Gb3IoY29uc3QgUHV0UHIK
IAogc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEJ5
SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCi0gICAgRnVu
Y3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LAorICAgIEZ1bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2lu
dFNldCwKICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxh
YmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQog
ewotCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKKyAgICAKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guYmFzZUdQUik7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJl
Z3MoCkBAIC0zNDYsMzcgKzMzMywyOSBAQCBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAog
ICAgIH0KIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0g
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hw
b2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkgfHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAg
ICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwg
c3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAogICAgIGlmICh3YXRjaHBvaW50
U2V0KQogICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChj
b2RlQmxvY2spKTsKIAotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsg
Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBpZiAoY2hhaW4pIHsKLSAgICAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAg
IHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3Vw
KGV4ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b09i
amVjdC0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAg
ICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwg
c3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBwcm90b09iamVjdCwgcHJvdG9T
dHJ1Y3R1cmUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAg
ZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBp
dC0+Z2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKCFwcm90b09iamVjdCB8fCBwcm90
b09iamVjdC0+c3RydWN0dXJlKCkgPT0gY3VyclN0cnVjdHVyZSk7Ci0gICAgfQorICAgIGNoZWNr
T2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAgCisg
ICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOworICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0
eSgpKQorICAgICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIGVsc2UKKyAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKTsKICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVy
dHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOworICAgIAogICAgIEdQUlJlZyBiYXNlRm9y
QWNjZXNzR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICBpZiAoa2luZCAhPSBHZXRVbmRlZmluZWQp
IHsKLSAgICAgICAgaWYgKGNoYWluKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRjaEdQ
UiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRoZSB0
YXJnZXQuCiAgICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQ
cm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIHN0dWJK
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpKSwgc2NyYXRj
aEdQUik7CiAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRv
IGRvIGFsbCB0aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGlu
dG8KQEAgLTYyNyw5ICs2MDYsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9y
Q2VsbChWCiAgICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2
bSk7CiAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQotICAgIEFTU0VSVCgh
c3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBpZiAodHlw
ZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVy
ZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0
eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwog
CiAgICAgcmV0dXJuIEF0dGVtcHRUb0NhY2hlOwpAQCAtODI3LDIxICs4MDUsMjIgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIH0KIAogICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAg
ICBzaXplX3QgY291bnQgPSAwOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKICAgICAKICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90
QmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAg
ICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJl
KTsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5TWlzcygqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVy
ZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY291bnQgPSBub3Jt
YWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKAotICAgICAgICAgICAgICAgIGV4ZWMs
IHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgaWYg
KGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNvbmRpdGlvblNl
dCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCks
IGlkZW50LmltcGwoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAKKyAg
ICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7
CiAgICAgfQogICAgIAogICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0dWJJbmZvKTsKQEAgLTg1Miw3ICs4MzEsNyBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJ
ZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xv
dCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4
ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25k
aXRpb25TZXQsIG9mZnNldCwgCiAgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94
eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1Yklu
Zm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAtODcxLDcgKzg1MCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJ
ZEFjY2VzcygKICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nl
c3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwg
Y291bnQpKTsKKyAgICAgICAgY29uZGl0aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9H
ZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAg
CkBAIC05OTMsMjYgKzk3MiwyOCBAQCBzdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9u
U3R1YkFuZEdldE9sZFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJl
KiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCkKK3N0YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUq
IGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgCisgICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1
cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJv
cGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1
Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJz
ZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNv
bmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQp
OwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVh
bGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBp
dCBoYXBwZW4uCiAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAg
ICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSkgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJl
YWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwpAQCAtMTAyMCwxNCArMTAwMSwxNCBAQCBzdGF0
aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CiAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291
bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBp
ZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKSA9PSBJbnZhbGlkUHJv
dG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgU3RydWN0dXJlQ2hh
aW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gZW1pdFB1dFRyYW5zaXRpb25TdHViCisgICAg
aWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICp2bSwgZXhl
Yy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50
LmltcGwoKSk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJl
TGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwpAQCAtMTA4MywxNyArMTA2NCw4
IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgCiAgICAgICAgIG9sZFN0cnVjdHVyZSkpOwogICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5z
aXRpb25DaGVjaygKLSAgICAgICAgb2xkU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhl
Yy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAg
IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIAotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVj
dCkgewotICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlw
ZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJh
bnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwg
ZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICB9Ci0gICAgfQorICAgIGNoZWNrT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7CiAK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCkBAIC0xMjI4LDcg
KzEyMDAsNyBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAg
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9j
aygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25l
KSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQpAQCAtMTI1Niw4ICsx
MjI4LDggQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAg
ICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAg
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gb2xkU3Ry
dWN0dXJlOworICAgIAorICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCkKQEAgLTEyODEsMTIgKzEyNTMsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRAogICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xv
dC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9w
ZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZt
LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgICAgICAg
ICBpZiAoIW9sZFN0cnVjdHVyZSkKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
OworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owor
ICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVy
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldCgKQEAgLTEyOTQsNyArMTI2NSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRj
aENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3By
aWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90
b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5p
dFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xk
U3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAg
ICB9CkBAIC0xMzEyLDIwICsxMjgzLDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQKICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRT
cGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0g
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBj
b3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAg
ICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVj
LCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlm
IChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgK
KyAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMs
IHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBl
Q2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNl
dC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKICAgICAgICAgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6
OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJh
dGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0
b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAg
ICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywg
Y29uZGl0aW9uU2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxs
cHRyLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpLApAQCAtMTMzNiw3ICsxMzA5LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vz
czo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6
U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0
dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0
aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21T
ZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpA
QCAtMTM4MCwxNyArMTM1MywxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQ
dXRCeUlkCiAgICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4K
IAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlv
blN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0
dXJlKSAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYg
KCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4
ZWMpOwogICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAg
ICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNz
Ojp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJl
LCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsK
IAogICAgICAgICB9IGVsc2UgewpAQCAtMTQyMywyMSArMTM5NSwyNSBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3Vz
dG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5w
YXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
biA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0g
c2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hh
aW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5h
bWUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNo
YWluKQorICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0
aW9uU2V0OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90
LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisg
ICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhl
Yywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lLmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAg
ICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNl
dCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zm
c2V0KCk7CiAgICAgICAgIAogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0Owog
ICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHVi
SW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAg
ICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCks
IHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5k
Rm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRp
dGlvblNldCwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwK
ICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCkBAIC0xNDQ4LDcgKzE0MjQsNyBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxpc3Qt
PmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0
dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0
ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5j
dXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBAIC0xNDg3LDExICsxNDYzLDE3IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKLSAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90QmFz
ZSA9IHdhc0ZvdW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVfdCBj
b3VudCA9ICFmb3VuZFNsb3RCYXNlIHx8IGZvdW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAgICAg
ICBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwg
Zm91bmRTbG90QmFzZSwgaWRlbnQsIG9mZnNldElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291bnQg
PT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKKyAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Quc2xv
dEJhc2UoKSAhPSBiYXNlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFz
ZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAg
ICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSk7CisgICAgfQorICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CkBAIC0xNTE2LDcgKzE0OTgs
NiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAKICAgICB7CkBAIC0xNTQ3LDE4ICsxNTI4LDgg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgaWYgKHNs
b3Qud2F0Y2hwb2ludFNldCgpKQogICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCktPmFk
ZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIFN0cnVjdHVy
ZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAg
ICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvdHlwZS0+c3RydWN0dXJl
KCk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgcHJvdG90eXBlLCBwcm90b1N0cnVjdHVyZSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJv
cGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNv
ZGVCbG9jaykpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAg
ICAgfQorICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgICAg
IGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
ICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bi5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgi
Ci0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUo
cHJvdG90eXBlKQotewotICAgIEFTU0VSVChtX3Byb3RvdHlwZS5pc051bGwoKSB8fCBtX3Byb3Rv
dHlwZS5pc09iamVjdCgpKTsKLSAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUp
LT5zdHJ1Y3R1cmUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlw
ZVN0cnVjdHVyZSgpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY3VycmVudCk7Ci19Ci0KLUlu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkKQotICAgIDogbV9nbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3Vw
KG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBpZiAobV9wcm90b3R5cGUuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGFzT2JqZWN0KG1fcHJv
dG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQ
cm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwot
fQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJvdG90eXBlU3Ry
dWN0dXJlKQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkK
LSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVj
dCkpCi17Ci0gICAgbV92ZWN0b3IuYXBwZW5kKHByb3RvdHlwZVN0cnVjdHVyZSk7Ci19Ci0KLUlu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQotICAgIDog
bV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90
eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgY2hhaW4tPmhlYWQoKVtpXTsgKytpKQotICAgICAgICBtX3ZlY3Rv
ci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJl
Q2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCkKLSAgICA6
IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3Rv
dHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBl
bmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46
On5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCkKLXsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjppc1N0aWxsVmFsaWQoKSBjb25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3Rv
dHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rv
ci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSkt
PnN0cnVjdHVyZSgpICE9IG1fdmVjdG9yW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjdXJyZW50UHJvdG90eXBlID0gbV92ZWN0b3JbaV0tPnN0b3JlZFByb3RvdHlwZSgp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjptYXRjaGVzKFN0cnVjdHVyZUNoYWluKiBjaGFpbikgY29uc3QKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
dmVjdG9yW2ldICE9IGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmIChjaGFpbi0+aGVhZCgpW21fdmVjdG9yLnNpemUoKV0pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjptYXlJbnRlcmNlcHRTdG9yZVRvKFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsK
LSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3JtYWxp
emVkKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotewotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0KGkp
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSlNPYmplY3QqIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW46OnRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoIW1fdmVjdG9yLmlzRW1wdHkoKSk7Ci0gICAgaWYgKG1fdmVjdG9yLnNpemUoKSA9PSAxKQot
ICAgICAgICByZXR1cm4gYXNPYmplY3QobV9wcm90b3R5cGUpOwotICAgIHJldHVybiBhc09iamVj
dChtX3ZlY3RvclttX3ZlY3Rvci5zaXplKCkgLSAyXS0+c3RvcmVkUHJvdG90eXBlKCkpOwotfQot
Ci1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om9wZXJhdG9yPT0oY29uc3QgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0
ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0Ci0gICAgICAgICYmIG1fcHJvdG90eXBlID09IG90aGVy
Lm1fcHJvdG90eXBlCi0gICAgICAgICYmIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOwotfQot
Ci12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVj
dHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSBjdXJyZW50UHJv
dG90eXBlID0gbV9wcm90b3R5cGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUo
KTsgKytpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gYXNPYmplY3QoY3Vy
cmVudFByb3RvdHlwZSk7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGF0
KGkpOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKENvbnN0YW50U3RydWN0dXJlQ2hlY2soY3VycmVu
dE9iamVjdCwgY3VycmVudFN0cnVjdHVyZSkpOwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0g
Y3VycmVudFN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KTsKLSAg
ICB9Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRl
cigmbV9nbG9iYWxPYmplY3QpOwotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgm
bV9wcm90b3R5cGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0t
OykKLSAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fdmVjdG9yW2ld
KTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIDApOwotfQotCi12b2lkIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KAotICAgICAgICAiKGdsb2Jh
bCA9ICIsIFJhd1BvaW50ZXIobV9nbG9iYWxPYmplY3QpLCAiLCBoZWFkID0gIiwKLSAgICAgICAg
aW5Db250ZXh0KG1fcHJvdG90eXBlLCBjb250ZXh0KSwgIiwgdmVjdG9yID0gWyIpOwotICAgIENv
bW1hUHJpbnRlciBjb21tYTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXBJbkNvbnRl
eHQobV92ZWN0b3JbaV0sIGNvbnRleHQpKTsKLSAgICBvdXQucHJpbnQoIl0pIik7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlbmRlZFN0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAxODc0ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEludGVuZGVkU3RydWN0dXJlQ2hh
aW5faAotI2RlZmluZSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLQotI2luY2x1ZGUgIkNvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwot
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFZNOwot
c3RydWN0IER1bXBDb250ZXh0OwotCi1jbGFzcyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluIDogcHVi
bGljIFJlZkNvdW50ZWQ8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gewotcHVibGljOgotICAgIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKik7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlw
ZVN0cnVjdHVyZSk7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pOwotICAgIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwg
U3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCk7Ci0gICAgfkludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oKTsKLSAgICAKLSAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OwotICAg
IGJvb2wgbWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiopIGNvbnN0OwotICAgIGJvb2wgbWF5SW50ZXJj
ZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICBib29sIGlzTm9ybWFsaXpl
ZCgpOwotICAgIAotICAgIGJvb2wgdGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHko
KTsKLSAgICAKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90
eXBlOyB9Ci0gICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5z
aXplKCk7IH0KLSAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3JbaW5kZXhdOyB9Ci0gICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgSlNPYmplY3QqIHRlcm1p
bmFsUHJvdG90eXBlKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3IubGFzdCgpOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZ2F0aGVy
Q2hlY2tzKENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKSBjb25zdDsKLSAgICAKLSAgICB2
b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29u
dGV4dCopIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9i
YWxPYmplY3Q7Ci0gICAgSlNWYWx1ZSBtX3Byb3RvdHlwZTsKLSAgICBWZWN0b3I8U3RydWN0dXJl
Kj4gbV92ZWN0b3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW5faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEyLDcg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIGVsc2UKICAg
ICAgICAgbWF4VHJhbnNpdGlvbkxlbmd0aCA9IHNfbWF4VHJhbnNpdGlvbkxlbmd0aDsKICAgICBp
ZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uQ291bnQoKSA+IG1heFRyYW5zaXRpb25MZW5ndGgpIHsK
LSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0g
dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7
CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CiAgICAgICAgIG9mZnNl
dCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAg
ICAgcmV0dXJuIHRyYW5zaXRpb247CkBAIC00ODksMTEgKzQ4OSwxMSBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhCiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0KIAot
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCkKK1N0cnVjdHVyZSogU3RydWN0
dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IERpY3Rpb25hcnlLaW5kIGtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnRGaXJlKiBkZWZlcnJlZCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KHZtLCBzdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwg
c3RydWN0dXJlLCBkZWZlcnJlZCk7CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVy
R0MpOwpAQCAtNTA3LDkgKzUwNyw5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25h
cnlUcmFuc2kKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERlZmVycmVkU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKLSAgICByZXR1cm4gdG9EaWN0aW9u
YXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCk7CisgICAg
cmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgQ2FjaGVkRGljdGlv
bmFyeUtpbmQsIGRlZmVycmVkKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OCw3ICsx
NjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRy
YW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihW
TSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5
VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTdHJ1Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1
cmUqLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRy
KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRp
b24oVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBzZWFsVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6ZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsK
QEAgLTE5NCw3ICsxOTQsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29u
c3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KICAg
ICBib29sIGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFy
eUtpbmQoKSA9PSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wgcHJvcGVy
dHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5j
YWNoZWREaWN0aW9uYXJ5S2luZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmcoKTsgfQorICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5k
CisgICAgICAgICAgICAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQor
ICAgICAgICAgICAgJiYgISh0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgp
ICYmICF0eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICAgICAg
ICAgICYmIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAgICAg
ICAgICYmIHR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCk7Cisg
ICAgfQogCiAgICAgLy8gV2UgdXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9yIHN0cnVj
dHVyZXMgdGhhdCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBwcmV2ZW50
CiAgICAgLy8gREZHIGZyb20gaW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ugc3RydWN0
dXJlcyBkb24ndCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFwcGVhcnMu
CkBAIC0yMDIsNyArMjE0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJ
bmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAgCiAgICAg
Ly8gVHlwZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBl
SW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CkBAIC01MjgsNyArNTQwLDcgQEAgcHJp
dmF0ZToKICAgICAvLyB0byB1bmxvY2sgaXQuCiAgICAgdm9pZCBmaW5kU3RydWN0dXJlc0FuZE1h
cEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0cnVjdHVyZXMsIFN0
cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCk7
CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVj
dHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RmlyZSogPSBudWxscHRyKTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3Zl
KFByb3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlz
aW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzNiw2ICs1MzYsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRG
b3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAgIAog
ICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRoIElk
ZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShj
b25zdCBTdHJpbmcmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257778</attachid>
            <date>2015-07-29 15:37:10 -0700</date>
            <delta_ts>2015-07-29 16:15:53 -0700</delta_ts>
            <desc>fix absence condition validation</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>269891</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBB
QzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZp
ZWRHcmFwaC5jcHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yOTMsOCArMjk1LDYgQEAKIAkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCN0UyQTE5QTExQjgwMDBE
OUJDNTYgLyogQ2FsbFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNw
cCAqLzsgfTsKIAkJMEYzQjdFMkIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNTE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVjay5jcHAgKi87IH07Ci0JCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0Uw
MUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2
MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4OCw2ICs1ODgsMTQgQEAKIAkJMEZEMkM5MjQx
NkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9
OworCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRkQzRTQwMjFCNjE4QUFG
MDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMDFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZEM0U0MDkxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDAzMUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBG
RDNFNDBBMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDQxQjYxOEI2
NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi87IH07CisJCTBGRDNFNDBDMUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5
Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87
IH07CisJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDgxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8q
IERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICov
OyB9OwogCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9
OwpAQCAtNjk0LDYgKzcwMiw4IEBACiAJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdF
ZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjRCNTFCMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdFZGdlLmNwcCAqLzsgfTsKIAkJMEZGMEYxOUYx
NkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjExNkI2Mjc4RDAwM0Y2
OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwICovOyB9OwogCQkwRkYwRjFBMDE2Qjcy
QTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8q
IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcCAqLzsgfTsKKwkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0
QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY0
MjczMTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyog
RGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjcz
MDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZG
NDI3NDAxNThFQkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAv
KiB1ZGlzODZfZGVjb2RlLmMgKi87IH07CkBAIC0xMzg5LDggKzEzOTksNiBAQAogCQlBNzg0QTI2
NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5
bnRheENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFG
NkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYgLyogU3BpbGxSZWdpc3RlcnNNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZGNjQ3
QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0
MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwotCQlBNzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzhBOTc3NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZD
MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovOyB9OwogCQlBNzhB
OTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RDE3OTczOEI4MDA5REY3
NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi87IH07CiAJCUE3OEE5Nzc2MTc5NzM4QjgwMDlE
Rjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5j
cHAgKi87IH07CkBAIC0xODU3LDYgKzE4NjUsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhE
RTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVG
MTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGgu
Y3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
OEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8q
IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9m
aWxlckpldHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
OTBDQUIxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMDQyLDggKzIwNTIsNiBAQAogCQkwRjNCM0EyQTE1NDc0RkY0MDAz
RUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHVmFsaWRhdGUuaDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyog
Q2FsbFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFZhcmlh
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5
Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcv
REZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
M0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRm
Zy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIzNDgsNiArMjM1NiwxNCBAQAogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIw
MTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyog
REZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5o
OyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcv
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDMxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA1MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA2MUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlDb25k
aXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwODFCNjE4QjY2
MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBh
dGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRG9taW5hdG9ycy5jcHA7IHBhdGgg
PSBkZmcvREZHRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0
b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQ5LDYgKzI0NjUsOCBAQAog
CQkwRkVGQzlBODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJs
ZUFsbG9jYXRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enou
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25G
dXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5
NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHBhdGggPSBkZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aDsgcGF0aCA9IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc2Fzc2VtYmxlci5oOyBwYXRoID0g
ZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY0MjczMDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHA7
IHBhdGggPSBkaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNv
ZGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdWRpczg2X2RlY29kZS5jOyBw
YXRoID0gZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZGlzODZfZGVjb2RlLmM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMTY5LDggKzMxODcsNiBAQAogCQlBNzdGMTgyMDE2NDA4OEIyMDA2
NDBBNDcgLyogQ29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
ZGVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgyNDE2NDE5MjU0
MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8q
IE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5
REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVk
RmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRG
aW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTAxLDggKzQ1MTcsNiBAQAogCQkJCUE3
QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3
QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCi0JCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0
IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAotCQkJCUE3ODg1M0Y4MTc5NzI2Mjkw
MDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5
NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUx
OTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJQTEyQkJGRjMxQjA0
NEE5ODAwNjY0QjY5IC8qIEludGxPYmplY3QuY3BwICovLApAQCAtNDg4OSw2ICs0OTAzLDEwIEBA
CiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0
VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFZhbHVlLmggKi8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZEM0U0MDAxQjYx
OEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dC5oICovLAorCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1
MzMgLyogREZHQW5hbHlzaXMuaCAqLywKQEAgLTUwNDgsNiArNTA2Niw4IEBACiAJCQkJMEYyQkRD
M0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAogCQkJCTBGOEYxNDMx
MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLywKIAkJCQkw
RjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oICovLAor
CQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5j
cHAgKi8sCisJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmggKi8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9t
aW5hdG9ycy5jcHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1
cmFsTG9vcHMuY3BwICovLApAQCAtNTMxOSw4ICs1MzM5LDYgQEAKIAkJCQkwRjBCODNBNTE0QkNG
NTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQw
MkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY2RkM3NEYxOTYxMTBBODAwRTFE
MDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8sCi0JCQkJMEYzRDBCQkIxOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLywKIAkJCQkwRjQyNkE0QTE0
NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAogCQkJCTBGQzcxMkRDMTdDRDg3Nzgw
MDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAogCQkJCTBGQzcx
MkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywK
QEAgLTUzNTMsNiArNTM3MSwxMCBAQAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0RjVDN0Q0
MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJCTE0Q0E5
NThDMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJ
CTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAg
Ki8sCisJCQkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmggKi8sCisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5NjlBMDc5NDBFRDFEM0FFMDBGMUY2
ODEgLyogT3Bjb2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8s
CkBAIC01MzY0LDYgKzUzODYsOCBAQAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAy
IC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQw
RDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4
MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDgxQjYxOEI2NjAw
QzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1
RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKQEAgLTU4NzQsNiArNTg5OCw3IEBACiAJCQkJQzI5
ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0Rv
bWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAv
KiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JC
OTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MTI2LDYgKzYxNTEsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21i
aW5lZERvbWFpbnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzg4MTg1NjgzMzUwMDJF
RDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIw
MEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQz
OEMxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTM1LDcgKzYxNjEsNiBAQAogCQkJCUE3QThBRjNC
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4
QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyog
SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIy
RiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0OCw2ICs2MTczLDcgQEAKIAkJ
CQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzYyLDcgKzYzODgsNiBAQAogCQkJCUJDMThDNDNDMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0Uz
RTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAwOENFNzE4NzYzMUI2
MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIx
M0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5
MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjQ0NSw5ICs2NDcwLDExIEBACiAJCQkJMkFBRDk2NEExODU2OTQxNzAwMUY5M0JF
IC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBB
QzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBS
ZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8q
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4
cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTI0LDYgKzY1NTEsNyBAQAog
CQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBDMUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzE1LDYgKzczNDMs
NyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNC
MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0
IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMjUsNiArNzM1NCw3
IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1
NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTczNzYsNiArNzQwNiw3IEBACiAJCQkJQTVDRUVFMTQxODdG
M0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwMTFCNjE4
QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUY3MzgyQzE4
QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzM4Niw3ICs3NDE3LDYgQEAKIAkJCQlBNTMyNDM4QjE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3Rv
clZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
RjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0MDMsNiArNzQzMyw3IEBACiAJCQkJQkNERDUxRUIw
RkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcx
MjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0QzE3RUUy
NzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkND
ODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDU4LDcgKzc0ODksNiBAQAogCQkJCUE1MDNGQTFC
MTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAxM0U3
QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0QwQkJDMTk0QTQxNDMwMEZD
OUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
NUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUE3MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2NTEsNiArNzY4MSw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMyRDAw
MTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBFQkI3
QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJG
MEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMg
LyogSlNKb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzY2MCw2ICs3NjkxLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3
MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4
MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQw
MTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTEx
ODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IDA7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0g
MDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBl
KSB7CkBAIC0zNzAsMTEgKzM2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByb3RvdHlwZVN0
cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
LCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CkBAIC0z
ODIsOSArMzc2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAog
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiKCIpOwogICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJl
KG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGR1bXBDaGFpbihvdXQsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTQ1NiwxMCArNDUwLDggQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAicHJldiIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUu
Z2V0KCksIGlkZW50KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAgICAg
ICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAg
ICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCJsaXN0ID0gWyIpOwpAQCAtNDgzLDEwICs0NzUsOCBAQCB2b2lkIENvZGVCbG9jazo6
cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRl
bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGFjY2Vzcy5jaGFpbigpLCBpZGVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vz
cy5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsICIsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJ1bmtub3duIik7
CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw5ICszOCw2IEBAIHZvaWQgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXIKICAg
ICAgICAgZGF0YUxvZygiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiBv
biAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogCiAgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6
YXRpb24sICZkZXRhaWwpOwotCi0gICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgIHJlbW92ZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzQ4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvbXBsZXhH
ZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAotICAgIHVuc2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisg
ICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQK
ICAgICAvLyBoYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRv
bid0CkBAIC00MCwzMiArMzksMjYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdQogICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpOworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5E
RkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwog
ICAgIAogICAgIENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJ
bmxpbmVhYmxlOwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAg
IHJlc3VsdC5tX2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0g
ICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3Vu
dCkpOworICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQu
bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJl
c3VsdC5tX2NoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25k
aXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
c2tpcCgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWlu
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIHRha2VzU2xvd1BhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50
T2JqZWN0ID0gcmVzdWx0Lm1fY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0
cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAg
ICAgIAotICAgICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3Qp
OworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0
aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0
Lm1fYXR0cmlidXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
aGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7
Ci0gICAgfQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0g
ZWxzZQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3
NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVz
X2gKICNkZWZpbmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3Rh
dHVzKCkKICAgICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChp
bnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAg
ICAgfQogICAgIApAQCAtOTcsMjEgKzk2LDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
c3RhdGljIENvbXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CisgICAgICAgIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0gICAgSlNWYWx1ZSBzcGVjaWZpY1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7
CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVz
OwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2su
Y3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihDaGVjayBpZiAi
LCBpbkNvbnRleHQoSlNWYWx1ZShtX2NvbnN0YW50KSwgY29udGV4dCksICIgaGFzIHN0cnVjdHVy
ZSAiLAotICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCks
ICIpIik7Ci19Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQot
U3RydWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgdmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IHZl
Y3Rvci5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHZlY3RvcltpXS5jb25zdGFudCgpID09
IGNvbnN0YW50KQotICAgICAgICAgICAgcmV0dXJuIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgYXJlQ29tcGF0aWJsZShjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBhLCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrVmVjdG9yJiBiKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IGEuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogb3RoZXJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IoYiwgYVtp
XS5jb25zdGFudCgpKTsKLSAgICAgICAgaWYgKCFvdGhlclN0cnVjdHVyZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYVtpXS5zdHJ1Y3R1cmUoKSAhPSBvdGhlclN0cnVjdHVy
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNv
dXJjZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KQotewotICAgIGZvciAo
dW5zaWduZWQgaSA9IHNvdXJjZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZUZvcih0YXJnZXQsIHNvdXJjZVtpXS5jb25zdGFudCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB0YXJnZXQuYXBwZW5kKHNvdXJjZVtpXSk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0
YW50U3RydWN0dXJlQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLSNk
ZWZpbmUgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KLSNpbmNsdWRlICJEdW1wQ29udGV4dC5o
IgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIENvbnN0YW50U3RydWN0dXJlQ2hlY2sgewotcHVibGljOgotICAgIENv
bnN0YW50U3RydWN0dXJlQ2hlY2soKQotICAgICAgICA6IG1fY29uc3RhbnQobnVsbHB0cikKLSAg
ICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIGNvbnN0YW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICAgICAgOiBtX2NvbnN0YW50KGNvbnN0YW50KQotICAgICAgICAsIG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghIW1fY29uc3RhbnQgPT0gISFtX3N0
cnVjdHVyZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fY29uc3RhbnQ7IH0KLSAgICAKLSAgICBKU0NlbGwqIGNvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudDsgfQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KLSAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0NlbGwqIG1fY29uc3RhbnQ7Ci0gICAgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPENvbnN0YW50U3RydWN0
dXJlQ2hlY2ssIDI+IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3I7Ci0KLVN0cnVjdHVyZSog
c3RydWN0dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3Rvciwg
SlNDZWxsKiBjb25zdGFudCk7Ci1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVja1ZlY3RvciYsIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsK
LXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNvdXJj
ZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OSw4ICsxNjksNyBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0KGxpc3RJbmRleCkuc3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENv
bXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0gICAgICAgICAgICAg
ICAgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbkNvdW50KCksIHVpZCk7CisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQo
KSkgewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAt
MjA2LDggKzIwNSw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdl
dEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCi0gICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwor
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25k
aXRpb25TZXQoKSwgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRy
dWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwyMyArMzQsMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVy
ZVNldCkKLSAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQorICAgICwgbV9jb25kaXRpb25T
ZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9jYWxsTGlu
a1N0YXR1cyhXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKQogewogICAgIGlmICghc3RydWN0dXJl
U2V0LnNpemUoKSkgewogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpOwot
ICAgICAgICBBU1NFUlQoIWNoYWluKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGNoYWluICYmIGNo
YWluLT5zaXplKCkpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFs
UHJvdG90eXBlKCk7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MobV9jb25zdGFudENoZWNr
cyk7CisgICAgICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKICAgICB9CiB9Ci0K
KyAgICAgICAgICAgICAgICAgICAgIAogR2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlkVmFyaWFudCgp
IHsgfQogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlh
bnQmIG90aGVyKQpAQCAtNjIsOCArNTgsNyBAQCBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlh
bnQoY29uc3QgR2V0CiBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShj
b25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQgPSBvdGhl
ci5tX3N0cnVjdHVyZVNldDsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFu
dENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7Cisg
ICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29mZnNldCA9
IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAg
ICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90
aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzIsMjggKzY3LDE5IEBAIEdldEJ5SWRWYXJpYW50
JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVN0cnVj
dHVyZVNldCBHZXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKTsKLSAgICAK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tz
LCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAg
cmV0dXJuIHN0cnVjdHVyZTsKLX0KLQogYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVy
Z2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQogewotICAgIGlmIChtX2FsdGVybmF0ZUJh
c2UgIT0gb3RoZXIubV9hbHRlcm5hdGVCYXNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghYXJlQ29tcGF0aWJsZShtX2NvbnN0YW50Q2hlY2tz
LCBvdGhlci5tX2NvbnN0YW50Q2hlY2tzKSkKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQgPQorICAgICAgICBtX2NvbmRpdGlvblNldC5tZXJn
ZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNl
dC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlv
bigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgbWVyZ2VJbnRvKG90aGVyLm1f
Y29uc3RhbnRDaGVja3MsIG1fY29uc3RhbnRDaGVja3MpOworICAgIG1fY29uZGl0aW9uU2V0ID0g
bWVyZ2VkQ29uZGl0aW9uU2V0OwogICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3Ry
dWN0dXJlU2V0KTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMiwxMCArOTgsNyBAQCB2
b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgfQogICAgIAogICAg
IG91dC5wcmludCgKLSAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRl
eHQpLCAiLCAiLAotICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVj
a3MsIGNvbnRleHQpLCAiXSIpOwotICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIG91
dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5h
dGVCYXNlKSwgY29udGV4dCkpOworICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQo
KSwgY29udGV4dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCkpOwog
ICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2FsbExp
bmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0
dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw5ICsyNyw4IEBACiAjZGVm
aW5lIEdldEJ5SWRWYXJpYW50X2gKIAogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5j
bHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotI2luY2x1ZGUgIkludGVuZGVkU3RydWN0
dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBAIC00Myw3ICs0Miw3IEBAIGNsYXNzIEdldEJ5SWRWYXJp
YW50IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gaW52YWxpZE9mZnNldCwKLSAgICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
biogY2hhaW4gPSBudWxscHRyLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0gbnVsbHB0cik7CiAgICAgCiAg
ICAgfkdldEJ5SWRWYXJpYW50KCk7CkBAIC01NSw5ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0K
ICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0
OyB9Ci0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVj
a3MoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3QqIGFs
dGVybmF0ZUJhc2UoKSBjb25zdCB7IHJldHVybiBtX2FsdGVybmF0ZUJhc2U7IH0KLSAgICBTdHJ1
Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OworCisgICAgLy8gVGhlIHByZXNlbmNlIG9m
IGEgY29uZGl0aW9uIHNldCBtZWFucyB0aGF0IHRoaXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KKyAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxs
TGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAg
ICAKQEAgLTcwLDggKzcwLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgR2V0QnlJZFN0
YXR1czsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBt
X2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgiPCIsIGluQ29udGV4dChKU1Zh
bHVlKG1fb2JqZWN0KSwgY29udGV4dCksICI6ICIsIGluQ29udGV4dChtX2NvbmRpdGlvbiwgY29u
dGV4dCksICI+Iik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7
Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxp
ZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOwor
fQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJl
dHVybiBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRo
aXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1
aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChz
dHJ1Y3R1cmUsIG1fb2JqZWN0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChtX29iamVjdC0+c3RydWN0dXJl
KCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
ZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRj
aGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5p
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgbV9v
YmplY3QsIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0
Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgUHJvcGVydHlDb25k
aXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhp
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZWZm
b3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dhdGNoYWJs
ZShzdHJ1Y3R1cmUsIG1fb2JqZWN0LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjppc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZm
b3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwg
ZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUo
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpOworfQorCit2b2lk
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tl
ZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIHRyYWNrZWQuY2hlY2sobV9vYmplY3QpOworICAgIG1fY29uZGl0
aW9uLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAi
UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisKK2NsYXNzIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpCisg
ICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSB0b2tlbikK
KyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgICAgICAsIG1fY29uZGl0aW9uKHRva2Vu
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oSlNPYmpl
Y3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKKyAgICAgICAg
OiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9jb25kaXRpb24oY29uZGl0aW9uKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNl
bmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykK
KyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0
cmlidXRlcyk7IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsK
KyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3du
ZXIpOworICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwg
b2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0
eUNvbmRpdGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmpl
Y3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJy
aWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VXaXRob3V0QmFycmllcihvYmplY3Qs
IHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVj
dCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFBy
b3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3Rv
dHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
SlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VP
ZlNldHRlcldpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VXaXRob3V0
QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1
bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFy
cmllcih1aWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAg
ICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFs
ZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29uZGl0aW9uOyB9OworICAgIAor
ICAgIEpTT2JqZWN0KiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIFBy
b3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uOyB9
CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IGNvbmRpdGlvbigpLmtpbmQoKTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS51aWQoKTsgfQorICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzT2Zmc2V0KCk7IH0KKyAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5vZmZzZXQoKTsgfQorICAgIHVu
c2lnbmVkIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNBdHRy
aWJ1dGVzKCk7IH0KKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gY29u
ZGl0aW9uKCkuYXR0cmlidXRlcygpOyB9CisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7
IHJldHVybiBjb25kaXRpb24oKS5oYXNQcm90b3R5cGUoKTsgfQorICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5wcm90b3R5cGUoKTsgfQorICAgIGJv
b2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1JlcXVp
cmVkVmFsdWUoKTsgfQorICAgIEpTVmFsdWUgcmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IGNvbmRpdGlvbigpLnJlcXVpcmVkVmFsdWUoKTsgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEpTT2JqZWN0Kj46Omhhc2gobV9vYmplY3Qp
ICsgbV9jb25kaXRpb24uaGFzaCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0CisgICAgICAgICAgICAmJiBtX2Nv
bmRpdGlvbiA9PSBvdGhlci5tX2NvbmRpdGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2Jq
ZWN0ICYmIG1fY29uZGl0aW9uLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAg
IAorICAgIC8vIFR3byBjb25kaXRpb25zIGFyZSBjb21wYXRpYmxlIGlmIHRoZXkgYXJlIGlkZW50
aWNhbCBvciBpZiB0aGV5IHNwZWFrIG9mIGRpZmZlcmVudCB1aWRzIG9yCisgICAgLy8gZGlmZmVy
ZW50IG9iamVjdHMuIElmIGZhbHNlIGlzIHJldHVybmVkLCB5b3UgaGF2ZSB0byBkZWNpZGUgaG93
IHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0IC0KKyAgICAvLyBmb3IgZXhhbXBsZSBpZiB0aGVyZSBp
cyBhIFByZXNlbmNlIGFuZCBhbiBFcXVpdmFsZW5jZSB0aGVuIGluIHNvbWUgY2FzZXMgeW91J2xs
IHdhbnQgdGhlCisgICAgLy8gbW9yZSBnZW5lcmFsIG9mIHRoZSB0d28gd2hpbGUgaW4gb3RoZXIg
Y2FzZXMgeW91J2xsIHdhbnQgdGhlIG1vcmUgc3BlY2lmaWMgb2YgdGhlIHR3by4gVGhpcworICAg
IC8vIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UgZm9yIGNvbnRyYWRpY3Rpb25zLCBsaWtlIFByZXNl
bmNlIGFuZCBBYnNlbmNlIG9uIHRoZSBzYW1lCisgICAgLy8gb2JqZWN0L3VpZC4gQnkgY29udmVu
dGlvbiwgaW52YWxpZCBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcu
CisgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwg
dWlkKCkgIT0gb3RoZXIudWlkKCkgfHwgb2JqZWN0KCkgIT0gb3RoZXIub2JqZWN0KCk7CisgICAg
fQorICAgIAorICAgIC8vIFRoZXNlIHZhbGlkaXR5LWNoZWNraW5nIG1ldGhvZHMgY2FuIG9wdGlv
bmFsbHkgdGFrZSBhIFN0cnV0dXJlKiBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlCisgICAgLy8gU3Ry
dWN0dXJlKiBmcm9tIHRoZSBvYmplY3QuIElmIHlvdSdyZSBpbiB0aGUgY29uY3VycmVudCBKSVQs
IHRoZW4geW91IG11c3QgdXNlIHRoZSBmb3JtcworICAgIC8vIHRoYXQgdGFrZSBhbiBleHBsaWNp
dCBTdHJ1Y3R1cmUqIGJlY2F1c2UgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZv
ciB0aGUgc2FtZQorICAgIC8vIHN0cnVjdHVyZSB0aGF0IHlvdSB2YWxpZGF0ZWQgKGkuZS4gYXZv
aWQgYSBUT0NUT1UgcmFjZSkuCisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBz
dHJ1Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLiBW
YWxpZGl0eQorICAgIC8vIGRvZXMgbm90IHJlcXVpcmUgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVj
dC4KKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hw
b2ludCB0byBlbnN1cmUgdmFsaWRpdHkgZXZlbiBpZgorICAgIC8vIGlzU3RpbGxWYWxpZEFjY29y
ZGluZ1RvU3RydWN0dXJlKCkgcmV0dXJuZWQgdHJ1ZS4KKyAgICBib29sIHZhbGlkaXR5UmVxdWly
ZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCB2
YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisKKyAgICAv
LyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBzdGlsbCBob2xkcy4gTWF5IGNvbnNlcnZhdGl2ZWx5
IHJldHVybiBmYWxzZSwgaWYgdGhlIG9iamVjdCBhbmQKKyAgICAvLyBzdHJ1Y3R1cmUgYWxvbmUg
ZG9uJ3QgZ3VhcmFudGVlIHRoZSBjb25kaXRpb24uIE5vdGUgdGhhdCB0aGlzIG1heSByZXR1cm4g
dHJ1ZSBpZiB0aGUKKyAgICAvLyBjb25kaXRpb24gc3RpbGwgcmVxdWlyZXMgc29tZSB3YXRjaHBv
aW50cyBvbiB0aGUgb2JqZWN0IGluIGFkZGl0aW9uIHRvIGNoZWNraW5nIHRoZQorICAgIC8vIHN0
cnVjdHVyZS4gSWYgeW91IHdhbnQgdG8gY2hlY2sgaWYgdGhlIGNvbmRpdGlvbiBob2xkcyBieSB1
c2luZyB0aGUgc3RydWN0dXJlIGFsb25lLAorICAgIC8vIHVzZSBzdHJ1Y3R1cmVFbnN1cmVzVmFs
aWRpdHkoKS4KKyAgICBib29sIGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBi
b29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIAorICAgIC8vIFNob3J0aGFuZCBmb3IgY29u
ZGl0aW9uKCkuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSkuCisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1
cmVzVmFsaWRpdHkoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGls
bCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNp
dGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZSBhbmQgcG9zc2libHkgYW4g
aW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQuCisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBTdHJ1Y3R1cmUqLAorICAgICAgICBQ
cm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246
Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJp
bGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKwor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZv
cmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBv
biB0aGUgc3RydWN0dXJlLgorICAgIGJvb2wgaXNXYXRjaGFibGUoCisgICAgICAgIFN0cnVjdHVy
ZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJs
ZSgKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNo
aW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gY29uZGl0aW9uKCkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50KCk7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxh
Y2VtZW50V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uZGl0aW9u
KCkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpOworICAgIH0KKyAgICAK
KyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdHMgaW52b2x2ZWQgaW4gdGhpcyBhcmUg
c3RpbGwgbGl2ZS4KKyAgICBib29sIGlzU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9p
ZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBKU09iamVjdCogbV9vYmplY3Q7CisgICAgUHJvcGVydHlDb25kaXRpb24g
bV9jb25kaXRpb247Cit9OworCitzdHJ1Y3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIHsK
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAg
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
IgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQ6OmZvck9iamVjdChKU09iamVjdCogb2JqZWN0KSBjb25zdAoreworICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7
CisgICAgICAgIGlmIChjb25kaXRpb24ub2JqZWN0KCkgPT0gb2JqZWN0KQorICAgICAgICAgICAg
cmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uKCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0Ojpmb3JDb25kaXRpb25LaW5kKAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtp
bmQpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkK
KyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbigpOworfQorCit1bnNpZ25lZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldDo6bnVtYmVyT2ZDb25kaXRpb25zV2l0aEtpbmQoUHJvcGVydHlDb25kaXRpb246OktpbmQg
a2luZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgIGZvciAoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlm
IChjb25kaXRpb24ua2luZCgpID09IGtpbmQpCisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6aGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBudW1iZXJP
ZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpID09IDE7Cit9
CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpz
bG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
cmVzdWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29u
ZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAg
IH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFvdGhlci5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisgICAgZm9yIChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3RoZXIpIHsKKyAg
ICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3RpbmdDb25kaXRp
b24gOiAqdGhpcykgeworICAgICAgICAgICAgaWYgKG5ld0NvbmRpdGlvbiA9PSBleGlzdGluZ0Nv
bmRpdGlvbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghbmV3
Q29uZGl0aW9uLmlzQ29tcGF0aWJsZVdpdGgoZXhpc3RpbmdDb25kaXRpb24pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5ld0Nv
bmRpdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbm9uRW1wdHkocmVzdWx0
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3Vy
ZVZhbGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJl
c0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAor
eworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6Om5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAg
IGlmIChjb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxMaXZlKCkgY29uc3QK
K3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAq
dGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAg
ICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG91dC5wcmludCgiWyIpOworICAgIGlmIChtX2RhdGEpCisgICAgICAgIG91dC5wcmlu
dChsaXN0RHVtcEluQ29udGV4dChtX2RhdGEtPnZlY3RvciwgY29udGV4dCkpOworICAgIG91dC5w
cmludCgiXSIpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIp
OworfQorCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNv
bmRpdGlvbjo6S2luZCBjb25kaXRpb25LaW5kKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbktpbmQp
IHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob2Zmc2V0
ID09IGludmFsaWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb24oKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5j
ZSh2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAg
ICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOiB7CisgICAgICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2Jq
ZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpKTsK
KyAgICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOiB7Cisg
ICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKAor
ICAgICAgICAgICAgdm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24oKTsKKyAgICB9Cit9CisKK2VudW0gQ29uY3VycmVuY3kgeworICAgIE1haW5U
aHJlYWQsCisgICAgQ29uY3VycmVudAorfTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdl
bmVyYXRlQ29uZGl0aW9ucygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIEpTT2JqZWN0KiBw
cm90b3R5cGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5k
IGtpbmQsCisgICAgQ29uY3VycmVuY3kgY29uY3VycmVuY3kgPSBNYWluVGhyZWFkKQoreworICAg
IEFTU0VSVCghIXByb3RvdHlwZSA9PSAoa2luZCA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2Vu
Y2UpKTsKKyAgICAKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IGNvbmRpdGlv
bnM7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIHN0cnVjdHVyZTogIiwgcG9pbnRlckR1bXAoc3RydWN0
dXJlKSwgIlxuIik7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkp
IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkl0
J3MgYSBwcm94eSwgc28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxP
YmplY3QpOworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAg
ICAgICBpZiAoIXByb3RvdHlwZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZWFjaGVkIGVuZCB1cCBwcm90b3R5cGUgY2hhaW4g
YXMgZXhwZWN0ZWQsIGRvbmUuXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IlVuZXhwZWN0ZWRseSByZWFjaGVkIGVuZCBvZiBwcm90b3R5cGUgY2hhaW4sIHNvIGludmFsaWQu
XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52
YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0g
anNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgICAgICBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0
cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3Npbmcg
YSBwcm90b3R5cGUgcmVwZWF0ZWRseSwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQgc2hvdWxkIG5v
dCBiZQorICAgICAgICAvLyB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KKyAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmIChjb25jdXJyZW5jeSA9
PSBNYWluVGhyZWFkKQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25h
cnlTdHJ1Y3R1cmUodm0sIG9iamVjdCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2Fubm90IGZs
YXR0ZW4gZGljdGlvbmFyeSB3aGVuIG5vdCBvbiBtYWluIHRocmVhZCwgc28gaW52YWxpZC5cbiIp
OworICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52
YWxpZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
UHJvcGVydHlDb25kaXRpb246OktpbmQgdGhpc0NvbmRpdGlvbktpbmQ7CisgICAgICAgIGlmIChr
aW5kID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSAmJiBvYmplY3QgIT0gcHJvdG90eXBl
KQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJz
ZW5jZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBraW5k
OworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbmV3Q29uZGl0aW9u
ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQs
IHRoaXNDb25kaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFuZXdDb25kaXRpb24gfHwgIW5ld0Nv
bmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAg
IGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIGNvbmRpdGlv
biBvciBjb25kaXRpb24gY2Fubm90IGJlIGVuc3VyZWQgYnkgc3RydWN0dXJlLCBzbyBpbnZhbGlk
OiAiLAorICAgICAgICAgICAgICAgICAgICBuZXdDb25kaXRpb24sICJcbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZh
bGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKG5l
d0NvbmRpdGlvbik7CisgICAgICAgIAorICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkg
eworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVh
Y2hlZCBkZXNpcmVkIHByb3RvdHlwZSwgZG9uZS5cbiIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdC4KKyAgICBz
d2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogewor
ICAgICAgICB1bnNpZ25lZCBwcmVzZW5jZUNvdW50ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0aW9ucykgeworICAgICAg
ICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgICAgICBwcmVzZW5jZUNvdW50Kys7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0
aW9uOjpBYnNlbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByZXNlbmNlQ291bnQg
PT0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlvbnMp
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IGtpbmQpOwor
ICAgIH0gfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJldHVybmluZyBj
b25kaXRpb25zOiAiLCBsaXN0RHVtcChjb25kaXRpb25zKSwgIlxuIik7CisgICAgcmV0dXJuIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpub25FbXB0eShjb25kaXRpb25zKTsKK30KKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZt
LCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBudWxs
cHRyLCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlKTsKK30KKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0
ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0
dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwKKyAgICAgICAgUHJv
cGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcik7Cit9CisKK09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1
aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7Cit9CisKK09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
c0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAg
ICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgbnVsbHB0ciwgZ2xvYmFs
T2JqZWN0LCBoZWFkU3RydWN0dXJlLCBudWxscHRyLCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpB
YnNlbmNlT2ZTZXR0ZXIsCisgICAgICAgIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
X2gKKyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworLy8gQW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNl
ZCB0byByZXByZXNlbnQgdGhlIHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQg
bmVlZCB0byBiZSBtZXQgZm9yIHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQg
Y2FuIGhhdmUgdGhlIGZvbGxvd2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVt
cHR5OiBUaGVyZSBhcmUgbm8gc3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQu
CisvLyBJbnZhbGlkOiBUaGUgaGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1w
dHk6IFRoZXJlIGFyZSBzb21lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8g
YmUgdmFsaWQuCisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFk
b3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVj
dG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYg
KHZlY3Rvci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOwor
ICAgICAgICByZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRhLT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFt
X2RhdGE7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdpbigpOworICAgIH0KKyAgICBpdGVyYXRvciBl
bmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0K
KyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9i
amVjdCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2lu
ZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1iZXJP
ZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAg
ICBib29sIGhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gSWYg
dGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90eXBlIGhpdCwgdGhlbiB0aGlzIGlz
IGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNvbmRpdGlvbiBvbiB0aGUgcHJvdG90
eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0LCBvZmZzZXQsIGFu
ZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5cGUuIFRoaXMgd2lsbCBSRUxFQVNF
X0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFByZXNlbmNlCisgICAgLy8gaW4gdGhl
IHNldCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2VuY2UuCisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRl
bXB0IHRvIGNyZWF0ZSBhIG5ldyBjb25kaXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0
aCB0aGUgb3RoZXIgb25lLiBUaGlzIHdpbGwKKyAgICAvLyBmYWlsIGlmIGFueSBvZiB0aGUgY29u
ZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlci4gV2hlbiBpZiBmYWlscywg
aXQgcmV0dXJucworICAgIC8vIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBtZXJnZWRXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikg
Y29uc3Q7CisgICAgCisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdDsK
KyAgICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIEhlbHBlcnMg
Zm9yIHVzaW5nIHRoaXMgaW4gYSB1bmlvbi4KKyAgICB2b2lkKiByZWxlYXNlUmF3UG9pbnRlcigp
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0YS5sZWFrUmVm
KCkpOworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgYWRvcHRS
YXdQb2ludGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihz
dGF0aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcikpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZnJvbVJhd1BvaW50
ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19jYXN0PERhdGEq
PihyYXdQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIC8vIEludGVybmFsbHksIHRoaXMgcmVwcmVzZW50cyBJbnZhbGlkIHVzaW5nIGEg
cG9pbnRlciB0byBhIERhdGEgdGhhdCBoYXMgYW4gZW1wdHkgdmVjdG9yLgorICAgIAorICAgIC8v
IEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IGhhdmluZyBpdCBpbnRl
cm5hbGx5IHVzZSBhIHZlY3RvciB0aGF0IGp1c3QgaGFzCisgICAgLy8gdGhlIG5vbi11aWQgcG9y
dGlvbiBvZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgYW5kIHRoZW4gcmVxdWlyaW5nIHRoYXQg
dGhlIGNhbGxlcnMgb2YgYWxsCisgICAgLy8gb2YgdGhlIEFQSXMgc3VwcGx5IHRoZSB1aWQuCisg
ICAgCisgICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7
CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9
CisgICAgICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3Rv
cjsKKyAgICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJv
dG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCitPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJy
ZW50bHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNywxNCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6OkdldEJ5
SWRBY2Nlc3MoCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQpCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQpCiAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fY2hhaW5Db3VudChjaGFp
bkNvdW50KQogICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBt
X2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0
aW5lKQogewotICAgIGlmIChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93bmVyLCBj
aGFpbik7CiB9CiAKIEdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcxLDcgKzY5
LDcgQEAgYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogewogICAgIGlm
IChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1f
Y2hhaW4uZ2V0KCkpKQorICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayhy
ZXBhdGNoQnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
CShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTUzLDEz
ICs1NCwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygpCiAgICAgICAgIDog
bV90eXBlKEludmFsaWQpCi0gICAgICAgICwgbV9jaGFpbkNvdW50KDApCiAgICAgewogICAgIH0K
ICAgICAKICAgICBHZXRCeUlkQWNjZXNzKAogICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAg
ICBTdHJ1Y3R1cmVDaGFpbiogPSAwLCB1bnNpZ25lZCBjaGFpbkNvdW50ID0gMCk7CisgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0KCkpOwogICAgIAogICAgIH5HZXRCeUlkQWNjZXNzKCk7CiAgICAgCkBAIC03Miw4ICs3
Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNo
YWluKCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbi5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYWlu
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2NoYWluQ291bnQ7IH0KKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25k
aXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25z
dAogICAgIHsKQEAgLTkxLDkgKzkwLDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29k
ZUJsb2NrOwogICAgIAogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fY2hh
aW5Db3VudDsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLSAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7IC8vIEZJWE1FIHdoYXQgYWJvdXQgYmFycmllcnM/
CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MSw3ICs1MSw4IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJv
bVN0cnVjdHUKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJl
c3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnByZXZpb3VzU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlG
cm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVz
dWx0Lm1fY2hhaW4uY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjphZG9wdFJhd1BvaW50ZXIoCisgICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0g
c3R1YkluZm8uc3R1YlJvdXRpbmU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTY0LDYg
KzY1LDkgQEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogCiBib29s
IFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBj
b25zdAogeworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgUmVw
bGFjZToKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkp
CkBAIC03NCwxNSArNzgsMTEgQEAgYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRj
aEJ1ZgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkKG1fbmV3U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgY2FzZSBD
dXN0b21TZXR0ZXI6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUu
Z2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9jaGFpbiAm
JiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzQ4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAi
UHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgpAQCAtNTMsNyArNTQsNiBA
QCBwdWJsaWM6CiAgICAgCiAgICAgUHV0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBlKElu
dmFsaWQpCi0gICAgICAgICwgbV9jaGFpbkNvdW50KFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAg
ICAgCkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAog
ICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKKyAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAgICAgUGFzc1Jl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewogICAgICAgICBQdXRCeUlk
QWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAg
ICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOwog
ICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJl
KTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworICAgICAg
ICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5t
X2N1c3RvbVNldHRlciA9IDA7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJv
dXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05NSw4ICs5NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAotICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LAorICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKQEAgLTEwNCwxMCArMTAzLDcgQEAgcHVibGlj
OgogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUg
PSBhY2Nlc3NUeXBlOwotICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgICAgIHJlc3VsdC5t
X2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKLSAgICAgICAgICAgIHJlc3VsdC5tX2NoYWlu
Q291bnQgPSBjaGFpbkNvdW50OwotICAgICAgICB9CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gY3Vz
dG9tU2V0dGVyOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ2LDE3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX25ld1N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0
dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRp
b24oKSB8fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFp
bi5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAgICAg
cmV0dXJuIG1fY2hhaW5Db3VudDsKLSAgICB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9
CiAgICAgCiAgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkBA
IC0xNzgsOCArMTY0LDcgQEAgcHJpdmF0ZToKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hh
aW4+IG1fY2hhaW47Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OworICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jIG1fY3VzdG9tU2V0dGVyOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9z
dHViUm91dGluZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJv
cGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNvbmRpdGlv
bi5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVu
Y2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAg
ICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG91dC5wcmludChtX2tpbmQsICIgb2YgIiwgbV91aWQpOworICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCIgYXQgIiwgb2Zm
c2V0KCksICIgd2l0aCBhdHRyaWJ1dGVzICIsIGF0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAg
IG91dC5wcmludCgiIHdpdGggcHJvdG90eXBlICIsIGluQ29udGV4dChKU1ZhbHVlKHByb3RvdHlw
ZSgpKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFcXVpdmFsZW5jZToK
KyAgICAgICAgb3V0LnByaW50KCIgd2l0aCAiLCBpbkNvbnRleHQocmVxdWlyZWRWYWx1ZSgpLCBj
b250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKwor
Ym9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlKSBj
b25zdAoreworICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAg
ICAiRGV0ZXJtaW5pbmcgdmFsaWRpdHkgb2YgIiwgKnRoaXMsICIgd2l0aCBzdHJ1Y3R1cmUgIiwg
cG9pbnRlckR1bXAoc3RydWN0dXJlKSwgIiBhbmQgYmFzZSAiLAorICAgICAgICAgICAgSlNWYWx1
ZShiYXNlKSwgIiBhc3N1bWluZyBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludHMgYXJlIHNldC5c
biIpOworICAgIH0KKyAgICAKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgZGF0YUxvZygiSW52YWxpZCBiZWNhdXNlIHVuc2V0LlxuIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3Bl
cnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSBhY2Nlc3NlcyBhcmUgbm90IGNhY2hlYWJs
ZS5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50
QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAg
IGlmIChjdXJyZW50T2Zmc2V0ICE9IG9mZnNldCgpIHx8IGN1cnJlbnRBdHRyaWJ1dGVzICE9IGF0
dHJpYnV0ZXMoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHdlIG5lZWQg
b2Zmc2V0LCBhdHRyaWJ1dGVzIHRvIGJlICIsIG9mZnNldCgpLCAiLCAiLCBhdHRyaWJ1dGVzKCks
CisgICAgICAgICAgICAgICAgICAgICIgYnV0IHRoZXkgYXJlICIsIGN1cnJlbnRPZmZzZXQsICIs
ICIsIGN1cnJlbnRBdHRyaWJ1dGVzLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgQWJzZW5jZTogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiSW52YWxpZCBiZWNhdXNlIGl0J3MgYSBkaWN0aW9uYXJ5LlxuIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBQcm9wZXJ0eU9mZnNldCBj
dXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpOworICAgICAg
ICBpZiAoY3VycmVudE9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgdGhlIHBy
b3BlcnR5IGV4aXN0cyBhdCBvZmZzZXQ6ICIsIGN1cnJlbnRPZmZzZXQsICJcbiIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSAhPSBwcm90b3R5cGUoKSkgeworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHRoZSBwcm90b3R5cGUgaXMgIiwgc3RydWN0dXJl
LT5zdG9yZWRQcm90b3R5cGUoKSwgIiBldmVuIHRob3VnaCAiCisgICAgICAgICAgICAgICAgICAg
ICJpdCBzaG91bGQgaGF2ZSBiZWVuICIsIEpTVmFsdWUocHJvdG90eXBlKCkpLCAiXG4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGNhc2UgQWJzZW5jZU9m
U2V0dGVyOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJl
Y2F1c2UgaXQncyBhIGRpY3Rpb25hcnkuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7
CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVu
dE9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJp
YnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
ICAgICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB3ZSBleHBlY3RlZCBub3QgdG8gaGF2ZSBhIHNl
dHRlciwgYnV0IHdlIGhhdmUgb25lIGF0IG9mZnNldCAiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudE9mZnNldCwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgY3VycmVudEF0dHJpYnV0ZXMs
ICJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpICE9IHByb3RvdHlwZSgpKSB7CisgICAgICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAg
ICAgICAgICJJbnZhbGlkIGJlY2F1c2UgdGhlIHByb3RvdHlwZSBpcyAiLCBzdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZSgpLCAiIGV2ZW4gdGhvdWdoICIKKyAgICAgICAgICAgICAgICAgICAgIml0
IHNob3VsZCBoYXZlIGJlZW4gIiwgSlNWYWx1ZShwcm90b3R5cGUoKSksICJcbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRXF1aXZhbGVu
Y2U6IHsKKyAgICAgICAgaWYgKCFiYXNlIHx8IGJhc2UtPnN0cnVjdHVyZSgpICE9IHN0cnVjdHVy
ZSkgeworICAgICAgICAgICAgLy8gQ29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBzaW5jZSB3
ZSBjYW5ub3QgdmVyaWZ5IHRoaXMgb25lIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgICAg
Ly8gb2JqZWN0LgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHdlIGRvbid0IGhh
dmUgYSBiYXNlIG9yIHRoZSBiYXNlIGhhcyB0aGUgd3Jvbmcgc3RydWN0dXJlOiAiLAorICAgICAg
ICAgICAgICAgICAgICBSYXdQb2ludGVyKGJhc2UpLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgaXMgc29tZXdoYXQgcmFjeSwgYW5kIG1heWJlIG1vcmUgcmlza3kgdGhhbiB3
ZSB3YW50LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM0NjQxCisgICAgICAgIAorICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpOworICAgICAgICBKU1ZhbHVlIGN1
cnJlbnRWYWx1ZSA9IGJhc2UtPmdldERpcmVjdChjdXJyZW50T2Zmc2V0KTsKKyAgICAgICAgaWYg
KGN1cnJlbnRWYWx1ZSAhPSByZXF1aXJlZFZhbHVlKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIklu
dmFsaWQgYmVjYXVzZSB0aGUgdmFsdWUgaXMgIiwgY3VycmVudFZhbHVlLCAiIGJ1dCB3ZSByZXF1
aXJlICIsIHJlcXVpcmVkVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgIlxuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVy
ZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6Cisg
ICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9u
Ojppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlKSBjb25z
dAoreworICAgIGlmICghaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoc3RydWN0dXJlLCBiYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3Vy
cmVudGx5IHdlIGFzc3VtZSB0aGF0IGFuIGltcHVyZSBwcm9wZXJ0eSBjYW4gY2F1c2UgYSBwcm9w
ZXJ0eSB0byBhcHBlYXIsIGFuZCBjYW4gYWxzbworICAgIC8vICJzaGFkb3ciIGFuIGV4aXN0aW5n
IEpTIHByb3BlcnR5IG9uIHRoZSBzYW1lIG9iamVjdC4gSGVuY2UgaXQgYWZmZWN0cyBib3RoIHBy
ZXNlbmNlIGFuZAorICAgIC8vIGFic2VuY2UuIEl0IGRvZXNuJ3QgYWZmZWN0IEFic2VuY2VPZlNl
dHRlciBiZWNhdXNlIGltcHVyZSBwcm9wZXJ0aWVzIGFyZW4ndCBldmVyIHNldHRlcnMuCisgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToK
KyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygp
Lmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0
Y2hhYmxlV2hlblZhbGlkKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgRXF1aXZhbGVuY2U6IHsKKyAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KCkpOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIHdoZW4gc29tZSB2YXJpYW50IG9mIGlzVmFsaWQgcmV0dXJuZWQgdHJ1ZSwgd2hpY2gKKyAg
ICAgICAgLy8gaW1wbGllcyB0aGF0IHdlIGFscmVhZHkgY29uZmlybWVkIHRoYXQgdGhlIHN0cnVj
dHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHkuIFdlIHNob3VsZAorICAgICAgICAvLyBhbHNvIGhh
dmUgdmVyaWZpZWQgdGhhdCB0aGUgU3RydWN0dXJlIGlzIGEgY2FjaGVhYmxlIGRpY3Rpb25hcnks
IHdoaWNoIG1lYW5zIHdlCisgICAgICAgIC8vIHNob3VsZG4ndCBoYXZlIGEgVE9DVE9VIHJhY2Ug
ZWl0aGVyLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7
CisgICAgICAgIAorICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgICAgIHN3aXRjaCAo
ZWZmb3J0KSB7CisgICAgICAgIGNhc2UgTWFrZU5vQ2hhbmdlczoKKyAgICAgICAgICAgIHNldCA9
IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuc3VyZVdhdGNoYWJpbGl0eToKKyAgICAg
ICAgICAgIHNldCA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQoCisgICAgICAgICAgICAgICAgKkhlYXA6OmhlYXAoc3RydWN0dXJlKS0+dm0oKSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoIXNldCB8fCAhc2V0LT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSwgV2F0
Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlk
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBiYXNlKQorICAgICAg
ICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wg
UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU09iamVjdCogYmFzZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSwgYmFzZSkKKyAgICAgICAgJiYgaXNXYXRj
aGFibGVXaGVuVmFsaWQoc3RydWN0dXJlLCBlZmZvcnQpOworfQorCitib29sIFByb3BlcnR5Q29u
ZGl0aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpICYm
ICFIZWFwOjppc01hcmtlZChwcm90b3R5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAoaGFzUmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUo
KQorICAgICAgICAmJiByZXF1aXJlZFZhbHVlKCkuaXNDZWxsKCkKKyAgICAgICAgJiYgIUhlYXA6
OmlzTWFya2VkKHJlcXVpcmVkVmFsdWUoKS5hc0NlbGwoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6
dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkKSBjb25z
dAoreworICAgIGlmIChoYXNQcm90b3R5cGUoKSkKKyAgICAgICAgdHJhY2tlZC5jaGVjayhwcm90
b3R5cGUoKSk7CisgICAgCisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKSkKKyAgICAgICAgdHJh
Y2tlZC5jaGVjayhyZXF1aXJlZFZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
bmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBK
U0M6OlByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNv
bmRpdGlvbikgeworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6Cisg
ICAgICAgIG91dC5wcmludCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJBYnNl
bmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246
OkFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgor
ICAgICAgICBvdXQucHJpbnQoIkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVy
dHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNs
dWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgUHJvcGVydHlDb25kaXRp
b24geworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIFByZXNlbmNlLAorICAgICAg
ICBBYnNlbmNlLAorICAgICAgICBBYnNlbmNlT2ZTZXR0ZXIsCisgICAgICAgIEVxdWl2YWxlbmNl
IC8vIEFuIGFkYXB0aXZlIHdhdGNocG9pbnQgb24gdGhpcyB3aWxsIGJlIGEgcGFpciBvZiB3YXRj
aHBvaW50cywgYW5kIHdoZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9ucywgd2Ugd2lsbCBzZXQg
dGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1Y3R1cmUuCisgICAgfTsK
KyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV91aWQobnVsbHB0cikK
KyAgICAgICAgLCBtX2tpbmQoUHJlc2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQoJnUsIDAs
IHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAg
ICAsIG1fa2luZChBYnNlbmNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBzaXplb2Yo
dSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2VX
aXRob3V0QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlv
biByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IFByZXNlbmNlOworICAgICAgICByZXN1bHQudS5wcmVzZW5jZS5vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlD
b25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0
dHJpYnV0ZXMpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJz
ZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90
b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2U7Cisg
ICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24g
YWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQor
ICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4g
YWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKAor
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91
aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBYnNlbmNlT2ZTZXR0ZXI7CisgICAg
ICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJz
ZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBpZiAob3du
ZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJl
dHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRC
YXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQu
bV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFcXVpdmFsZW5jZTsKKyAgICAg
ICAgcmVzdWx0LnUuZXF1aXZhbGVuY2UudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAgc3RhdGljIFByb3Bl
cnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNDZWxsKCkgJiYgb3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVp
ZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIAorICAgIEtpbmQg
a2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wgaGFzT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNPZmZz
ZXQoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldDsKKyAgICB9CisgICAgYm9v
bCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJl
c2VuY2U7IH07CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaGFzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2UuYXR0
cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7IHJl
dHVybiAhISp0aGlzICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQgPT0gQWJzZW5jZU9m
U2V0dGVyKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5wcm90
b3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9CisgICAgSlNWYWx1ZSBy
ZXF1aXJlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNSZXF1aXJlZFZh
bHVlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuZXF1aXZhbGVuY2UudmFs
dWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91aWQpICsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5j
ZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAgICAgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTT2Jq
ZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBFbmNvZGVkSlNW
YWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVz
ZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldCA9PSBvdGhlci51LnBy
ZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2VuY2UuYXR0cmlidXRlcyA9
PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAg
ICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdS5hYnNlbmNl
LnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOworICAgICAgICBjYXNlIEVx
dWl2YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWUgPT0gb3Ro
ZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gVHdv
IGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRo
ZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMuIElmCisgICAgLy8gZmFsc2UgaXMgcmV0dXJuZWQs
IHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLSBmb3IgZXhh
bXBsZSBpZiB0aGVyZSBpcworICAgIC8vIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRo
ZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBnZW5lcmFsIG9mIHRoZSB0d28K
KyAgICAvLyB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZp
YyBvZiB0aGUgdHdvLiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UKKyAgICAvLyBmb3IgY29u
dHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUgdWlkLiBC
eSBjb252ZW50aW9uLCBpbnZhbGlkCisgICAgLy8gY29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJs
ZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzIHx8ICFv
dGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzID09
IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBDaGVj
a3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29u
J3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNv
bnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9w
ZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGls
bFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFs
aWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsK
KyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBpcyBzdGlsbCB2YWxpZCByaWdo
dCBub3cgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIHN0cnVjdHVyZS4KKyAgICAvLyBNYXkgY29u
c2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZCBzdHJ1Y3R1cmUgYWxv
bmUgZG9uJ3QgZ3VhcmFudGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbi4gVGhpcyBoYXBwZW5zIGZv
ciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3QgdGhhdCBtYXkgaGF2ZSBpbXB1cmUK
KyAgICAvLyBwcm9wZXJ0aWVzLiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBzdXBwbGllZCwgdGhlbiBh
ICJ0cnVlIiByZXR1cm4gaW5kaWNhdGVzIHRoYXQgY2hlY2tpbmcgaWYKKyAgICAvLyBhbiBvYmpl
Y3QgaGFzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgZ3VhcmFudGVlcyB0aGUgY29uZGl0aW9uIHN0aWxs
IGhvbGRzLiBJZiBhbiBvYmplY3QgaXMKKyAgICAvLyBzdXBwbGllZCwgdGhlbiB5b3UgbWF5IG5l
ZWQgdG8gdXNlIHNvbWUgb3RoZXIgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdCB0byBndWFyYW50
ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uIGluIGFkZGl0aW9uIHRvIHRoZSBzdHJ1Y3R1cmUgY2hl
Y2suCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBu
dWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgY29uZGl0aW9u
IGlzIG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNoYWJsZSBieSBlbmFibGlu
ZyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3IgZXhhbXBsZSwgcmVwbGFj
ZW1lbnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNvbWUKKyAgICAvLyBhY2Nl
c3MgaXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBt
YWlubHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5IHByb3BlcnRpZXMgb3Ig
cHJvcGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBpdCdzIGFsd2F5cyBzYWZl
IHRvCisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0IHRoaXMgaXMgY2FsbGVk
IGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmlsaXR5RWZmb3J0IHsKKyAg
ICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBjaGFu
Z2UgdGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAgLy8gb2JqZWN0LCBhbmQg
aW1wbGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0byBiZSB3YXRjaGFibGUg
dGhlbiB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJsZS4gVGhpcyBpcyBtYW5k
YXRvcnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBpcyBhbHNvIHNvbWV3aGF0
CisgICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGluZyB3aGV0aGVyIHRvIHdh
dGNoIGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgorICAgICAgICAvLyBub3Qg
ZnJvbSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBzZWUgaWYgd2Ugc2hvdWxk
IGFkYXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5vdCBiZWluZyBpbml0aWFs
aXplZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRvbid0IGtub3cgZW5vdWdo
CisgICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8gd2F0Y2ggLS0gYXMgaW4s
IHRoZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAgICAgICAvLyBzdGFiaWxp
emVkIHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBjb25kaXRpb24gd2lsbCBo
b2xkIGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhvbGQgZm9yIGEgd2hpbGUg
YWxyZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAgCisgICAgICAgIC8vIERv
IHdoYXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5IGNhbiBiZSB3YXRjaGVk
LCBpZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNlcnZhYmxlIGVmZmVjdC4g
Rm9yIG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3VyZSB0aGF0IGEgcHJvcGVy
dHkKKyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBlbmFibGVkIGlmIGl0IGhh
ZG4ndCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlzCisgICAgICAgIC8vIGZy
b20gSklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcgd2F0Y2hwb2ludHMgaXMg
bm90IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxpdHkKKyAgICB9OworICAg
IAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBl
bmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2lu
dCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hw
b2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwgV2F0Y2hh
YmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkg
Ynkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNPYmplY3Qq
IGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2VzKSBjb25z
dDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50bHksIHRoaXMgaXMgcmVx
dWlyZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAgcmV0dXJuICEhKnRoaXM7
CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gRXF1aXZh
bGVuY2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBp
bnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBj
b25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVm
ZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaXNXYXRjaGFibGVXaGVuVmFs
aWQoU3RydWN0dXJlKiwgV2F0Y2hhYmlsaXR5RWZmb3J0KSBjb25zdDsKKworICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiBtX3VpZDsKKyAgICBLaW5kIG1fa2luZDsKKyAgICB1bmlvbiB7CisgICAgICAg
IHN0cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB9IHByZXNlbmNlOworICAgICAgICBzdHJ1
Y3QgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZTsKKyAgICAgICAgfSBhYnNlbmNl
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7Cisg
ICAgICAgIH0gZXF1aXZhbGVuY2U7CisgICAgfSB1OworfTsKKworc3RydWN0IFByb3BlcnR5Q29u
ZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvcGVydHlDb25k
aXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFs
KAorICAgICAgICBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3QgUHJvcGVydHlDb25k
aXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBE
ZWZhdWx0SGFzaDxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6UHJvcGVy
dHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6UHJvcGVydHlDb25kaXRp
b24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBQcm9wZXJ0eUNvbmRp
dGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05
MCwxOSArOTAsMjIgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQog
ICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKG9w
X3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkpOwogICAgIAogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gaW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmUuZ2V0KCk7
Ci0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gaW5zdHJ1Y3Rpb25bN10udS5zdHJ1Y3R1cmVD
aGFpbi5nZXQoKTsKLSAgICBBU1NFUlQobmV3U3RydWN0dXJlKTsKLSAgICBBU1NFUlQoY2hhaW4p
OwogICAgIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIFJlZlB0cjxJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluPiBpbnRlbmRlZENoYWluOwotICAgIGlmIChjaGFpbikKLSAg
ICAgICAgaW50ZW5kZWRDaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKTsKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKGluc3RydWN0aW9uWzBdLnUub3Bjb2Rl
ID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsKQorICAg
ICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKG9wX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkpIHsKKyAgICAgICAgY29uZGl0
aW9uU2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVy
TWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwg
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgfQogICAgIAotICAgIHJldHVybiBQdXRCeUlkVmFy
aWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgaW50ZW5kZWRDaGFpbi5n
ZXQoKSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3Ry
dWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKIH0KIAogUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgU3R1YkluZm9NYXAmIG1hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKQEAgLTE2NSwxNiArMTY4LDE0IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gCiAgICAg
ICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAgICAgICAg
ICBpZiAoc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pIHsKLSAgICAgICAgICAg
ICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAg
ICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlv
bi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8t
PnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcigKKyAgICAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCiAgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLAot
ICAgICAgICAgICAgICAgIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGNv
bmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkBAIC0yMTksMTUgKzIyMCwxMSBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgIGFj
Y2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNz
LmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxv
Y2ssIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLmNoYWluKCkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNldCgp
OworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5z
aXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNz
Lm5ld1N0cnVjdHVyZSgpLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKQEAgLTIzNSw3ICsyMzIsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Q29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29t
cHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBh
Y2Nlc3MuY2hhaW4oKSwgYWNjZXNzLmNoYWluQ291bnQoKSwgdWlkKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkg
ewogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKQEAg
LTI1Myw3ICsyNTAsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywg
KnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNl
dHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1
cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3Rh
dHVzLmNvbmRpdGlvblNldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNh
bGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zNjgsMjIgKzM2NSwxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoCiAgICAgICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkp
CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAK
LSAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgICAgIGlmICghaXNE
aXJlY3QpIHsKLSAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4oZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKTsKLSAgICAgICAgCi0gICAgICAgICAg
ICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBzZXR0ZXJzIG9yIHJlYWQtb25seSBwcm9w
ZXJ0aWVzLCB0aGVuIGdpdmUgdXAuCi0gICAgICAgICAgICBpZiAoY2hhaW4tPm1heUludGVyY2Vw
dFN0b3JlVG8odWlkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNo
YWluIGhhc24ndCBiZWVuIG5vcm1hbGl6ZWQgKGkuZS4gdGhlcmUgYXJlIHByb3hpZXMgb3IgZGlj
dGlvbmFyaWVzKQotICAgICAgICAgICAgLy8gdGhlbiBnaXZlIHVwLiBUaGUgZGljdGlvbmFyeSBj
YXNlIHdvdWxkIG9ubHkgaGFwcGVuIGlmIHRoaXMgc3RydWN0dXJlIGhhcyBub3QgYmVlbgotICAg
ICAgICAgICAgLy8gdXNlZCBpbiBhbiBvcHRpbWl6ZWQgcHV0X2J5X2lkIHRyYW5zaXRpb24uIEFu
ZCByZWFsbHkgdGhlIG9ubHkgcmVhc29uIHdoeSB3ZSB3b3VsZAotICAgICAgICAgICAgLy8gYmFp
bCBoZXJlIGlzIHRoYXQgSSBkb24ndCByZWFsbHkgZmVlbCBsaWtlIGhhdmluZyB0aGUgb3B0aW1p
emluZyBKSVQgZ28gYW5kIGZsYXR0ZW4KLSAgICAgICAgICAgIC8vIGRpY3Rpb25hcmllcyBpZiB3
ZSBoYXZlIGV2aWRlbmNlIHRvIHN1Z2dlc3QgdGhhdCB0aG9zZSBvYmplY3RzIHdlcmUgbmV2ZXIg
dXNlZCBhcwotICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBpbiBhIGNhY2hlYWJsZSBwcm90b3R5
cGUgYWNjZXNzIC0gaS5lLiB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCBzb21lIG9mCi0gICAg
ICAgICAgICAvLyB0aGUgb3RoZXIgY2hlY2tzIGJlbG93IHdpbGwgZmFpbC4KLSAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSB8fCAhY2hhaW4tPmlzTm9ybWFsaXplZCgpKQorICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0
ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+dm0oKSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CiAgICAgICAgIH0KICAgICAKQEAgLTM5NCw3ICszODAsNyBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIEFTU0VSVChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpOwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5h
cHBlbmRWYXJpYW50KAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3Ry
dWN0dXJlLCB0cmFuc2l0aW9uLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlv
blNldCwgb2Zmc2V0KSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lv
biAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw4ICs0Myw3IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRC
eUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7CiAgICAgbV9v
bGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKICAgICBtX25ld1N0cnVjdHVyZSA9
IG90aGVyLm1fbmV3U3RydWN0dXJlOwotICAgIG1fY29uc3RhbnRDaGVja3MgPSBvdGhlci5tX2Nv
bnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFz
ZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zm
c2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAg
ICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVz
Pigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC02NCwyOSArNjMsMjYgQEAgUHV0QnlJZFZh
cmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoYwogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQg
PSBUcmFuc2l0aW9uOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsK
ICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgaWYgKHN0cnVj
dHVyZUNoYWluKQotICAgICAgICBzdHJ1Y3R1cmVDaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5t
X2NvbnN0YW50Q2hlY2tzKTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBj
YWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtT
dGF0dXMpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQg
PSBTZXR0ZXI7CiAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIGlm
IChjaGFpbikgewotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5tX2NvbnN0YW50
Q2hlY2tzKTsKLSAgICAgICAgcmVzdWx0Lm1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5h
bFByb3RvdHlwZSgpOwotICAgIH0KKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRp
b25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJlc3VsdC5tX2NhbGxM
aW5rU3RhdHVzID0gV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKTsKICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMTM0LDE4ICsxMzAsNiBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjptYWtlc0NhbGxzKCkg
Y29uc3QKICAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKIH0KIAotU3RydWN0dXJlU2V0IFB1
dEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoa2luZCgp
ID09IFNldHRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJl
dHVybiBzdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVj
dHVyZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKLX0KLQogYm9vbCBQdXRC
eUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQog
ewogICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKQEAgLTE1NSw4ICsxMzksOCBA
QCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgY2FzZSBSZXBs
YWNlOgogICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewogICAgICAgICBjYXNlIFJlcGxh
Y2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50Q2hlY2tzLmlzRW1wdHkoKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb25zdGFudENoZWNrcy5pc0VtcHR5KCkpOworICAg
ICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBB
U1NFUlQob3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xOTYsNiArMTgwLDcgQEAgYm9vbCBQdXRCeUlkVmFy
aWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNl
Lm1fb2Zmc2V0KTsKICAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKICAg
ICBBU1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVChyZXBs
YWNlLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgCiAgICAgLy8gVGhpcyBzb3J0IG9m
IG1lcmdpbmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2Ug
YWRkIGEgbmV3IGZpZWxkIHdoaWNoCiAgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMg
d2hpbGUgdGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9l
c24ndApAQCAtMjMyLDE1ICsyMTcsMTMgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29u
dGV4dChQcmludAogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFRyYW5zaXRpb246
ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKICAgICAgICAg
ICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIs
Ci0gICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygpLCBjb250ZXh0
KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVyOgogICAgICAgICBv
dXQucHJpbnQoCiAgICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgp
LCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFu
dENoZWNrcygpLCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkK
LSAgICAgICAgICAgIG91dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpT
VmFsdWUobV9hbHRlcm5hdGVCYXNlKSwgY29udGV4dCkpOworICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKICAgICAgICAgb3V0LnByaW50KCIsIG9m
ZnNldCA9ICIsIG1fb2Zmc2V0KTsKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9j
YWxsTGlua1N0YXR1cyk7CiAgICAgICAgIG91dC5wcmludCgiPiIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4
NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFB1dEJ5SWRWYXJpYW50X2gK
ICNkZWZpbmUgUHV0QnlJZFZhcmlhbnRfaAogCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKIApAQCAtNDYs
NyArNDYsNiBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoKQogICAgICAgICA6IG1fa2lu
ZChOb3RTZXQpCiAgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICAgICAgLCBt
X2FsdGVybmF0ZUJhc2UobnVsbHB0cikKICAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0
KQogICAgIHsKICAgICB9CkBAIC01NCwxNiArNTMsMTUgQEAgcHVibGljOgogICAgIFB1dEJ5SWRW
YXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJh
dG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50
IHJlcGxhY2UoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpOworICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0
IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJ
ZFZhcmlhbnQgdHJhbnNpdGlvbigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAg
ICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7
CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAgICAgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICAgICAg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMpOworICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CiAgICAgCiAgICAgS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkBAIC03Niw2ICs3NCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKICAgICB9CiAgICAgCisg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgpID09
IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CkBA
IC0xMDAsMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgp
IGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IENv
bnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAog
ICAgIHsKQEAgLTExMSwxNCArMTExLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZz
ZXQ7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1f
YWx0ZXJuYXRlQmFzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1
cmUoKSBjb25zdDsKLSAgICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAtMTM2LDgg
KzEyOCw3IEBAIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJlU2V0IG1f
b2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBt
X2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzcsMzMgKzM3LDQ2IEBAIG5hbWVzcGFjZSBKU0MgewogU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6flN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQo
KSB7IH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludDo6cHVzaCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5LAogICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiYgaGVhZCkK
IHsKLSAgICBoZWFkID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50Pihob2xkZXIsIFdURjo6bW92ZShoZWFkKSk7CisgICAgaGVhZCA9IHN0ZDo6bWFrZV91
bmlxdWU8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4oa2V5LCBob2xkZXIsIFdURjo6
bW92ZShoZWFkKSk7CiAgICAgcmV0dXJuIGhlYWQuZ2V0KCk7CiB9CiAKIHZvaWQgU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKQog
ewotICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1pc2U6IHN0dWIg
cmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCi0gICAgLy8gVGhhdCB3b3JrcywgYmVjYXVz
ZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBsaXN0LCBh
bmQKLSAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9yIGZpcmluZyBpcyByb2J1c3Qg
YWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgotICAgIG1faG9sZGVyLmNvZGVCbG9jaygpLT5yZXNl
dFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgIGlmICghbV9rZXkgfHwgIW1fa2V5Lmlz
V2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAg
ICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1pc2U6IHN0dWIgcmVz
ZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCisgICAgICAgIC8vIFRoYXQgd29ya3MsIGJlY2F1
c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3MgbGlzdCwg
YW5kCisgICAgICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJv
YnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCisgICAgICAgIG1faG9sZGVyLmNvZGVCbG9j
aygpLT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2Vu
Y2UpIHsKKyAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBwcmVzZW5jZSBjb25kaXRpb24sIGxldCdz
IHdhdGNoIHRoZSBwcm9wZXJ0eSBmb3IgcmVwbGFjZW1lbnRzLiBUaGlzIGlzIHByb2ZpdGFibGUK
KyAgICAgICAgLy8gZm9yIHRoZSBERkcsIHdoaWNoIHdpbGwgd2FudCB0aGUgcmVwbGFjZW1lbnQg
c2V0IHRvIGJlIHZhbGlkIGluIG9yZGVyIHRvIGRvIGNvbnN0YW50IGZvbGRpbmcuCisgICAgICAg
IFZNJiB2bSA9ICpIZWFwOjpoZWFwKG1fa2V5Lm9iamVjdCgpKS0+dm0oKTsKKyAgICAgICAgbV9r
ZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNl
bWVudHModm0sIG1fa2V5Lm9mZnNldCgpKTsKKyAgICB9CisKKyAgICBtX2tleS5vYmplY3QoKS0+
c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8o
KQogewogfQogCi1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAgcmV0
dXJuIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywgbV9o
ZWFkKTsKIH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNP
blN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAg
IFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVC
bG9jayogY29kZUJsb2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXkpCiB7CiAgICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFkb3B0
UmVmKG5ldyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHViSW5m
bykpOwpAQCAtNzIsNyArODUsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBX
YXRjaHBvCiAgICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8p
OwogICAgIH0KICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7Cisg
ICAgcmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24g
MTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRl
ZiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00Niwx
NSArNDcsMTEgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYg
aG9sZGVyKQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVT
dHViSW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisgICAg
ICAgIDogbV9rZXkoa2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAgLCBt
X25leHQoV1RGOjptb3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02Miw2ICs1OSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KCk7CiAg
ICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIHB1c2goCisg
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNo
cG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4mIGhlYWQpOwogCkBAIC02OSw2ICs2
Nyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZp
cmVEZXRhaWwmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBtX2tleTsKICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9sZGVy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBt
X25leHQ7CiB9OwpAQCAtODMsMTEgKzgyLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGtleSk7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQq
IGVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvKik7CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDgsOSArNDgsMTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgICAg
ICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlv
bl9kaXJlY3Q6CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1Bv
aW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1LnB1
dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfcmVwbGFjZToKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhlc2Ug
aW5zdHJ1Y3Rpb25zIGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQpA
QCAtNzUsOCArNzgsMTAgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJl
bgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6
aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAg
ICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0
aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5
SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVy
KAorICAgICAgICAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5h
cmVTdGlsbExpdmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24g
MTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJJbnN0cnVj
dGlvbi5oIgogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1
ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5o
IgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCkBAIC0xMTMsNyArMTE0LDcgQEAgc3RydWN0IFN0
cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIC8vIFB1dEJ5SWQqCiAKLSAgICB2b2lkIGluaXRQdXRC
eUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNT
dHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGJv
b2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24oVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0LCBib29sIGlzRGly
ZWN0KQogICAgIHsKICAgICAgICAgaWYgKGlzRGlyZWN0KQogICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7CkBAIC0xMjIsNyArMTIzLDcg
QEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsK
ICAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5zZXQodm0sIG93bmVy
LCBjaGFpbik7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0g
Y29uZGl0aW9uU2V0LnJlbGVhc2VSYXdQb2ludGVyKCk7CiAgICAgfQogCiAgICAgdm9pZCBpbml0
UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpCkBAIC0xNzUsMTAgKzE3NiwxMSBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm8gewogICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICB9CiAgICAgICAgIAotICAgIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24gPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNl
QW5kQWRkV2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRo
aXMpOworICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29uZGl0aW9u
KTsKICAgICB9CiAgICAgCiAgICAgaW50OF90IGFjY2Vzc1R5cGU7CkBAIC0yMTcsMjMgKzIxOSwx
MiBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIH0gZ2V0QnlJZFNl
bGY7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlPiBwcm90b3R5cGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBib29sIGlzRGlyZWN0
OwotICAgICAgICB9IGdldEJ5SWRQcm90bzsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
IFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjb3VudCA6IDMxOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA6IDE7Ci0g
ICAgICAgIH0gZ2V0QnlJZENoYWluOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBnZXRCeUlkTGlzdDsKICAgICAg
ICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcmV2
aW91c1N0cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBz
dHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBj
aGFpbjsKKyAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKICAgICAgICAgfSBwdXRC
eUlkVHJhbnNpdGlvbjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc5LDcgKzE3
NzksMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8KICAgICAgICAgICAgICAgICBBYnN0
cmFjdFZhbHVlIHJlc3VsdDsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0
dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG5vZGUsICFzdGF0dXNbaV0uYWx0ZXJuYXRlQmFzZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyB0aGluZyB3b24ndCBnaXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9s
dmVzIHByb3RvdHlwZXMuIElmIGl0IGRpZCwgd2UnZAorICAgICAgICAgICAgICAgICAgICAvLyBo
YXZlIG1vcmUgd29yayB0byBkbyBoZXJlLgorICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG5vZGUsIHN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOworICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJl
c3VsdCA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJv
cGVydHkodmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghY29uc3RhbnRSZXN1bHQpIHsKQEAgLTIwNjAsMzAgKzIwNjMsMjIgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2Ug
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7
CiAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewot
ICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IHZh
cmlhbnQuc3RydWN0dXJlU2V0KCk7CisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNl
dENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKSB7Cisg
ICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gZ2V0Q2FzZS5zZXQoKTsKICAgICAgICAgICAg
IHNldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKLSAgICAgICAgICAg
IGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAgICBiYXNlRm9yTG9h
ZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZS5tX3ZhbHVlOwotICAgICAgICAgICAgSlNWYWx1ZSBj
b25zdGFudFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFBy
b3BlcnR5KAotICAgICAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCwgdmFyaWFudC5iYXNlU3Ry
dWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjb25zdGFudFJl
c3VsdCkgeworICAgICAgICAgICAgaWYgKGdldENhc2UubWV0aG9kKCkua2luZCgpICE9IEdldEJ5
T2Zmc2V0TWV0aG9kOjpDb25zdGFudCkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVh
cFRvcCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CiAgICAgICAgICAg
ICB0aGlzUmVzdWx0LnNldCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAgICAgICAgICAg
ICAgICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCisgICAgICAgICAgICAgICAgKmdl
dENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVj
dHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9rZXkoa2V5
KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGtl
eS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsKK30KKwordm9pZCBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omluc3RhbGwoKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1fa2V5Lm9i
amVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJm1fc3RydWN0dXJl
V2F0Y2hwb2ludCk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbV9rZXkub2Jq
ZWN0KCktPnN0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkobV9rZXkudWlkKCkpOworICAgIFdh
dGNocG9pbnRTZXQqIHNldCA9IG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlS
ZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICBzZXQtPmFkZCgmbV9wcm9wZXJ0
eVdhdGNocG9pbnQpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6ZmlyZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgLy8gT25lIG9m
IHRoZSB3YXRjaHBvaW50cyBmaXJlZCwgYnV0IHRoZSBvdGhlciBvbmUgZGlkbid0LiBNYWtlIHN1
cmUgdGhhdCBuZWl0aGVyIG9mIHRoZW0gYXJlCisgICAgLy8gaW4gYW55IHNldCBhbnltb3JlLiBU
aGlzIHNpbXBsaWZpZXMgdGhpbmdzIGJ5IGFsbG93aW5nIHVzIHRvIHJlaW5zdGFsbCB0aGUgd2F0
Y2hwb2ludHMKKyAgICAvLyB3aGVyZXZlciBmcm9tIHNjcmF0Y2guCisgICAgaWYgKG1fc3RydWN0
dXJlV2F0Y2hwb2ludC5pc09uTGlzdCgpKQorICAgICAgICBtX3N0cnVjdHVyZVdhdGNocG9pbnQu
cmVtb3ZlKCk7CisgICAgaWYgKG1fcHJvcGVydHlXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAg
ICAgIG1fcHJvcGVydHlXYXRjaHBvaW50LnJlbW92ZSgpOworICAgIAorICAgIGlmIChtX2tleS5p
c1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAg
ICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERG
Rzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwg
Iikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJp
bnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBm
YWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBzdHJpbmdEZXRh
aWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRp
c29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50
LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWlsKTsKK30KKwordm9pZCBBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZp
cmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlm
Zl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fc3RydWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisg
ICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQgPQorICAg
ICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZzZXQpOwor
ICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50OjpmaXJlSW50ZXJu
YWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIHB0cmRpZmZfdCBteU9m
ZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LCBtX3Byb3BlcnR5V2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3
aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAg
ICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAg
IHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQo
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3Rh
bGwoKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGlj
IFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RydWN0dXJlV2F0Y2hwb2ludCgp
IHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChj
b25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICBjbGFzcyBQcm9wZXJ0eVdh
dGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBQcm9w
ZXJ0eVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisgICAg
CisgICAgdm9pZCBmaXJlKGNvbnN0IEZpcmVEZXRhaWwmKTsKKyAgICAKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFN0
cnVjdHVyZVdhdGNocG9pbnQgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50OworICAgIFByb3BlcnR5V2F0
Y2hwb2ludCBtX3Byb3BlcnR5V2F0Y2hwb2ludDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBt
X2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoa2V5LndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCgha2V5LndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdh
dGNocG9pbnQoKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjppbnN0
YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgpKTsKKyAgICAK
KyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50
KHRoaXMpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVy
bmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAobV9rZXkuaXNXYXRjaGFi
bGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgaW5z
dGFsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChERkc6OnNob3Vs
ZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRmly
aW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIs
ICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgfQorICAgIAorICAgIFN0cmluZ1ByaW50U3RyZWFt
IG91dDsKKyAgICBvdXQucHJpbnQoIkFkYXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAi
LCBkZXRhaWwpOworICAgIAorICAgIFN0cmluZ0ZpcmVEZXRhaWwgc3RyaW5nRGV0YWlsKG91dC50
b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAg
ICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRS
ZW9wdGltaXphdGlvbiwgJnN0cmluZ0RldGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisgICAgCisg
ICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZUlu
dGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
cmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsMTQgQEAgcHJpdmF0ZToK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlQ29u
c3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9u
KiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7
CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
ZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRC
eU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0Jiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlIG9wID0g
R2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
LCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwg
Tm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3Bl
Y3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsK
KyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
VW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNl
dCk7CisgICAgCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5SWRWYXJpYW50IGFuZCB0aGUg
c2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFy
aWFudFR5cGU+CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmIHZhcmlhbnQpOworICAg
ICAgICAKICAgICB2b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9w
ZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CkBAIC0yMTIsNyArMjE5LDMyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAogICAgICAgICBOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1
cyYsCiAgICAgICAgIGJvb2wgaXNEaXJlY3QpOwotICAgIHZvaWQgZW1pdENoZWNrcyhjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lz
dGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBSZXR1
cm5zIGZhbHNlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBubyBsb25nZXIgaG9sZHMsIGFuZCB0
aGVyZWZvcmUgbm8gcmVhc29uYWJsZSBjaGVjayBjYW4gYmUgZW1pdHRlZC4KKyAgICBib29sIGNo
ZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCisgICAgR2V0QnlPZmZz
ZXRNZXRob2QgcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2QpOworICAgIAorICAg
IC8vIEVpdGhlciByZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1pdCBhIGNoZWNrIGZvciB0aGlz
IGNvbmRpdGlvbi4gSXQgbXVzdCBiZSBhIFByZXNlbmNlCisgICAgLy8gY29uZGl0aW9uLiBJdCB3
aWxsIGF0dGVtcHQgdG8gcHJvbW90ZSBhIFByZXNlbmNlIGNvbmRpdGlvbiB0byBhbiBFcXVpdmFs
ZW5jZSBjb25kaXRpb24uCisgICAgLy8gRW1pdHMgY29kZSBmb3IgdGhlIGxvYWRlZCB2YWx1ZSB0
aGF0IHRoZSBjb25kaXRpb24gZ3VhcmRzLCBhbmQgcmV0dXJucyBhIG5vZGUgY29udGFpbmluZwor
ICAgIC8vIHRoZSBsb2FkZWQgdmFsdWUuIFJldHVybnMgbnVsbCBpZiB0aGUgY29uZGl0aW9uIG5v
IGxvbmdlciBob2xkcy4KKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwbGFuTG9hZChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiwgTm9kZVR5
cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAK
KyAgICAvLyBDYWxscyBjaGVjaygpIGZvciBlYWNoIGNvbmRpdGlvbiBpbiB0aGUgc2V0OiB0aGF0
IGlzLCBpdCBlaXRoZXIgZW1pdHMgY2hlY2tzIG9yIHJlZ2lzdGVycworICAgIC8vIHdhdGNocG9p
bnRzIChvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28pIHRvIG1ha2UgdGhlIGNvbmRpdGlvbnMg
aG9sZC4gSWYgYW55IG9mIHRob3NlCisgICAgLy8gY29uZGl0aW9ucyBhcmUgbm8gbG9uZ2VyIGNo
ZWNrYWJsZSwgcmV0dXJucyBmYWxzZS4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0Jik7CisgICAgCisgICAgLy8gQ2FsbHMgY2hlY2soKSBmb3IgdGhvc2Ug
Y29uZGl0aW9ucyB0aGF0IGFyZW4ndCB0aGUgc2xvdCBiYXNlLCBhbmQgY2FsbHMgbG9hZCgpIGZv
ciB0aGUgc2xvdAorICAgIC8vIGJhc2UuIERvZXMgYSBjb21iaW5hdGlvbiBvZiB3YXRjaHBvaW50
IHJlZ2lzdHJhdGlvbiBhbmQgY2hlY2sgZW1pc3Npb24gdG8gZ3VhcmQgdGhlCisgICAgLy8gY29u
ZGl0aW9ucywgYW5kIGVtaXRzIGNvZGUgdG8gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2xvdCBi
YXNlLiBSZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4g
UmV0dXJucyBudWxsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyB3ZXJlIG5vIGxvbmdlciBjaGVj
a2FibGUuCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmKTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwogCiAg
ICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVhckNhY2hlcygpOwpA
QCAtNzA2LDYgKzczOCw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50
V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
ICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0ZSB0byBlbWl0UHJvcGVy
dHlDaGVjaywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3VycmVudGx5LAorICAgICAg
ICAvLyB0aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFByb3BlcnR5Q2hlY2soKSBz
aW5jZSB3ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKKyAgICAgICAgLy8gb2JqZWN0J3Mg
c3RydWN0dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nvc250YW50LgogICAgICAg
ICBOb2RlKiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgYWRk
VG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0
cnVjdHVyZSkpLCBvYmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CkBAIC0y
MjQwLDE1ICsyMjc1LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRl
cgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdl
dEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUg
b3ApCiB7Ci0gICAgaWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgaWYgKEpTVmFs
dWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1Zh
bHVlKCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkgewotICAgICAgICAgICAgYWRkVG9HcmFwaChQ
aGFudG9tLCBiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFu
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwog
ICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBiYXNlOwpAQCAtMjI2NCw2ICsyMjkyLDE4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVHZXRCeU9mZnNldCgKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9CiAKK05vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBO
b2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK3sKKyAg
ICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFu
dCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3Ry
dWN0dXJlU2V0LCBvZmZzZXQpKSB7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJh
c2UpOworICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlv
biwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0LCBvcCk7Cit9CisKIE5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHBy
b3BlcnR5U3RvcmFnZTsKQEAgLTIyODEsMTAgKzIzMjEsMjE2IEBAIE5vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEJ5
dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0
b3ImIHZlY3RvcikKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCit7CisgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRp
b24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgIGlmICgh
Y29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tTdHJ1Y3R1
cmUsCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwK
KyAgICAgICAgd2Vha0pTQ29uc3RhbnQoY29uZGl0aW9uLm9iamVjdCgpKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwcm9tb3RlVG9D
b25zdGFudChHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QpCit7CisgICAgaWYgKG1ldGhvZC5raW5k
KCkgPT0gR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlCisgICAgICAgICYmIG1l
dGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPmRmZ1Nob3VsZFdhdGNoKCkpIHsKKyAgICAg
ICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHko
bWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLCBtZXRob2QucHJvdG90eXBlKCktPnN0cnVjdHVy
ZSgpLCBtZXRob2Qub2Zmc2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0
aG9kOjpjb25zdGFudChtX2dyYXBoLmZyZWV6ZShjb25zdGFudCkpOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gbWV0aG9kOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6
cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUGxhbm5pbmcgYSBsb2FkOiAiLCBjb25k
aXRpb24sICJcbiIpOworICAgIAorICAgIC8vIFdlIG1pZ2h0IHByb21vdGUgdGhpcyB0byBFcXVp
dmFsZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBzdWNoIHByb21vdGlv
bgorICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5IHRoaXMgY2Fubm90
IGJlIGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8vIE5vbmUg
b2YgdGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEgbG9hZCBvZiBhbiBF
cXVpdmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBwb3J0aW5nIGl0IHdv
dWxkIGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVMRUFTRV9BU1NFUlQo
Y29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworICAgIAor
ICAgIC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRoaXMsIGZyb20gbW9z
dCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAgLy8gMSkgV2F0Y2hw
b2ludCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBhIGNvbnN0YW50IG5v
ZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIgY29kZSBpcyBlbWl0
dGVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMgbmV2ZXIgcmVnaXN0
ZXJlZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBjb2RlIGFuZCB3ZSB3
b24ndCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QKKyAgICAvLyAgICB0
cmFuc2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJsZSByaWdodCBub3cu
CisgICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQg
c3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQgYnkgdGhlCisgICAg
Ly8gICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNoIHRoZSBzdHJ1Y3R1
cmUgYW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8vICAgIGNvbmRpdGlv
biwgc2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBjb25zdGFudCBpbiBJ
UiB3aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUgc3RydWN0dXJlIGFu
eXdheSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUgY29uZGl0aW9uLgor
ICAgIC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJyZW50IHN0
cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0aGUKKyAgICAvLyAg
ICBERkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSBhbmQgIWRm
Z1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0aGUgY29uZGl0aW9u
LCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRvIGVtaXQgYSBsb2Fk
LCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5vdCB3YXRjaGFibGUu
IEVtaXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQgYSBsb2FkLgorICAg
IC8vCisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBHaXZlIHVwIGFuZCBy
ZXR1cm4gbnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWdyZWUgb24gd2hhdCB0aGUg
c3RydWN0dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGluZyB0aGVzZSB2YXJpb3VzCisg
ICAgLy8gY2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRvIHByb21vdGUgUHJl
c2VuY2UgdG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVs
c2UKKyAgICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4gQWxzbywgdGhlcmUg
YXJlIGNhc2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0CisgICAgLy8gd2Ug
ZG9uJ3Qgd2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVxdWl2YWxlbmNlIChz
ZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAoMiksIGFuZCAoMykgYWJv
dmUpLgorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQoY29uZGl0aW9uLm9mZnNldCgp
KSkgeworICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNhdXNlIG9ubHkgdGhlIEdDIGNh
biBjYXVzZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdhcmJhZ2UKKyAgICAgICAgLy8g
dmFsdWUuCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRpb24ub2JqZWN0KCktPmdldERp
cmVjdChjb25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBlcXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgICAgICBjb25kaXRp
b24ub2JqZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOworICAgICAgICBpZiAobV9ncmFw
aC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgICAgICByZXR1
cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7Cisg
ICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ2xsIGhhdmUgdG8gbWF0ZXJpYWxp
emUgdGhlIGNvbmRpdGlvbidzIGJhc2UgYXMgYSBjb25zdGFudCBpbiBERkcgSVIuIE9uY2UKKyAg
ICAvLyB3ZSBkbyB0aGlzLCB0aGUgZnJvemVuIHZhbHVlIHdpbGwgaGF2ZSBpdHMgb3duIGlkZWEg
b2Ygd2hhdCB0aGUgc3RydWN0dXJlIGlzLiBVc2UgdGhhdCBmcm9tCisgICAgLy8gbm93IG9uIGp1
c3QgYmVjYXVzZSBpdCdzIGxlc3MgY29uZnVzaW5nLgorICAgIEZyb3plblZhbHVlKiBiYXNlID0g
bV9ncmFwaC5mcmVlemUoY29uZGl0aW9uLm9iamVjdCgpKTsKKyAgICBzdHJ1Y3R1cmUgPSBiYXNl
LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiB0aGUgc3RydWN0dXJlIHRoYXQg
d2UndmUgcmVnaXN0ZXJlZCBtYWtlcyB0aGUgY29uZGl0aW9uIGhvbGQuIElmIG5vdCwganVzdCBn
aXZlCisgICAgLy8gdXAuIFRoaXMgaXMgY2FzZSAoNSkgYWJvdmUuCisgICAgaWYgKCFjb25kaXRp
b24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBH
ZXRCeU9mZnNldE1ldGhvZCgpOworICAgIAorICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgaXMgd2F0
Y2hlZCBieSB0aGUgREZHIGFscmVhZHksIHRoZW4ganVzdCB1c2UgdGhpcyBmYWN0IHRvIGVtaXQg
dGhlIGxvYWQuCisgICAgLy8gVGhpcyBpcyBjYXNlICgyKSBhYm92ZS4KKyAgICBpZiAoc3RydWN0
dXJlLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQo
R2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZz
ZXQoKSkpOworICAgIAorICAgIC8vIElmIHdlIGNhbiB3YXRjaCB0aGUgY29uZGl0aW9uIHJpZ2h0
IG5vdywgdGhlbiB3ZSBjYW4gZW1pdCB0aGUgbG9hZCBhZnRlciB3YXRjaGluZyBpdC4gVGhpcwor
ICAgIC8vIGlzIGNhc2UgKDMpIGFib3ZlLgorICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9u
KGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNl
dE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7Cisg
ICAgCisgICAgLy8gV2UgY2FuJ3Qgd2F0Y2ggYW55dGhpbmcgYnV0IHdlIGtub3cgdGhhdCB0aGUg
Y3VycmVudCBzdHJ1Y3R1cmUgc2F0aXNmaWVzIHRoZSBjb25kaXRpb24uIFNvLAorICAgIC8vIGNo
ZWNrIGZvciB0aGF0IHN0cnVjdHVyZSBhbmQgdGhlbiBlbWl0IHRoZSBsb2FkLgorICAgIGFkZFRv
R3JhcGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLCAKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICBhZGRUb0dyYXBoKEpTQ29uc3Rh
bnQsIE9wSW5mbyhiYXNlKSkpOworICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9m
ZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7
Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0
aG9kJiBtZXRob2QsCisgICAgTm9kZVR5cGUgb3ApCit7CisgICAgc3dpdGNoIChtZXRob2Qua2lu
ZCgpKSB7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAg
ICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QuY29uc3RhbnQo
KSkpOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7Cisg
ICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0
aG9kLnByb3RvdHlwZSgpKSk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVk
aWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBvcCk7
CisgICAgfQorICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgIC8vIFdp
bGwgbmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgTm9kZVR5cGUg
b3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQoY29uZGl0aW9u
KTsKKyAgICByZXR1cm4gbG9hZChwcmVkaWN0aW9uLCBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5z
dXJlKGNvbmRpdGlvbi51aWQoKSksIG1ldGhvZCwgb3ApOworfQorCitib29sIEJ5dGVDb2RlUGFy
c2VyOjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
KQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDog
Y29uZGl0aW9uU2V0KSB7CisgICAgICAgIGlmICghY2hlY2soY29uZGl0aW9uKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dldEJ5T2Zm
c2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKCJjb25kaXRpb25TZXQgPSAiLCBjb25kaXRpb25TZXQsICJcbiIpOworICAgIAorICAg
IEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlvblNldCkgeworICAgICAgICBzd2l0Y2ggKGNv
bmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2Vu
Y2U6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsgLy8gU2hvdWxkIG9ubHkg
c2VlIGV4YWN0bHkgb25lIG9mIHRoZXNlLgorICAgICAgICAgICAgcmVzdWx0ID0gcGxhbkxvYWQo
Y29uZGl0aW9uKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBpZiAoIWNoZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghIXJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwgTm9kZVR5cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxh
bkxvYWQoY29uZGl0aW9uU2V0KTsKKyAgICByZXR1cm4gbG9hZCgKKyAgICAgICAgcHJlZGljdGlv
biwKKyAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS51aWQoKSksCisgICAgICAgIG1ldGhvZCwgb3ApOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAor
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJiB2YXJpYW50KQogewotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNlbGxDb25zdGFu
dFdpdGhTdHJ1Y3R1cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVj
dHVyZSgpKTsKKyAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKKyAgICAKKyAg
ICBTcGVjdWxhdGVkVHlwZSBsb2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlwZSBsb2FkT3A7Cisg
ICAgaWYgKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgeworICAgICAgICBsb2FkUHJlZGljdGlv
biA9IFNwZWNDZWxsT3RoZXI7CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRlclNldHRlckJ5T2Zm
c2V0OworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gcHJlZGljdGlvbjsK
KyAgICAgICAgbG9hZE9wID0gR2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE5vZGUqIGxv
YWRlZFZhbHVlOworICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisg
ICAgICAgIGxvYWRlZFZhbHVlID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFyaWFudC5jb25kaXRp
b25TZXQoKSwgbG9hZE9wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5k
bGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCB2YXJpYW50
LnN0cnVjdHVyZVNldCgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAorICAg
ICAgICAgICAgbG9hZE9wKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgYmFja3dhcmRzIHBy
b3BhZ2F0aW9uIGtub3dzIHRoYXQgd2UndmUgdXNlZCBiYXNlLgorICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgYmFzZSk7CisgICAgCisgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCiB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMwNywxOCArMjU1MywzNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAg
ICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwot
ICAgIAorICAgICAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2VzOworICAg
ICAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNrcyBmb3Ig
YWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAgICAgICAvLyAg
ICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNlIGluIHRoZSBj
aGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNrcyBhbmQgdGhv
c2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAodW5zaWduZWQg
dmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgt
LTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5j
b25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAg
IGlmICh2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2Uo
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNldCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQo
KSkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQodmFy
aWFudC5jb25kaXRpb25TZXQoKSk7CisgICAgICAgICAgICBpZiAoIW1ldGhvZCkgeworICAgICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJl
ciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKE11
bHRpR2V0QnlPZmZzZXRDYXNlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIG1ldGhvZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAg
IG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKKyAgICAKICAg
ICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0QnlPZmZzZXQKICAgICAgICAgTXVsdGlHZXRCeU9m
ZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEuYWRkKCk7Ci0g
ICAgICAgIGRhdGEtPnZhcmlhbnRzID0gZ2V0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAg
ICBkYXRhLT5jYXNlcyA9IGNhc2VzOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0g
aWRlbnRpZmllck51bWJlcjsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlv
bk9wZXJhbmQpLAogICAgICAgICAgICAgYWRkVG9HcmFwaChNdWx0aUdldEJ5T2Zmc2V0LCBPcElu
Zm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwpAQCAtMjMyOCwzMCArMjU5Miwx
NiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIEFTU0VSVChnZXRC
eUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CiAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFu
dCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAgICAgICAgICAgICAgCisgICAgTm9kZSogbG9hZGVk
VmFsdWUgPSBsb2FkKHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQp
OworICAgIGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
ZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcElu
Zm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAg
ICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwogICAgIAot
ICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgYWRk
VG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZh
cmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7Ci0gICAgCi0gICAgZW1pdENoZWNrcyh2YXJp
YW50LmNvbnN0YW50Q2hlY2tzKCkpOwotCi0gICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KQotICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
OwotICAgIAotICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQgdG8KLSAgICAvLyBlbnN1cmUg
dGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50
aWwgd2UncmUgZG9uZSB3aXRoCi0gICAgLy8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9u
bHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUK
LSAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENo
ZWNrU3RydWN0dXJlIG9uIGJhc2UuCi0gICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQotICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZSk7Ci0gICAgCi0gICAgTm9kZSog
bG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgdmFyaWFudC5jYWxsTGlu
a1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0gICAgICAgIGJhc2UsIHZh
cmlhbnQuYmFzZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgp
LAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9m
ZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICAKICAgICBpZiAoIXZhcmlhbnQuY2FsbExpbmtTdGF0
dXMoKSkgewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCks
IGxvYWRlZFZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4OCw3ICsyNjM4LDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyAgICBzaW5jZSB3ZSBvbmx5
IHJlYWxseSBjYXJlIGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29p
bmcgdG8gdGFrZSB0aGF0CiAgICAgLy8gICAgc2hvcnRjdXQuCiAgICAgaW50IG5leHRSZWdpc3Rl
ciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlh
dGVOYWtlZFNldCk7CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJh
c2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAKICAgICBoYW5kbGVDYWxsKAogICAgICAgICBk
ZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbCwgT1BD
T0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLApAQCAtMjQyMiwxNyArMjY3MiwyMCBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwotICAg
ICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRl
eC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0u
a2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFy
aWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNr
KHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1
dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKKyAgICAg
ICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGls
YXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgCiAgICAgICAgIE11bHRp
UHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFk
ZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsK
ICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CkBAIC0y
NDU0LDcgKzI3MDcsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQu
Y29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25T
ZXQoKSkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAg
IApAQCAtMjUwNSwxOSArMjc2MSwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eUlkKAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVyOiB7
Ci0gICAgICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgIAotICAgICAgICBh
ZGRUb0dyYXBoKAotICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAKLSAg
ICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgYmFzZSA9IHdl
YWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAgCi0gICAgICAg
IE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICBTcGVj
Q2VsbE90aGVyLCBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIEdldEdldHRlclNldHRlckJ5T2Zmc2V0
KTsKKyAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJhc2Us
IGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7
CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwg
cHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRUb0dyYXBoKEdldFNldHRlciwg
bG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI1NDUsNyArMjc5Myw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
KHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKICAgICAKICAgICAgICAgaW50IG5leHRSZWdp
c3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIG9yaWdpbmFsQmFzZSwg
SW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdp
c3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKG5leHRSZWdpc3RlcisrKSwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAK
ICAgICAgICAgaGFuZGxlQ2FsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksOSBA
QCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAgICAgICAg
ICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVy
eS5jb25zdGFudCgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBmb3IgKEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludHMpCisgICAgICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFj
a2VkUmVmZXJlbmNlcyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxODc0ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAi
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50LmgiCiAj
aW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05
OCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiB3
ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+IHdlYWtT
dHJ1Y3R1cmVSZWZlcmVuY2VzOwogICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQ+IHdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IGFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRzOwogICAg
IAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMjEgKzI5
NCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShp
bmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhl
IHN0YXRlIGJlZm9yZS4KICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8v
IERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8g
dGhpcy4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAg
ICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0cnVjdHVyZVNldCgpLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJpYW50
cy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNl
cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZSYgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGdldENhc2Uu
c2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZXRDYXNl
LnNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5jYXNlc1tp
LS1dID0gZGF0YS5jYXNlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNh
c2VzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAxKQorICAg
ICAgICAgICAgICAgIGlmIChkYXRhLmNhc2VzLnNpemUoKSAhPSAxKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbWl0R2V0QnlP
ZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVl
LCBkYXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGRhdGEuY2FzZXNbMF0ubWV0
aG9kKCksIGRhdGEuaWRlbnRpZmllck51bWJlcik7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNzQsOCAr
MzczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlh
bnRzKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uY29uc3Rh
bnRDaGVja3MoKS5pc0VtcHR5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1tp
XS5hbHRlcm5hdGVCYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0u
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgY291bGQgaGFuZGxlIHByb3RvdHlwZSBjYXNlcy4KICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzODYK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzkyLDcgKzM5MCwxMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aUdl
dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cyA9IHN0
YXR1cy52YXJpYW50cygpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBk
YXRhLT5jYXNlcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNl
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2Fk
KHZhcmlhbnQub2Zmc2V0KCkpKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb011bHRpR2V0QnlPZmZzZXQoZGF0YSk7CiAgICAgICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CkBAIC00MzIsOSArNDM1LDMxIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KQotICAgICAgICAgICAgICAgICAg
ICBhZGRDaGVja3Mob3JpZ2luLCBpbmRleEluQmxvY2ssIHN0YXR1c1tpXS5jb25zdGFudENoZWNr
cygpKTsKKworICAgICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50
cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlvblNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRp
b24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+
c3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1
Y3R1cmVFbnN1cmVzVmFsaWRpdHkoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgbm9kZS0+b3JpZ2luLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnRDb25zdGFudEZvclVzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBub2RlLT5vcmlnaW4sIGNvbmRpdGlvbi5vYmplY3QoKSwgS25vd25DZWxsVXNl
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
KSB7CiAgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5v
ZGUsIGJhc2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKQEAgLTUyOSw0MSAr
NTU0LDY4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAg
ICB9CisgICAgCisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2Nr
LCBOb2RlKiBub2RlLCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICAgICAgLy8gV2hlbiB3ZSBnZXQgdG8gaGVyZSB3
ZSBoYXZlIGFscmVhZHkgZW1pdHRlZCBhbGwgb2YgdGhlIHJlcXVpc2l0ZSBjaGVja3MgZm9yIGV2
ZXJ5dGhpbmcuCisgICAgICAgIC8vIFNvLCB3ZSBqdXN0IG5lZWQgdG8gZW1pdCB3aGF0IHRoZSBt
ZXRob2Qgb2JqZWN0IHRlbGxzIHVzIHRvIGVtaXQuCiAgICAgICAgIAorICAgICAgICBzd2l0Y2gg
KG1ldGhvZC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxp
ZDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6
Q29uc3RhbnQ6CisgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1l
dGhvZC5jb25zdGFudCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAgICAgZW1pdEdldEJ5
T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1i
ZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKKyAg
ICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBub2RlLT5vcmlnaW4sIG1ldGhvZC5wcm90b3R5
cGUoKSk7CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoCisgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBub2RlLCBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpLCBpZGVudGlmaWVyTnVt
YmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IH0K
KyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9k
ZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKICAgICB7Ci0gICAgICAg
IE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNoaWxkRWRn
ZSA9IG5vZGUtPmNoaWxkMSgpOwogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ss
IG5vZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAg
ICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVC
YXNlKCkpCi0gICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2VWYWx1ZS5tX3Zh
bHVlOwotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQ
cm9wZXJ0eShiYXNlRm9yTG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zm
c2V0KCkpKSB7CisgICAgICAgIC8vIFdlIGFyZW4ndCBzZXQgdXAgdG8gaGFuZGxlIHByb3RvdHlw
ZSBzdHVmZi4KKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50LmNvbmRp
dGlvblNldCgpLmlzRW1wdHkoKSk7CisKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dy
YXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZVZhbHVlLm1fdmFsdWUsIHZhcmlhbnQuc3Ry
dWN0dXJlU2V0KCksIHZhcmlhbnQub2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICBtX2dyYXBoLmNv
bnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSkgewotICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2luc2VydGlvblNldC5p
bnNlcnRDb25zdGFudChpbmRleEluQmxvY2ssIG9yaWdpbiwgdmFyaWFudC5hbHRlcm5hdGVCYXNl
KCkpOwotICAgICAgICAgICAgY2hpbGRFZGdlID0gRWRnZShjaGlsZCwgS25vd25DZWxsVXNlKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNl
bGxVc2UpOworICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBjaGls
ZEVkZ2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5v
ZGUsIEVkZ2UgY2hpbGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNl
bGxVc2UpOwogICAgICAgICAKICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAg
IAotICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gY2hpbGRFZGdlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hpbGRFZGdlKSk7Cisg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBub2Rl
LT5vcmlnaW4sIGNoaWxkRWRnZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBTdG9y
YWdlQWNjZXNzRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7
Ci0gICAgICAgIGRhdGEub2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsKKyAgICAgICAgZGF0YS5v
ZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZp
ZXJOdW1iZXI7CiAgICAgICAgIAogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChk
YXRhLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtNjQzLDE1ICs2OTUsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLT5v
cmlnaW4sIG5vZGUtPmNoaWxkMSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRDaGVja3Mo
Ci0gICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIGNvbnN0
IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNoZWNrcykKLSAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGVja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBvcmlnaW4sIGlu
ZGV4SW5CbG9jaywgY2hlY2tzW2ldLmNvbnN0YW50KCksIGNoZWNrc1tpXS5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
ayhOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGws
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUoY2VsbC0+c3RydWN0dXJlKCkpID09IFN0cnVjdHVyZVJlZ2lzdGVyZWRBbmRX
YXRjaGVkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw4ICszNSw5IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgQXJy
YXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBDb21tb25E
YXRhJiBjb21tb24pCiB7CisgICAgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IGNvbW1vbi53YXRj
aHBvaW50cy5hZGQoY29kZUJsb2NrKTsKICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9p
bnQqIG5ldXRlcmluZ1dhdGNocG9pbnQgPQogICAgICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dh
dGNocG9pbnQ6OmNyZWF0ZSgqY29kZUJsb2NrLT52bSgpKTsKICAgICBuZXV0ZXJpbmdXYXRjaHBv
aW50LT5zZXQoKS0+YWRkKHdhdGNocG9pbnQpOwpAQCAtNDUsMTAgKzQ2LDIzIEBAIHZvaWQgQXJy
YXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmEKIH0KIAogdm9pZCBJbmZlcnJlZFZhbHVl
QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJlZFZhbHVlKiBp
bmZlcnJlZFZhbHVlLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBDb21tb25EYXRhJiBjb21tb24p
CiB7CiAgICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChpbmZlcnJlZFZhbHVlKTsgLy8gRm9yIGNv
bW1vbiB1c2VycywgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBvciBub3Qu
IElmIHJlZmVyZW5jZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgotICAgIGluZmVy
cmVkVmFsdWUtPmFkZCh3YXRjaHBvaW50KTsKKyAgICBpbmZlcnJlZFZhbHVlLT5hZGQoY29tbW9u
LndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRBZGFwdG9yOjphZGQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3sKKyAg
ICBzd2l0Y2ggKGtleS5raW5kKCkpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpFcXVp
dmFsZW5jZToKKyAgICAgICAgY29tbW9uLmFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludHMuYWRkKGtleSwgY29kZUJsb2NrKS0+aW5zdGFsbCgpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBjb21tb24uYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
IH0KIAogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KQEAgLTc0
LDYgKzg4LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSlNBcnIKICAg
ICBtX2J1ZmZlclZpZXdzLmFkZExhemlseSh2aWV3KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQorewor
ICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERl
c2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
aWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC04OCw2ICsxMDcsNyBAQCB2b2lk
IERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmxpbmVTZXRzLnJl
YWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1faW5mZXJyZWRWYWx1ZXMucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtOTUsNyArMTE1LDE4IEBAIGJvb2wgRGVz
aXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0
aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAg
ICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYnVm
ZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0
aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZh
bGlkKCk7Cit9CisKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiRGVzaXJlZCB3YXRjaHBvaW50czpcbiIpOworICAgIG91dC5wcmludCgiICAgIFdhdGNocG9p
bnQgc2V0czogIiwgaW5Db250ZXh0KG1fc2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91dC5w
cmludCgiICAgIElubGluZSB3YXRjaHBvaW50IHNldHM6ICIsIGluQ29udGV4dChtX2lubGluZVNl
dHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB2YWx1ZXM6
ICIsIGluQ29udGV4dChtX2luZmVycmVkVmFsdWVzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0
LnByaW50KCIgICAgQnVmZmVyIHZpZXdzOiAiLCBpbkNvbnRleHQobV9idWZmZXJWaWV3cywgY29u
dGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIE9iamVjdCBwcm9wZXJ0eSBjb25kaXRp
b25zOiAiLCBpbkNvbnRleHQobV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMsIGNvbnRleHQpLCAiXG4i
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODc0
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0
YS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVy
Vmlldy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAi
V2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MCwz
MyArNDIsNTYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3MgR3JhcGg7
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewotICAg
IHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBUIHNldCwgV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkKK3N0cnVjdCBTZXRQb2ludGVyQWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVC
bG9jayogY29kZUJsb2NrLCBUIHNldCwgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHNldC0+YWRkKHdhdGNocG9pbnQpOworICAgICAgICByZXR1cm4gc2V0LT5hZGQo
Y29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKICAgICB9CiAgICAgc3RhdGljIGJv
b2wgaGFzQmVlbkludmFsaWRhdGVkKFQgc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlk
YXRlZCgpOyB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0
LCBUIHNldCwgRHVtcENvbnRleHQqKQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KFJhd1BvaW50
ZXIoc2V0KSk7CisgICAgfQogfTsKIAogc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKLSAg
ICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIFdhdGNocG9pbnQq
KTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIENvbW1v
bkRhdGEmKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSW5mZXJyZWRWYWx1
ZSogaW5mZXJyZWRWYWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBpbmZlcnJlZFZhbHVlLT5o
YXNCZWVuSW52YWxpZGF0ZWQoKTsKICAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYgb3V0LCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBEdW1wQ29u
dGV4dCopCisgICAgeworICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihpbmZlcnJlZFZhbHVl
KSk7CisgICAgfQogfTsKIAogc3RydWN0IEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9y
IHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBX
YXRjaHBvaW50Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZm
ZXJWaWV3KiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRl
ZChKU0FycmF5QnVmZmVyVmlldyogdmlldykKICAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0g
IXZpZXctPmxlbmd0aCgpOwotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuICF2aWV3LT5sZW5ndGgoKTsKKyAgICB9Cisg
ICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBKU0FycmF5QnVm
ZmVyVmlldyogdmlldywgRHVtcENvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQu
cHJpbnQoaW5Db250ZXh0KEpTVmFsdWUodmlldyksIGNvbnRleHQpKTsKKyAgICB9Cit9OworCitz
dHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvciB7CisgICAgc3RhdGljIHZv
aWQgYWRkKENvZGVCbG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgQ29tbW9u
RGF0YSYpOworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFrZXkuaXNXYXRj
aGFibGUoKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dCgKKyAgICAgICAg
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgRHVt
cENvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KGtl
eSwgY29udGV4dCkpOwogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRT
ZXRUeXBlLCB0eXBlbmFtZSBBZGFwdG9yID0gR2VuZXJpY1NldEFkYXB0b3I8V2F0Y2hwb2ludFNl
dFR5cGU+PgordGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFk
YXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+CiBjbGFzcyBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdHlwZWRl
ZiBIYXNoTWFwPFdhdGNocG9pbnRTZXRUeXBlLCBib29sPiBTdGF0ZU1hcDsKQEAgLTg3LDcgKzEx
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVhbGx5QWRkZWQpOwog
ICAgICAgICAKICAgICAgICAgZm9yIChhdXRvJiBzZXQgOiBtX3NldHMpCi0gICAgICAgICAgICBB
ZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJs
b2NrKSk7CisgICAgICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2NrLCBzZXQsIGNvbW1vbik7
CiAgICAgICAgIAogICAgICAgICBtX3JlYWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CkBAIC0xMDcs
NiArMTMyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc2V0cy5jb250YWlucyhzZXQp
OwogICAgIH0KIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21t
YTsKKyAgICAgICAgZm9yIChjb25zdCBXYXRjaHBvaW50U2V0VHlwZSYgZW50cnkgOiBtX3NldHMp
IHsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICBBZGFwdG9yOjpk
dW1wSW5Db250ZXh0KG91dCwgZW50cnksIGNvbnRleHQpOworICAgICAgICB9CisgICAgfQorCiBw
cml2YXRlOgogICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5cGU+IG1fc2V0czsKICAgICBib29s
IG1fcmVhbGx5QWRkZWQ7CkBAIC0xMjIsNiArMTU2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZExhemlseShJbmZlcnJlZFZhbHVlKik7CiAgICAgdm9pZCBhZGRMYXppbHkoSlNBcnJheUJ1ZmZl
clZpZXcqKTsKICAgICAKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNh
bGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjp3YXRjaENvbmRpdGlvbigpLCB3aGljaCBkb2Vz
CisgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwgYXMgc29tZSBvdGhlciBib29r
a2VlcGluZy4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYpOworICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCiAgICAgdm9p
ZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwgQ29tbW9uRGF0YSYpOwpAQCAtMTQ0LDEyICsxODIsMjAg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNXYXRjaGVk
KHZpZXcpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVT
ZXRzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8
V2F0Y2hwb2ludFNldCo+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElu
bGluZVdhdGNocG9pbnRTZXQqPiBtX2lubGluZVNldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRW
YWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyos
IEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOworICAgIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24g
MTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVy
ZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDE0IEBAIERlc2lyZWRXZWFr
UmVmZXJlbmNlczo6fkRlc2lyZWRXZWFrUmVmZXIKIAogdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5j
ZXM6OmFkZExhemlseShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgbV9yZWZlcmVuY2VzLmFkZChjZWxs
KTsKKyAgICBpZiAoY2VsbCkKKyAgICAgICAgbV9yZWZlcmVuY2VzLmFkZChjZWxsKTsKK30KKwor
dm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYWRkTGF6aWx5KHZhbHVlLmFzQ2VsbCgp
KTsKIH0KIAogYm9vbCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKEpTQ2VsbCogY2Vs
bCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVu
Y2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2Vha1JlZmVyZW5jZXMuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NCw2ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyAKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3Mg
SlNDZWxsOworY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAK
QEAgLTQ4LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIH5EZXNpcmVkV2Vha1JlZmVyZW5jZXMoKTsK
IAogICAgIHZvaWQgYWRkTGF6aWx5KEpTQ2VsbCopOworICAgIHZvaWQgYWRkTGF6aWx5KEpTVmFs
dWUpOwogICAgIGJvb2wgY29udGFpbnMoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlB
ZGQoVk0mLCBDb21tb25EYXRhKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw4ICsyNTcsOCBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgaWYgKG5vZGUtPmhhc011bHRpR2V0
QnlPZmZzZXREYXRhKCkpIHsKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBu
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJp
ZCIsIGRhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBpZGVudGlmaWVycygpW2RhdGEuaWRlbnRp
Zmllck51bWJlcl0sICJ9Iik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRh
LnZhcmlhbnRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNv
bnRleHQoZGF0YS52YXJpYW50c1tpXSwgY29udGV4dCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgaW5Db250ZXh0KGRhdGEuY2FzZXNbaV0sIGNvbnRleHQpKTsKICAgICB9CiAgICAg
aWYgKG5vZGUtPmhhc011bHRpUHV0QnlPZmZzZXREYXRhKCkpIHsKICAgICAgICAgTXVsdGlQdXRC
eU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOwpAQCAtNTMw
LDYgKzUzMCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAg
ICAgICAgaWYgKHZhbHVlLT5wb2ludHNUb0hlYXAoKSkKICAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICIsIGluQ29udGV4dCgqdmFsdWUsICZteUNvbnRleHQpLCAiXG4iKTsKICAgICB9CisKKyAg
ICBvdXQucHJpbnQoaW5Db250ZXh0KHdhdGNocG9pbnRzKCksICZteUNvbnRleHQpKTsKICAgICAK
ICAgICBpZiAoIW15Q29udGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgbXlDb250ZXh0LmR1bXAo
b3V0KTsKQEAgLTg0OCw2ICs4NTAsMzAgQEAgdm9pZCBHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9k
ZXMoTm9kZUZsYQogICAgIH0KIH0KIAorYm9vbCBHcmFwaDo6d2F0Y2hDb25kaXRpb24oY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1dhdGNoYWJs
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9wbGFuLndlYWtSZWZlcmVu
Y2VzLmFkZExhemlseShrZXkub2JqZWN0KCkpOworICAgIGlmIChrZXkuaGFzUHJvdG90eXBlKCkp
CisgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5LnByb3RvdHlwZSgp
KTsKKyAgICBpZiAoa2V5Lmhhc1JlcXVpcmVkVmFsdWUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtS
ZWZlcmVuY2VzLmFkZExhemlseShrZXkucmVxdWlyZWRWYWx1ZSgpKTsKKyAgICAKKyAgICBtX3Bs
YW4ud2F0Y2hwb2ludHMuYWRkTGF6aWx5KGtleSk7CisKKyAgICBpZiAoa2V5LmtpbmQoKSA9PSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpCisgICAgICAgIG1fc2FmZVRvTG9hZC5hZGQoc3Rk
OjptYWtlX3BhaXIoa2V5Lm9iamVjdCgpLCBrZXkub2Zmc2V0KCkpKTsKKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlu
cyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQpKTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNo
TWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+Ojpp
dGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAgLTEw
MjAsOCArMTA0NiwxMiBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpT
CiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KAogICAgIEpTVmFsdWUgYmFz
ZSwgY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Ns
b2JiZXJlZCgpKQorICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9i
YmVyZWQoKSkgeworICAgICAgICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9m
ZnNldCB0byBhIHVpZCwgd2UgY291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KKyAgICAg
ICAgLy8gd2F0Y2hpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyeUdldENvbnN0YW50
UHJvcGVydHkoYmFzZSwgc3RydWN0dXJlLnNldCgpLCBvZmZzZXQpOwogfQpAQCAtMTE2NywxNyAr
MTE5Nyw5IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgTXVs
dGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsgai0tOykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIG1hcmsgYW55dGhpbmcgaW4gdGhl
IHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAgICAgICAgICAg
Ly8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVk
IHRvIG1hcmsgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1
c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQotICAgICAg
ICAgICAgICAgICAgICAvLyB2YXJpYW50cyBkaWQgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOworICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgOiBnZXRDYXNlLnNldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihzdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODc0ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2NSw2ICs2NjUsMTUgQEAgcHVibGljOgogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRp
ZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KICAgICBEZXNpcmVkV2F0Y2hw
b2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAg
CisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW52YWxpZCBvciB1
bndhdGNoYWJsZS4gSWYgdGhpcyBpcyBhIFByZXNlbmNlIGNvbmRpdGlvbiwKKyAgICAvLyB0aGlz
IGFsc28gbWFrZXMgaXQgY2hlYXAgdG8gcXVlcnkgaWYgdGhlIGNvbmRpdGlvbiBob2xkcy4gQWxz
byBtYWtlcyBzdXJlIHRoYXQgdGhlIEdDIGtub3dzCisgICAgLy8gd2hhdCdzIGdvaW5nIG9uLgor
ICAgIGJvb2wgd2F0Y2hDb25kaXRpb24oY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsK
KworICAgIC8vIENoZWNrcyBpZiBpdCdzIGtub3duIHRoYXQgbG9hZGluZyBmcm9tIHRoZSBnaXZl
biBvYmplY3QgYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBmaW5lLiBUaGlzIGlzCisgICAgLy8gY29t
cHV0ZWQgYnkgdHJhY2tpbmcgd2hpY2ggY29uZGl0aW9ucyB3ZSB0cmFjayB3aXRoIHdhdGNoQ29u
ZGl0aW9uKCkuCisgICAgYm9vbCBpc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29k
ZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNh
bGxGcmFtZSopOwogICAgIApAQCAtODQ0LDYgKzg1Myw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBIYXNoTWFw
PENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0
ZWNvZGVMaXZlbmVzczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxC
eXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxzOworICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpT
T2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CiAgICAgRG9taW5hdG9ycyBt
X2RvbWluYXRvcnM7CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7CiAg
ICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdGcm96ZW5WYWx1ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEdldEJ5T2Zmc2V0TWV0aG9kOjpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAoreworICAgIG91dC5wcmludChtX2tpbmQsICI6Iik7CisgICAgc3dpdGNoIChtX2tpbmQpIHsK
KyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1
bXBJbkNvbnRleHQoY29uc3RhbnQoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBMb2FkRnJvbVByb3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KG9mZnNldCgp
LCAiQCIsIHBvaW50ZXJEdW1wSW5Db250ZXh0KHByb3RvdHlwZSgpLCBjb250ZXh0KSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7
Cit9CisKK3ZvaWQgTXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGlu
Q29udGV4dChtX3NldCwgY29udGV4dCksICI6IiwgaW5Db250ZXh0KG1fbWV0aG9kLCBjb250ZXh0
KSk7Cit9CisKK3ZvaWQgTXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEdldEJ5
T2Zmc2V0TWV0aG9kOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFu
dDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVBy
b3RvdHlwZToKKyAgICAgICAgb3V0LnByaW50KCJMb2FkRnJvbVByb3RvdHlwZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R011bHRpR2V0QnlPZmZzZXREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YV9oCisjZGVmaW5lIERGR011bHRpR2V0QnlPZmZzZXREYXRh
X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEZyb3plblZhbHVlOworCitjbGFzcyBH
ZXRCeU9mZnNldE1ldGhvZCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgSW52
YWxpZCwKKyAgICAgICAgQ29uc3RhbnQsCisgICAgICAgIExvYWQsCisgICAgICAgIExvYWRGcm9t
UHJvdG90eXBlCisgICAgfTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCgpCisgICAgICAg
IDogbV9raW5kKEludmFsaWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0QnlP
ZmZzZXRNZXRob2QgY29uc3RhbnQoRnJvemVuVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAg
R2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29uc3Rh
bnQ7CisgICAgICAgIHJlc3VsdC51LmNvbnN0YW50ID0gdmFsdWU7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBsb2FkKFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IExvYWQ7CisgICAgICAgIHJlc3VsdC51Lmxv
YWQub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgR2V0QnlPZmZzZXRNZXRob2QgbG9hZEZyb21Qcm90b3R5cGUoRnJvemVuVmFs
dWUqIHByb3RvdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0
QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZEZyb21Q
cm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQucHJvdG90eXBlID0gcHJvdG90eXBlOwor
ICAgICAgICByZXN1bHQudS5sb2FkLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQgPT0gSW52YWxpZDsgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorICAgIAorICAgIEZyb3plblZhbHVlKiBjb25zdGFudCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoa2luZCgpID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIHUu
Y29uc3RhbnQ7CisgICAgfQorICAgIAorICAgIEZyb3plblZhbHVlKiBwcm90b3R5cGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBMb2FkRnJvbVByb3RvdHlwZSk7Cisg
ICAgICAgIHJldHVybiB1LmxvYWQucHJvdG90eXBlOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBM
b2FkIHx8IGtpbmQoKSA9PSBMb2FkRnJvbVByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiB1Lmxv
YWQub2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIEZyb3plblZhbHVlKiBj
b25zdGFudDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBwcm90
b3R5cGU7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gbG9h
ZDsKKyAgICB9IHU7CisgICAgS2luZCBtX2tpbmQ7Cit9OworCitjbGFzcyBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSB7CitwdWJsaWM6CisgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoY29uc3QgU3RydWN0dXJlU2V0JiBz
ZXQsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2QpCisgICAgICAgIDogbV9zZXQoc2V0
KQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0
cnVjdHVyZVNldCYgc2V0KCkgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisgICAgY29uc3QgR2V0QnlPZmZzZXRN
ZXRob2QmIG1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0aG9kOyB9CisgICAgCisgICAgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJ1Y3R1cmVT
ZXQgbV9zZXQ7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbV9tZXRob2Q7Cit9OworCitzdHJ1Y3Qg
TXVsdGlHZXRCeU9mZnNldERhdGEgeworICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7Cisg
ICAgVmVjdG9yPE11bHRpR2V0QnlPZmZzZXRDYXNlLCAyPiBjYXNlczsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6S2luZCk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0Vwb2NoLmgiCiAjaW5jbHVkZSAiREZHTGF6eUpTVmFs
dWUuaCIKKyNpbmNsdWRlICJERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIgogI2luY2x1ZGUgIkRG
R05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdO
b2RlVHlwZS5oIgpAQCAtNjUsMTEgKzY2LDYgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsK
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwogfTsKIAotc3RydWN0IE11bHRpR2V0QnlP
ZmZzZXREYXRhIHsKLSAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxH
ZXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7Ci19OwotCiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNl
dERhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiAgICAgVmVjdG9yPFB1dEJ5
SWRWYXJpYW50LCAyPiB2YXJpYW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDEw
ICszMjgsMTggQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAg
IGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAg
ICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkub2Zmc2V0OworCisgICAgICAgIGlmIChzdGF0ZS5zdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkgeworICAgICAgICAg
ICAgaWYgKEpTT2JqZWN0KiBrbm93bkJhc2UgPSBub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RD
b25zdGFudDxKU09iamVjdCo+KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3JhcGguaXNTYWZl
VG9Mb2FkKGtub3duQmFzZSwgb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUmIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9z
dHJ1Y3R1cmU7CiAgICAgICAgIGlmICh2YWx1ZS5pc0luZmluaXRlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhKCkub2Zmc2V0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5z
aXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGlmICghdmFsdWVbaV0tPmlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDEsNDIgKzM0OSwy
OCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIAog
ICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogewogICAgICAgICAvLyBXZSBjYW4ndCBhbHdheXMg
Z3VhcmFudGVlIHRoYXQgdGhlIE11bHRpR2V0QnlPZmZzZXQgaXMgc2FmZSB0byBleGVjdXRlIGlm
IGl0Ci0gICAgICAgIC8vIGNvbnRhaW5zIGxvYWRzIGZyb20gcHJvdG90eXBlcy4gV2Uga25vdyB0
aGF0IGl0IHdvbid0IGxvYWQgZnJvbSB0aG9zZSBwcm90b3R5cGVzIGlmCi0gICAgICAgIC8vIHdl
IHdhdGNoIHRoZSBtdXRhYmlsaXR5IG9mIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGxvYWRlZC4gU28s
IGhlcmUgd2UgdHJ5IHRvCi0gICAgICAgIC8vIGNvbnN0YW50LWZvbGQgcHJvdG90eXBlIGxvYWRz
LCBhbmQgaWYgdGhhdCBmYWlscywgd2UgY2xhaW0gdGhhdCB3ZSBjYW5ub3QgaG9pc3QuIFdlCi0g
ICAgICAgIC8vIGFsc28ga25vdyB0aGF0IGEgbG9hZCBpcyBzYWZlIHRvIGV4ZWN1dGUgaWYgd2Ug
YXJlIHdhdGNoaW5nIHRoZSBwcm90b3R5cGUncwotICAgICAgICAvLyBzdHJ1Y3R1cmUuCi0gICAg
ICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBub2RlLT5tdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpLnZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIXZhcmlhbnQuYWx0ZXJu
YXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBwcm90b3R5cGUgbG9h
ZC4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgSlNWYWx1ZSBiYXNlID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0g
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gZ3JhcGguZnJlZXplKGJhc2UpOwotICAg
ICAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNB
cmVXYXRjaGVkCi0gICAgICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hv
dWxkV2F0Y2goKQotICAgICAgICAgICAgICAgICYmIGZyb3plbi0+c3RydWN0dXJlKCktPmlzVmFs
aWRPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBh
bHJlYWR5IHdhdGNoaW5nIHRoYXQgaXQncyBzYWZlIHRvIGxvYWQgZnJvbSB0aGlzLgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0gZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eSgKLSAgICAgICAgICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5iYXNl
U3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjb25zdGFu
dFJlc3VsdCkgewotICAgICAgICAgICAgICAgIC8vIENvdWxkbid0IGNvbnN0YW50LWZvbGQgYSBw
cm90b3R5cGUgbG9hZC4gVGhlcmVmb3JlLCB3ZSBzaG91bGRuJ3QgaG9pc3QKLSAgICAgICAgICAg
ICAgICAvLyBiZWNhdXNlIHRoZSBzYWZldHkgb2YgdGhlIGxvYWQgZGVwZW5kcyBvbiBzdHJ1Y3R1
cmUgY2hlY2tzIG9uIHRoZSBwcm90b3R5cGUsCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlJ3Jl
IHRvbyBjaGVhcCB0byB2ZXJpZnkgdGhhdCBoZXJlLgotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgLy8gY29udGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5cGVzLiBJZiB0aGUg
bG9hZCByZXF1aXJlcyBhIGNoZWNrIGluIElSLCB3aGljaCBpcyByYXJlLCB0aGVuCisgICAgICAg
IC8vIHdlIGN1cnJlbnRseSBjbGFpbSB0aGF0IHdlIGRvbid0IGtub3cgaWYgaXQncyBzYWZlIHRv
IGV4ZWN1dGUgYmVjYXVzZSBmaW5kaW5nIHRoYXQKKyAgICAgICAgLy8gY2hlY2sgaW4gdGhlIGFi
c3RyYWN0IHN0YXRlIHdvdWxkIGJlIGhhcmQuIElmIHRoZSBsb2FkIHJlcXVpcmVzIHdhdGNocG9p
bnRzLCB3ZSBqdXN0CisgICAgICAgIC8vIGNoZWNrIGlmIHdlJ3JlIG5vdCBpbiBhIGNsb2JiZXJl
ZCBzdGF0ZSAoaS5lLiBpbiBiZXR3ZWVuIGEgc2lkZSBlZmZlY3QgYW5kIGFuCisgICAgICAgIC8v
IGludmFsaWRhdGlvbiBwb2ludCkuCisgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNl
dENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKSB7Cisg
ICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhvZCgpOwor
ICAgICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDogLy8gT0sgYmVjYXVzZSBjb25zdGFudHMgYXJl
IGFsd2F5cyBzYWZlIHRvIGV4ZWN1dGUuCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpMb2FkOiAvLyBPSyBiZWNhdXNlIHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGhhcyBpdHMgb3du
IGNoZWNrcyBmb3IgbG9hZGluZyBmcm9tIHNlbGYuCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZToKKyAg
ICAgICAgICAgICAgICAvLyBPbmx5IE9LIGlmIHRoZSBzdGF0ZSBpc24ndCBjbG9iYmVyZWQuIFRo
YXQncyBhbG1vc3QgYWx3YXlzIHRoZSBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5z
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSAhPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghZ3JhcGguaXNT
YWZlVG9Mb2FkKG1ldGhvZC5wcm90b3R5cGUoKS0+Y2FzdDxKU09iamVjdCo+KCksIG1ldGhvZC5v
ZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlLCB3ZSB3aWxsIGVpdGhlcjoKLSAgICAgICAgICAgIC8vIC0gTm90IGxvYWQgZnJv
bSB0aGUgcHJvdG90eXBlIGJlY2F1c2UgY29uc3RhbnQgZm9sZGluZyB3aWxsIHN1Y2NlZWQgaW4g
dGhlCi0gICAgICAgICAgICAvLyAgIGJhY2tlbmQsIG9yCi0gICAgICAgICAgICAvLyAtIEVtaXQg
aW52YWxpZCBjb2RlIHRoYXQgZmFpbHMgd2F0Y2hwb2ludCBjaGVja3MuIFRoaXMgY291bGQgaGFw
cGVuIGlmIHRoZQotICAgICAgICAgICAgLy8gICBwcm9wZXJ0eSBiZWNvbWVzIG11dGFibGUgYWZ0
ZXIgdGhpcyBwb2ludCwgc2luY2Ugd2UgYWxyZWFkeSBzZXQgdGhlIHdhdGNocG9pbnQKLSAgICAg
ICAgICAgIC8vICAgYWJvdmUuIFRoaXMgY2FzZSBpcyBPSyBzaW5jZSB0aGUgY29kZSB3aWxsIGZh
aWwgd2F0Y2hwb2ludCBjaGVja3MgYW5kIG5ldmVyCi0gICAgICAgICAgICAvLyAgIGdldCBpbnN0
YWxsZWQuCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdp
c3RyYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NiwxNSArODYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZz
ZXQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVj
dHVyZXModmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBEb24ndCBuZWVkIHRvIHdhdGNoIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVj
YXVzZSB0aGF0IHdvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVj
b21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gd2F0Y2ggdGhlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxk
bid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOwotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENh
c2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmNhc2VzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmVzKGdldENhc2Uuc2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBNdWx0aVB1dEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODcwLDI0ICszODcwLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBNdWx0aUdldEJ5
T2Zmc2V0RGF0YSYgZGF0YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKIAotICAg
ICAgICBpZiAoZGF0YS52YXJpYW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGRhdGEuY2Fz
ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcg
YSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2UgdGhhdC4K
ICAgICAgICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tz
KGRhdGEudmFyaWFudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52
YXJpYW50cy5zaXplKCk7IGktLTspCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxv
Y2tzKGRhdGEuY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5j
YXNlcy5zaXplKCk7IGktLTspCiAgICAgICAgICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY2FzZSAiLCBpKSk7CiAgICAgICAgIExCYXNpY0Js
b2NrIGV4aXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgZmFpbCIp
KTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCiAgICAgICAg
IFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VT
ZXQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tp
XTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCku
c2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2
YXJpYW50LnN0cnVjdHVyZVNldCgpW2pdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRh
LmNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2Ug
Z2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBn
ZXRDYXNlLnNldCgpLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2V0Q2FzZS5zZXQoKVtqXTsKICAgICAgICAgICAgICAgICBiYXNlU2V0LmFk
ZChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKHdl
YWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwogICAgICAg
ICAgICAgfQpAQCAtMzg5OCwyOSArMzg5OCwzNiBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOwogICAgICAgICAKICAgICAgICAgVmVj
dG9yPFZhbHVlRnJvbUJsb2NrLCAyPiByZXN1bHRzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAx
XSA6IGV4aXQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9IGRhdGEu
Y2FzZXNbaV07CisgICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNl
Lm1ldGhvZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9j
a3NbaV0sIGkgKyAxIDwgZGF0YS5jYXNlcy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRh
LnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgYmFzZVNldC5tZXJnZSh2YXJpYW50LnN0cnVjdHVy
ZVNldCgpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0gICAgICAgICAgICBKU1ZhbHVl
IGNvbnN0YW50UmVzdWx0OwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRSZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0
YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
LCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoY29uc3RhbnRSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnRSZXN1bHQpKTsK
LSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG1l
dGhvZC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFs
aWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0
QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0
LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKG1ldGhvZC5jb25zdGFudCgpLT52YWx1ZSgpKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgICAgICAgICBMVmFsdWUgcHJv
cGVydHlCYXNlOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIodmFyaWFudC5h
bHRlcm5hdGVCYXNlKCkpOwotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBp
ZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZCkKICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzSW5s
aW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIobWV0aG9kLnByb3RvdHlw
ZSgpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zm
c2V0KG1ldGhvZC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9
IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5KHByb3BlcnR5QmFzZSwgZGF0
YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRp
YyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQ
YXRoRnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0
cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS5yZWdp
c3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKGNvZGVCbG9jayk7CkBAIC0xMzIsNDcgKzEzMiwzMyBAQCBzdGF0aWMgdm9pZCByZXBh
dGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKAotICAgIEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAg
ICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCkg
PT0gc3RydWN0dXJlICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxs
VmFsaWQoKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0
dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBleGVjdXRlIHRoaXMgY29kZSwgdGhlIG9i
amVjdCBtdXN0IGhhdmUgdGhlIHN0cnVjdHVyZSB3ZSBleHBlY3QuIEFzc2VydAotICAgICAgICAg
ICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KLSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBicmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAg
ICAgaml0LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICBqaXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbmVmZmVjdGl2ZVdhdGNocG9pbnQpOwotICAg
ICAgICAgICAgb2subGluaygmaml0KTsKLSAgICAgICAgfQorc3RhdGljIHZvaWQgY2hlY2tPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGlmIChjb25kaXRpb24uaXNX
YXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgIGNv
bmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAor
ICAgICAgICAgICAgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRpdGlvbikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOworCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgIFJFTEVB
U0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKICAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoaml0LAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwK
LSAgICAgICAgICAgIHN0cnVjdHVyZSkpOworICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoCisgICAg
ICAgICAgICBqaXQsIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHN0cnVjdHVyZSkpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9u
Q2hlY2soCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewot
ICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBB
U1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LAotICAgICAgICBmYWlsdXJl
Q2FzZXMsIHNjcmF0Y2hHUFIpOworc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fz
c2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBHUFJS
ZWcgc2NyYXRjaEdQUikKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gOiBzZXQpIHsKKyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bigKKyAgICAgICAgICAgIGNvbmRpdGlvbiwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgcmVwbGFjZVdp
dGhKdW1wKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKQEAgLTI5NiwxMSAr
MjgyLDEyIEBAIHN0YXRpYyBGdW5jdGlvblB0ciBjdXN0b21Gb3IoY29uc3QgUHV0UHIKIAogc3Rh
dGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHVi
S2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCi0gICAgRnVuY3Rpb25Q
dHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc2l6ZV90IGNvdW50LAorICAgIEZ1bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0LAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwK
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNs
b3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewotCisg
ICAgQVNTRVJUKGNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKKyAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guYmFzZUdQUik7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCkBA
IC0zNDYsMzcgKzMzMywzMSBAQCBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIH0K
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYg
KHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMo
KSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwg
Y29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0t
PnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAogICAgIGlmICh3YXRjaHBvaW50U2V0KQog
ICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxv
Y2spKTsKIAotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsgCi0gICAg
SlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIHByb3Rv
T2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMp
KTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b09iamVjdC0+
c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
bmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAgdm0t
PnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBwcm90b09iamVjdCwgcHJvdG9TdHJ1Y3R1
cmUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFpbHVy
ZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKCFwcm90b09iamVjdCB8fCBwcm90b09iamVj
dC0+c3RydWN0dXJlKCkgPT0gY3VyclN0cnVjdHVyZSk7CisgICAgY2hlY2tPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbnMoCisgICAgICAgIGNvbmRpdGlvblNldCwgY29kZUJsb2NrLCBzdHViSW5mbywg
c3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKworICAgIGlmIChpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpIHsKKyAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOworICAgICAg
ICBpZiAoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBj
b25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7Cisg
ICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50
cygqdm0sIG9mZnNldCk7CiAgICAgfQogICAgIAotICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIG9mZnNldCk7CiAgICAgR1BSUmVnIGJh
c2VGb3JBY2Nlc3NHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIGlmIChraW5kICE9IEdldFVuZGVm
aW5lZCkgewotICAgICAgICBpZiAoY2hhaW4pIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGNsb2JiZXJlZCBzY3Jh
dGNoR1BSIGVhcmxpZXIsIHNvIHdlIGhhdmUgdG8gcmVsb2FkIGZyb20gYmFzZUdQUiB0byBnZXQg
dGhlIHRhcmdldC4KICAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQogICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIGJhc2VGb3JHZXRHUFIpOwotICAgICAgICAgICAg
c3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCkpLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRm9yIHByb3h5IG9iamVjdHMsIHdlIG5l
ZWQgdG8gZG8gYWxsIHRoZSBTdHJ1Y3R1cmUgY2hlY2tzIGJlZm9yZSBtb3ZpbmcgdGhlIGJhc2VH
UFIgaW50bwpAQCAtNjI3LDkgKzYwOCw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rp
b25Gb3JDZWxsKFYKICAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2Jq
ZWN0KHZtKTsKICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9Ci0gICAgQVNT
RVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAgIGlm
ICh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3
SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CiAKICAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7CkBAIC04MjcsMjEgKzgwNywyMiBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgfQogCiAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xv
dC5jYWNoZWRPZmZzZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAw
OwotICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwogICAgIAogICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90
LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAgICAgICAgIGlmICh0eXBlSW5mby5wcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgp
KQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlNaXNzKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3Ry
dWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb3VudCA9
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoCi0gICAgICAgICAgICAgICAg
ZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LCBvZmZzZXQpOwotICAgICAg
ICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJh
c2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICBw
cm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisKKyAgICAg
ICAgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0
LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0dWJJ
bmZvKTsKQEAgLTg1Miw3ICs4MzMsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVp
bGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsK
ICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtpbmRG
b3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFp
biwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBj
dXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9mZnNldCwgCiAgICAgICAg
IHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAog
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0
LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAtODcx
LDcgKzg1Miw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAg
ICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0
dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAgY29uZGl0aW9u
U2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYgKzk3NCwyOCBAQCBzdGF0
aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShFeGVj
U3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29sIGVtaXRQdXRU
cmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYg
c3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2lu
ZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5T2Zmc2V0
IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwg
IXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFz
dHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAgb3B0aW1pemlu
ZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAg
IC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYgKEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYm
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNraXAgb3B0aW1p
emluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhh
cwpAQCAtMTAyMCwxNCArMTAwMywxNCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNp
dGlvblN0dWJBCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVu
dCBpdCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMw
OTE0CiAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4o
ZXhlYywgc3RydWN0dXJlKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Ly8gZW1pdFB1dFRyYW5zaXRpb25TdHViCisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7
CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzcygKKyAgICAgICAgICAgICp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0
YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAK
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNl
KTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0
dWJSb3V0aW5lOwpAQCAtMTA4MywxNyArMTA2Niw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG9sZFN0cnVjdHVyZSkp
OwogICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgb2xkU3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBz
dHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAg
IAotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3IgKFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkg
ewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEpOwot
ICAgICAgICB9Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAg
ICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwg
ZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAgICAgCkBAIC0xMjI4LDcgKzEyMDIsNyBAQCBzdGF0aWMgU3RydWN0dXJl
KiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRS
ZXVzZVJlZ2lzdGVycygpKQpAQCAtMTI1Niw4ICsxMjMwLDggQEAgc3RhdGljIFN0cnVjdHVyZSog
ZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93
bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAgICAgICAgIHN0
cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gb2xkU3RydWN0dXJlOworICAgIAorICAgIHJldHVybiB0
cnVlOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTEyODEsMTIgKzEyNTUs
MTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgIGlmIChz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAgICAg
ICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAK
LSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25T
dHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCk7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkKKyAgICAg
ICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJh
bnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBw
dXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0g
ICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTEyOTQsNyAr
MTI2Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZv
LmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJl
Y3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEyLDIwICsxMjg1LDIyIEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgJiYgc3R1
YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90
b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNl
VmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJv
dG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBp
ZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBl
Q2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
KyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkg
IT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlk
ZW50LmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAg
ICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNl
dCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zm
c2V0KCk7CisKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAg
bGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwog
CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4
ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90
b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVu
dCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LAogICAgICAgICAgICAg
b2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAgICAgICAgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLApAQCAtMTMzNiw3ICsx
MzExLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAg
ICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hl
YWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3Vz
dG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQs
IHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1
cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAog
ICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTM4MCwxNyArMTM1NSwxNiBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgICAgICBpZiAobGlz
dC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdp
bGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAotICAgICAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhl
Yywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7
Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKSAKKyAgICAgICAgICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhl
Yywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwg
b2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgc3R1YlJvdXRp
bmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygK
ICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAogICAgICAgICAgICAg
ICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAg
ICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAg
ICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwKICAgICAg
ICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICB9IGVsc2UgewpAQCAtMTQy
MywyMSArMTM5NywyNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlk
CiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNl
dHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxs
KSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAg
IFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9
IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAg
IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1
Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7Ci0gICAgICAgICAgICBp
ZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAKKyAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwK
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlv
blNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1
bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwg
cHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1
c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgIG9mZnNl
dCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9u
ZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhU
YXJnZXQoKSksCkBAIC0xNDQ4LDcgKzE0MjYsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpz
ZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAg
ICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0
ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUs
IHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUp
KTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRl
cigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVt
cCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBAIC0x
NDg3LDExICsxNDY1LDE3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4o
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25v
cmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90QmFzZSA9IHdhc0ZvdW5kID8gc2xvdC5zbG90QmFz
ZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVfdCBjb3VudCA9ICFmb3VuZFNsb3RCYXNlIHx8IGZv
dW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAgICAgICBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZv
ckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgZm91bmRTbG90QmFzZSwgaWRlbnQsIG9mZnNl
dElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQor
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAod2Fz
Rm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7CisgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0
eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgfQorICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CiAgICAgCiAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3Q7CkBAIC0xNTE2LDcgKzE1MDAsNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5UmVwYXRjaEluKAogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAg
fQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBl
Q2hhaW4oZXhlYyk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAg
ICAKICAgICB7CkBAIC0xNTQ3LDE4ICsxNTMwLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeVJlcGF0Y2hJbigKICAgICAgICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgpKQogICAgICAg
ICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNv
ZGVCbG9jaykpOwogCi0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAg
ICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5w
cm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0
cnVjdHVyZSA9IHByb3RvdHlwZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1
cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b1N0cnVj
dHVyZSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAg
ICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0g
ICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlk
ZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAgY3Vy
clN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQorICAgICAgICBjaGVja09iamVjdFBy
b3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAg
ICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkp
LCByZXN1bHRHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIK
LSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKLSNp
bmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1JbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xv
YmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUocHJvdG90eXBlKQotewotICAgIEFTU0VSVCht
X3Byb3RvdHlwZS5pc051bGwoKSB8fCBtX3Byb3RvdHlwZS5pc09iamVjdCgpKTsKLSAgICBpZiAo
cHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUq
IGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpKQotICAgICAgICBtX3Zl
Y3Rvci5hcHBlbmQoY3VycmVudCk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVu
ZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBoZWFkKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90
b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBp
ZiAobV9wcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKFN0cnVj
dHVyZSogY3VycmVudCA9IGFzT2JqZWN0KG1fcHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAg
ICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWlu
OjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUq
IGhlYWQsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlKQotICAgIDogbV9nbG9iYWxPYmpl
Y3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnBy
b3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgbV92ZWN0b3IuYXBwZW5k
KHByb3RvdHlwZVN0cnVjdHVyZSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVu
ZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwg
U3RydWN0dXJlQ2hhaW4qIGNoYWluKQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1
cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgY2hhaW4tPmhl
YWQoKVtpXTsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5n
ZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hh
aW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCB1bnNpZ25lZCBjb3VudCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29r
dXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7
Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCkK
LXsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjppc1N0aWxsVmFsaWQoKSBjb25z
dAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAoYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSktPnN0cnVjdHVyZSgpICE9IG1fdmVjdG9yW2ld
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0g
bV92ZWN0b3JbaV0tPnN0b3JlZFByb3RvdHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXRjaGVzKFN0cnVjdHVyZUNoYWlu
KiBjaGFpbikgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmVjdG9yW2ldICE9IGNoYWluLT5oZWFkKClb
aV0uZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChjaGFp
bi0+aGVhZCgpW21fdmVjdG9yLnNpemUoKV0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJbnRlcmNl
cHRTdG9yZVRvKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRD
b25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3JtYWxpemVkKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGFrZXNTbG93UGF0aElu
REZHRm9ySW1wdXJlUHJvcGVydHkoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotSlNPYmplY3QqIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRlcm1pbmFs
UHJvdG90eXBlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fdmVjdG9yLmlzRW1wdHkoKSk7Ci0g
ICAgaWYgKG1fdmVjdG9yLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gYXNPYmplY3QobV9w
cm90b3R5cGUpOwotICAgIHJldHVybiBhc09iamVjdChtX3ZlY3RvclttX3ZlY3Rvci5zaXplKCkg
LSAyXS0+c3RvcmVkUHJvdG90eXBlKCkpOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hh
aW46Om9wZXJhdG9yPT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0Ci0g
ICAgICAgICYmIG1fcHJvdG90eXBlID09IG90aGVyLm1fcHJvdG90eXBlCi0gICAgICAgICYmIG1f
dmVjdG9yID09IG90aGVyLm1fdmVjdG9yOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hh
aW46OmdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IpIGNv
bnN0Ci17Ci0gICAgSlNWYWx1ZSBjdXJyZW50UHJvdG90eXBlID0gbV9wcm90b3R5cGU7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpTT2JqZWN0
KiBjdXJyZW50T2JqZWN0ID0gYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSk7Ci0gICAgICAgIFN0
cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGF0KGkpOwotICAgICAgICB2ZWN0b3IuYXBwZW5k
KENvbnN0YW50U3RydWN0dXJlQ2hlY2soY3VycmVudE9iamVjdCwgY3VycmVudFN0cnVjdHVyZSkp
OwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0gY3VycmVudFN0cnVjdHVyZS0+cHJvdG90eXBl
Rm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmbV9nbG9iYWxPYmplY3QpOwotICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmbV9wcm90b3R5cGUpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKLSAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZFBvaW50ZXIoJm1fdmVjdG9yW2ldKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29u
dGV4dChvdXQsIDApOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgb3V0LnByaW50KAotICAgICAgICAiKGdsb2JhbCA9ICIsIFJhd1BvaW50ZXIobV9nbG9iYWxP
YmplY3QpLCAiLCBoZWFkID0gIiwKLSAgICAgICAgaW5Db250ZXh0KG1fcHJvdG90eXBlLCBjb250
ZXh0KSwgIiwgdmVjdG9yID0gWyIpOwotICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5w
cmludChjb21tYSwgcG9pbnRlckR1bXBJbkNvbnRleHQobV92ZWN0b3JbaV0sIGNvbnRleHQpKTsK
LSAgICBvdXQucHJpbnQoIl0pIik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faAotI2RlZmluZSBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluX2gKLQotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFz
cyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFZNOwotc3RydWN0IER1bXBDb250ZXh0OwotCi1jbGFz
cyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbj4gewotcHVibGljOgotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKik7
Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4pOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNp
Z25lZCBjb3VudCk7Ci0gICAgfkludGVuZGVkU3RydWN0dXJlQ2hhaW4oKTsKLSAgICAKLSAgICBi
b29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlcyhTdHJ1Y3R1cmVDaGFp
biopIGNvbnN0OwotICAgIGJvb2wgbWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKTsKLSAgICBib29sIGlzTm9ybWFsaXplZCgpOwotICAgIAotICAgIGJvb2wgdGFrZXNT
bG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKTsKLSAgICAKLSAgICBKU1ZhbHVlIHByb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9Ci0gICAgCi0gICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KLSAgICBTdHJ1Y3R1cmUqIGF0
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOyB9Ci0gICAgU3Ry
dWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9Ci0gICAgCi0gICAgSlNPYmplY3QqIHRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3Q7Ci0gICAg
Ci0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IubGFzdCgpOyB9
Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4m
KSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
biYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgZ2F0aGVyQ2hlY2tzKENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3ImKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIAotcHJpdmF0
ZToKLSAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7Ci0gICAgSlNWYWx1ZSBtX3By
b3RvdHlwZTsKLSAgICBWZWN0b3I8U3RydWN0dXJlKj4gbV92ZWN0b3I7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTg3
NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTQsNDggKzE5NCw2IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0Fk
ZChDYWxsRnJhbWUqIGMKIAogI2RlZmluZSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4gKHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCiAKLWlubGluZSBzaXplX3Qgbm9ybWFsaXplUHJv
dG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlPZmZzZXQmIHNsb3RPZmZzZXQpCi17Ci0gICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwotICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIAotICAgIHdoaWxlICgx
KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAgIHJldHVy
biBJbnZhbGlkUHJvdG90eXBlQ2hhaW47Ci0KLSAgICAgICAgY29uc3QgVHlwZUluZm8mIHR5cGVJ
bmZvID0gc3RydWN0dXJlLT50eXBlSW5mbygpOwotICAgICAgICBpZiAodHlwZUluZm8uaGFzSW1w
dXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5Rmly
ZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90b3R5cGVDaGFp
bjsKLSAgICAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIHYgPSBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUZvckxvb2t1cChjYWxsRnJhbWUpOwotCi0gICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHNs
b3RCYXNlIGluIHRoZSBiYXNlJ3MgcHJvdG90eXBlIGNoYWluLCB0aGVuIHRoZSBiYXNlCi0gICAg
ICAgIC8vIG11c3QgYmUgYSBwcm94eSBmb3IgYW5vdGhlciBvYmplY3QuCi0KLSAgICAgICAgaWYg
KHYuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmICghc2xvdEJhc2UpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFByb3RvdHlwZUNoYWluOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSlNDZWxsKiBjZWxsID0gdi5hc0NlbGwoKTsKLSAgICAgICAgc3Ry
dWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNj
ZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQKLSAg
ICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KLSAgICAgICAg
aWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+
ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGFzT2JqZWN0KGNlbGwpKTsKLSAgICAgICAg
ICAgIGlmIChzbG90QmFzZSA9PSBjZWxsKQotICAgICAgICAgICAgICAgIHNsb3RPZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lKTsgCi0gICAgICAgIH0KLSAgICAgICAgKytj
b3VudDsKLQotICAgICAgICBpZiAoc2xvdEJhc2UgPT0gY2VsbCkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIGNvdW50OwotfQotCiBpbmxpbmUgc2l6ZV90
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKENhbGxGcmFtZSogY2FsbEZyYW1lLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CkBAIC0yNTgsMjMg
KzIxNiw2IEBAIGlubGluZSBzaXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oQ2EKICAgICB9
CiB9CiAKLWlubGluZSBib29sIGlzUHJvdG90eXBlQ2hhaW5Ob3JtYWxpemVkKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIGZvciAoOzsp
IHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIGlmICh2LmlzTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgc3RydWN0dXJl
ID0gdi5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE9wZXJhdGlvbnNfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lv
biAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIGVsc2UKICAgICAgICAgbWF4VHJhbnNpdGlvbkxlbmd0
aCA9IHNfbWF4VHJhbnNpdGlvbkxlbmd0aDsKICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9u
Q291bnQoKSA+IG1heFRyYW5zaXRpb25MZW5ndGgpIHsKLSAgICAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsK
KyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmUgIT0gdHJhbnNpdGlvbik7CiAgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb247CkBA
IC00ODksMTEgKzQ4OSwxMSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdl
VHJhCiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRv
RGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlv
bmFyeUtpbmQga2luZCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlLaW5kIGtpbmQsIERl
ZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKICAg
ICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0g
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIFN0
cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwpAQCAtNTA3LDkgKzUwNyw5IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2kKICAgICByZXR1cm4gdHJh
bnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFy
eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3Ry
dWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBk
ZWZlcnJlZCkKIHsKLSAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCk7CisgICAgcmV0dXJuIHRvRGljdGlvbmFyeVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSwgQ2FjaGVkRGljdGlvbmFyeUtpbmQsIGRlZmVycmVkKTsKIH0K
IAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNzYxLDYgKzc2MSwxMCBAQCB2b2lk
IFN0cnVjdHVyZTo6YWxsb2NhdGVSYXJlRGF0YShWTSYgdm0pCiBXYXRjaHBvaW50U2V0KiBTdHJ1
Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFZNJiB2bSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIEFTU0VSVCghaXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSk7CisKKyAgICAvLyBJbiBzb21lIHBsYWNlcyBpdCdzIGNvbnZlbmllbnQgdG8gY2FsbCB0
aGlzIHdpdGggYW4gaW52YWxpZCBvZmZzZXQuIFNvLCB3ZSBkbyB0aGUgY2hlY2sgaGVyZS4KKyAg
ICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZt
KTsKQEAgLTc4MSwxMSArNzg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQcm9w
ZXJ0eUZvcgogewogICAgIEFTU0VSVCghaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAg
Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpOwotICAg
IGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCk7Cisg
ICAgc3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBnZXQodm0sIHByb3Bl
cnR5TmFtZSkpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2Vt
ZW50KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1
cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0
cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVj
dHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvQ2FjaGVh
YmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEZWZlcnJlZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBzZWFsVHJhbnNpdGlvbihW
TSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUq
IGZyZWV6ZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKQEAgLTE5NCw3ICsxOTQsMTkgQEAg
cHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFy
eUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KICAgICBib29sIGlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSA9PSBVbmNhY2hlZERp
Y3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZCAm
JiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKTsgfQorICAgIGJvb2wgcHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gZGljdGlv
bmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kCisgICAgICAgICAgICAmJiAhdHlw
ZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICAgICAgJiYgISh0eXBl
SW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mbygpLm5ld0lt
cHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBu
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvKCkuaGFz
SW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvKCkubmV3
SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCk7CisgICAgfQogCiAgICAgLy8gV2UgdXNl
IFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9yIHN0cnVjdHVyZXMgdGhhdCBtYXkgZ2V0IG5l
dyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBwcmV2ZW50CiAgICAgLy8gREZHIGZyb20gaW5s
aW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ugc3RydWN0dXJlcyBkb24ndCB0cmFuc2l0aW9u
IHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFwcGVhcnMuCkBAIC0yMDIsNyArMjE0LDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCiAg
ICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJ
bmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVG
bGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5p
c09iamVjdCgpOyB9CkBAIC01MjgsNyArNTQwLDcgQEAgcHJpdmF0ZToKICAgICAvLyB0byB1bmxv
Y2sgaXQuCiAgICAgdm9pZCBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihW
ZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRh
YmxlKiYpOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRp
b24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCk7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5k
LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsK
IAogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzNiw2ICs1
MzYsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29k
ZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25z
dCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAgIAogICAgIC8vIEZJWE1FOiBVc2UgQXRv
bWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257781</attachid>
            <date>2015-07-29 16:15:53 -0700</date>
            <delta_ts>2015-07-29 21:30:25 -0700</delta_ts>
            <desc>passing so many tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>298197</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2NiBA
QAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3Mu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpD
b21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9Db21wbGV4
R2V0U3RhdHVzLmg6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OkNvbXBsZXhHZXRT
dGF0dXMpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjp0YWtlc1Nsb3dQYXRoKToK
KyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6a2luZCk6CisgICAgICAgIChKU0M6OkNv
bXBsZXhHZXRTdGF0dXM6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6
OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmF0dHJpYnV0
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpzcGVjaWZpY1Zh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6Y2hhaW4pOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlh
bnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6R2V0
QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFu
dDo6YmFzZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yISk6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkVmFyaWFudDo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpjYWxsTGlua1N0YXR1
cyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojpjb25zdGFudENoZWNrcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNo
YWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0QmFycmllcik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRl
cik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdp
dGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmVx
dWl2YWxlbmNlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Om9wZXJh
dG9yISk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpvYmplY3QpOgor
ICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6Y29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dWlkKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVy
dHlDb25kaXRpb246Omhhc09mZnNldCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aGFzQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjph
dHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc1By
b3RvdHlwZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcm90b3R5
cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzUmVxdWlyZWRW
YWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpyZXF1aXJlZFZh
bHVlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc2gpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc0NvbXBhdGlibGVXaXRo
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OndhdGNoaW5nUmVxdWly
ZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoOjplcXVhbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvck9iamVjdCk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JDb25kaXRpb25LaW5kKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om51bWJlck9mQ29uZGl0aW9uc1dp
dGhLaW5kKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omhhc09u
ZVNsb3RCYXNlQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Om1lcmdlZFdpdGgpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KToKKyAgICAgICAgKEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Om5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQpOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxMaXZlKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyk6CisgICAgICAgIChKU0M6OmdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcyk6CisgICAgICAgIChKU0M6OmdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KToKKyAgICAgICAg
KiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9uRW1wdHkpOgor
ICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aXNWYWxpZCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojppc0VtcHR5KToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmVuZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpyZWxlYXNlUmF3UG9pbnRlcik6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIpOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6RGF0YTo6RGF0YSk6CisgICAgICAgICog
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5
SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+
R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnZpc2l0V2Vhayk6
CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOgorICAgICAgICAo
SlNDOjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJ
ZEFjY2Vzczo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y29uZGl0
aW9uU2V0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpjaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkdldEJ5SWRBY2Nlc3M6OmNoYWluQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2Rl
L1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
Ojpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjp2
aXNpdFdlYWspOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaDoK
KyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6UHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNj
ZXNzOjpzZXR0ZXIpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpuZXdTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpjb25kaXRpb25TZXQpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjpzdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRB
Y2Nlc3M6OmNoYWluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6Y2hh
aW5Db3VudCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJl
cXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlD
b25kaXRpb246OmlzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
Ojppc1dhdGNoYWJsZVdoZW5WYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
Ojppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJvcGVydHlDb25kaXRpb24pOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcik6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjplcXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp1aWQpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b246Om9mZnNldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpoYXNBdHRyaWJ1
dGVzKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmF0dHJpYnV0ZXMpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzUHJvdG90eXBlKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246OnByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjpoYXNSZXF1aXJlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OnJlcXVpcmVkVmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6
aGFzaCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzQ29tcGF0aWJsZVdpdGgpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246Ondh
dGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbkhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OnNldHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjptYWtl
c0NhbGxzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldp
dGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6OmtpbmQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9mZnNl
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpjYWxsTGlua1N0YXR1cyk6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojpjb25zdGFudENoZWNrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6flN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpwdXNoKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvOjp+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAg
KEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KToKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVu
Y2VBbmRBZGRXYXRjaHBvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQpOgorICAgICAgICAoSlND
OjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmNvZGVCbG9jayk6CisgICAgICAgIChK
U0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6c3R1YkluZm8pOgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0
V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBsYWNlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNldFNlZW4pOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aW5z
dGFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50OjpmaXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omtl
eSk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlBy
b3BlcnR5V2F0Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKiBkZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5z
dGFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50OjprZXkpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVj
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50
ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjplbWl0Q2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKToKKyAg
ICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
OjplbWl0R2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1Bo
YXNlOjphZGRCYXNlQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1Bo
YXNlOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjphZGRDaGVja3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVy
Vmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVk
VmFsdWVBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNo
cG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRX
YXRjaHBvaW50czo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hw
b2ludHM6OmNvbnNpZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6
OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphcmVT
dGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTZXRQb2ludGVyQWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZH
OjpTZXRQb2ludGVyQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpTZXRQb2ludGVyQWRhcHRvcjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5mZXJyZWRWYWx1ZUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6CisgICAgICAgIChK
U0M6OkRGRzo6SW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpERkc6OkFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjpoYXNCZWVuSW52YWxp
ZGF0ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFw
dG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6
CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVk
KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5D
b250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hl
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY1NldEFkYXB0b3I6OmFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY1NldEFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRl
ZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXppbHkpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6Y29udGFpbnMpOgorICAg
ICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaDoKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjp3YXRjaENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzU2Fm
ZVRvTG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxpdmVuZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5o
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppZGVudGlmaWVycyk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OndhdGNocG9pbnRzKToKKyAgICAgICAgKiBkZmcvREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhv
ZDo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNlOjpkdW1wSW5D
b250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcCk6
CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1l
dGhvZDo6R2V0QnlPZmZzZXRNZXRob2QpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0
TWV0aG9kOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6
OmxvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVBy
b3RvdHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6Om9wZXJhdG9y
ISk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OmtpbmQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpwcm90b3R5cGUpOgorICAgICAgICAoSlND
OjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok11
bHRpR2V0QnlPZmZzZXRDYXNlOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6TXVs
dGlHZXRCeU9mZnNldENhc2U6Om1ldGhvZCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2U6OnJ1bik6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRCeU9mZnNldCk6CisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZXBhdGNoQnlJZFNlbGZBY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMpOgorICAgICAgICAoSlNDOjpyZXBs
YWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUJ5SWRTdHViKToKKyAgICAgICAg
KEpTQzo6YWN0aW9uRm9yQ2VsbCk6CisgICAgICAgIChKU0M6OnRyeUJ1aWxkR2V0QnlJRExpc3Qp
OgorICAgICAgICAoSlNDOjplbWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjplbWl0
UHV0VHJhbnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5UmVwYXRj
aEluKToKKyAgICAgICAgKEpTQzo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpu
b3JtYWxpemVQcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluRm9yQ2hhaW5BY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppc1Byb3RvdHlw
ZUNoYWluTm9ybWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2lu
dFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9y
UmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5
UmVwbGFjZW1lbnQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICog
cnVudGltZS9WTS5oOgorCiAyMDE1LTA3LTI5ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTg3NTUwLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg3NDg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC05NywxMCArOTcsMTMgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29k
ZS9KdW1wVGFibGUuY3BwCiAgICAgYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
CiAgICAgYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKyAgICBieXRl
Y29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKKyAgICBieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAKICAgICBieXRlY29kZS9PcGNvZGUuY3BwCiAgICAgYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKICAgICBieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcAogICAgIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKKyAgICBi
eXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAogICAgIGJ5dGVjb2RlL1JlZHVj
ZVdoaXRlc3BhY2UuY3BwCkBAIC0xMjgsNiArMTMxLDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKIAogICAgIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCiAgICAgZGZnL0RGR0Fic3RyYWN0
VmFsdWUuY3BwCisgICAgZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHAKKyAgICBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAogICAg
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdBcmd1bWVu
dHNVdGlsaXRpZXMuY3BwCiAgICAgZGZnL0RGR0FyaXRoTW9kZS5jcHAKQEAgLTE5Niw2ICsyMDEs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdNaW5pZmllZEdyYXBo
LmNwcAogICAgIGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwCiAgICAgZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwCisgICAgZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAogICAgIGRm
Zy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAg
ICBkZmcvREZHTm9kZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvagkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRh
cmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5t
aWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVs
PSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNs
dWRlPSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+CkBAIC0zMzcsMTAgKzMzNywxMyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSnVtcFRhYmxlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRhcmdl
dHMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvcGVydHlD
b25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0
QnlJZFN0YXR1cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQ
dXRCeUlkVmFyaWFudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxSZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4KQEAgLTM2NSw2ICszNjgsOCBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJTY29wZS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcml0aE1vZGUuY3BwIiAvPgpAQCAtNDMzLDYgKzQz
OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50UmVtb3ZhbFBo
YXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFp
dmVEb21pbmF0b3JzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdO
YXR1cmFsTG9vcHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05v
ZGUuY3BwIiAvPgpAQCAtMTAwMSwxMSArMTAwNywxNCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExMSW50Q2FsbExpbmtJbmZvLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXE9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcT3BlcmFuZHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBv
bHltb3JwaGljR2V0QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRLaW5kLmgiIC8+CkBAIC0xMDQxLDYgKzEwNTAs
OCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SW50ZXJwcmV0
ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fi
c3RyYWN0VmFsdWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGphY2VuY3lMaXN0LmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWxsb2NhdG9yLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQW5hbHlzaXMuaCIgLz4KQEAgLTExMzMsNiArMTE0NCw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRJRC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05haXZlRG9taW5hdG9ycy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRBMUYwMERDOERF
NyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
Ki87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBBQzNBNTUgLyog
REZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5j
cHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0
aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29u
UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUREODRBMThB
OTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0y
OTMsOCArMjk1LDYgQEAKIAkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0Ey
QTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCN0UyQTE5QTExQjgwMDBEOUJDNTYgLyog
Q2FsbFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLzsgfTsK
IAkJMEYzQjdFMkIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNTE5QTExQjgwMDBEOUJD
NTYgLyogQ2FsbFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAg
Ki87IH07Ci0JCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNE
MEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUz
QTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEz
MUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTU4OCw2ICs1ODgsMTQgQEAKIAkJMEZEMkM5MjQxNkQwMUVFOTAw
Qzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgx
Q0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8q
IERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OworCQkwRkQz
RTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMDFCNjE4QUFGMDBD
ODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MDkx
QjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDAzMUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBGRDNFNDBBMUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5jcHAgKi87IH07CisJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNF
NDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBG
RDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDgxQjYxOEI2NjAwQzgw
RTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWlu
YXRvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovOyB9OwogCQkw
RkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAxNTRGQjRFQjAwOTgzRTcy
IC8qIERGR0RvbWluYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9OwpAQCAtNjk0
LDYgKzcwMiw4IEBACiAJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdFZGdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTFCMTZC
NjI3NzIwMDNGNjk2QiAvKiBERkdFZGdlLmNwcCAqLzsgfTsKIAkJMEZGMEYxOUYxNkI3MkExNzAw
NURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjExNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwICovOyB9OwogCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5
NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1bmN0aW9u
RXhlY3V0YWJsZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNl
dERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAq
LzsgfTsKKwkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYy
Q0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY0MjczMTE1OEVC
RDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1i
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjczMDE1OEVCRDQ0
MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZGNDI3NDAxNThF
QkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAvKiB1ZGlzODZf
ZGVjb2RlLmMgKi87IH07CkBAIC0xMzg5LDggKzEzOTksNiBAQAogCQlBNzg0QTI2NDExRDE2NjIy
MDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNr
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
Nzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1h
cERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZGNjQ3QTE4QzUyRTg1
MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwICovOyB9OwotCQlBNzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
NzhBOTc3NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZDMTc5NzM4Qjgw
MDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovOyB9OwogCQlBNzhBOTc3NTE3OTcz
OEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RDE3OTczOEI4MDA5REY3NDQgLyogREZH
RmFpbGVkRmluYWxpemVyLmggKi87IH07CiAJCUE3OEE5Nzc2MTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi87IH07
CkBAIC0xODU3LDYgKzE4NjUsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5k
ZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGV4
aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3
M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBwYXRo
ID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0UxQjU1
QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVy
SmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRp
c29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIxODlE
ODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJvZmls
ZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDQyLDggKzIwNTIsNiBAQAogCQkwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyog
REZHVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsaWRh
dGUuaDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFZhcmlhbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENv
bnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hl
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYx
QjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlE
MzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQ
b3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIzNDgsNiArMjM1NiwxNCBAQAogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0
dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgw
MEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0g
ZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTNGRjFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDsgcGF0aCA9
IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA1MUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUg
LyogUHJvcGVydHlDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJvcGVydHlDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZENTY1
MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGggPSBkZmcv
REZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
ODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRG9taW5hdG9ycy5jcHA7IHBhdGggPSBkZmcvREZH
RG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUQwMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQ5LDYgKzI0NjUsOCBAQAogCQkwRkVGQzlB
ODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHBh
dGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFi
bGVBbGxvY2F0aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjA1
NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBE
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHBhdGggPSBkZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkYyQ0Q1
QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaDsgcGF0aCA9
IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc2Fzc2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0Mjcz
MDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBk
aXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGNDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdWRpczg2X2RlY29kZS5jOyBwYXRoID0gZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZGlzODZfZGVjb2RlLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zMTY5LDggKzMxODcsNiBAQAogCQlBNzdGMTgyMDE2NDA4OEIyMDA2NDBBNDcgLyog
Q29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVDYWNoZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcg
LyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTAxLDggKzQ1MTcsNiBAQAogCQkJCUE3QThBRjJCMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1
QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAv
KiBJbnQzMkFycmF5LmggKi8sCi0JCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAotCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4
ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUxOTlDMDUwMDgw
NjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJQTEyQkJGRjMxQjA0NEE5ODAwNjY0
QjY5IC8qIEludGxPYmplY3QuY3BwICovLApAQCAtNDg4OSw2ICs0OTAzLDEwIEBACiAJCQkJQTcw
NEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgg
Ki8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3Bw
ICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
Ki8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZEM0U0MDAxQjYxOEFBRjAwQzgw
RTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovLAor
CQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQg
LyogREZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAv
KiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZH
QW5hbHlzaXMuaCAqLywKQEAgLTUwNDgsNiArNTA2Niw4IEBACiAJCQkJMEYyQkRDM0UxNTIyODAx
NzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAogCQkJCTBGOEYxNDMxMUFERjA5MDEw
MEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLywKIAkJCQkwRjhGMTQzMjFB
REYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oICovLAorCQkJCTBGRjJD
RDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8sCisJ
CQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmgg
Ki8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5j
cHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMu
Y3BwICovLApAQCAtNTMxOSw4ICs1MzM5LDYgQEAKIAkJCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVC
NEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQwMkQgLyogQ29t
cGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY2RkM3NEYxOTYxMTBBODAwRTFEMDJEIC8qIENv
bXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8sCi0JCQkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5
IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAx
MzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAogCQkJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAv
KiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAogCQkJCTBGQzcxMkREMTdDRDg3
NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKQEAgLTUzNTMs
NiArNTM3MSwxMCBAQAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJCTE0Q0E5NThDMTZBQjUw
RkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJCTBGRDNFNDAz
MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJ
MEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi8s
CisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5NjlBMDc5NDBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi8s
CiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCkBAIC01MzY0
LDYgKzUzODYsOCBAQAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFBy
ZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8q
IFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQ
dXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
SWRWYXJpYW50LmNwcCAqLywKQEAgLTU4NzQsNiArNTg5OCw3IEBACiAJCQkJQzI5ODFGRDkxN0JB
RUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0
eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2
IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzQzgyODE0
MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2
QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTI2LDYg
KzYxNTEsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21iaW5lZERvbWFp
bnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzg4MTg1NjgzMzUwMDJFRDY5MiAvKiBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0MzhB
MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAv
KiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOEMxODU2ODMz
NTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MTM1LDcgKzYxNjEsNiBAQAogCQkJCUE3QThBRjNCMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURC
NUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0Ex
N0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4ODUz
RkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRy
aW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0OCw2ICs2MTczLDcgQEAKIAkJCQlCQzE4QzQx
NTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQ0VGREUw
RjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJG
MTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC02MzYyLDcgKzYzODgsNiBAQAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMy
MDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2
N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAwOENFNzE4NzYzMUI2MDA5NTVDMjQg
LyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3
RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlE
QjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAt
NjQ0NSw5ICs2NDcwLDExIEBACiAJCQkJMkFBRDk2NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vy
c2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4
MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEy
MDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTI0LDYgKzY1NTEsNyBAQAogCQkJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJl
RGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzE1LDYgKzczNDMsNyBAQAogCQkJ
CTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNh
Y2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMg
LyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQw
RDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJ
VEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMjUsNiArNzM1NCw3IEBACiAJCQkJ
MEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50
cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERG
R011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1
QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTczNzYsNiArNzQwNiw3IEBACiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1
Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0
MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBF
MUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4
QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4
MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzM4Niw3ICs3NDE3LDYgQEAKIAkJCQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIg
LyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0
QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2
MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5
RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc0MDMsNiArNzQzMyw3IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAw
NEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1
RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdB
ODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03NDU4LDcgKzc0ODksNiBAQAogCQkJCUE1MDNGQTFCMTg4RTBGQjAw
MDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAxM0U3QjIgLyogSlNM
b2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0QwQkJDMTk0QTQxNDMwMEZDOUNGOSAvKiBD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUQ3MDlCMTZE
RTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE3
MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc2NTEsNiArNzY4MSw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMyRDAwMTQ1M0E3IC8q
IFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0
QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJGMEYyRDExNkJB
RUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjBE
MEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzY2MCw2ICs3NjkxLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyog
U3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMw
MDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4
MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRl
c3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1
NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw2IEBAIHZvaWQgQ29kZUJs
b2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIAogICAgICAgICAgICAg
U3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgICAgIFN0cnVjdHVyZSogcHJv
dG90eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9
IDA7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CkBAIC0z
NzAsMTEgKzM2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygK
ICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByb3RvdHlwZVN0cnVjdCIsIGJh
c2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAg
ICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICAgICAg
IG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7CiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CkBAIC0zODIsOSArMzc2
LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiKCIpOwogICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgImJh
c2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWxp
c3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBDaGFp
bihvdXQsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTQ1NiwxMCArNDUwLDggQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJ
ZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJldiIs
IHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksIGlk
ZW50KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAgICAgICAgICAgICAg
ZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5z
dHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlQ2hh
aW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAgICAgICAgICAg
IGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNl
dCkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJs
aXN0ID0gWyIpOwpAQCAtNDgzLDEwICs0NzUsOCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRQdXRC
eUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91
dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBT
dHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBDaGFpbihvdXQsIGFjY2Vzcy5jaGFpbigpLCBpZGVudCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vzcy5jb25kaXRp
b25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCIsICIsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJ1bmtub3duIik7CiAgICAgICAg
ICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHJl
dmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw2
IEBAIHZvaWQgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXIKICAgICAgICAgZGF0
YUxvZygiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiBvbiAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOwogCiAgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZk
ZXRhaWwpOwotCi0gICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgIHJlbW92ZSgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvbXBsZXhHZXRTdGF0dXMg
Q29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAotICAg
IHVuc2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgU3RydWN0
dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKICAgICAvLyBo
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0CkBAIC00
MCwzMiArMzksMzQgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdQog
ICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
OworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAogICAg
IENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJbmxpbmVhYmxl
OwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAgIHJlc3VsdC5t
X2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3VudCkpOworICAg
IGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJlc3VsdC5tX2No
YWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25kaXRpb25TZXQu
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4gc2tpcCgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWluLT50YWtlc1Ns
b3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQorCisgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mU2xvdEJhc2VzID0KKyAgICAgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldC5udW1iZXJP
ZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlNsb3RCYXNlcyA8PSAxKTsKKyAgICAgICAgaWYgKCFu
dW1iZXJPZlNsb3RCYXNlcykgeworICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIGRvbid0IHN1
cHBvcnQgbWlzc2VzLiBUaGF0J3MgYSBidW1tZXIuCisgICAgICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgogICAgICAgICAgICAg
cmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKKyAgICAgICAgfQorICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9u
KCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJl
c2VuY2UpOwogICAgICAgICAKLSAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRPYmplY3QgPSByZXN1
bHQubV9jaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICAgICAgU3RydWN0dXJlKiBjdXJy
ZW50U3RydWN0dXJlID0gcmVzdWx0Lm1fY2hhaW4tPmxhc3QoKTsKLSAgICAgICAgCi0gICAgICAg
IEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9iamVjdCk7Ci0gICAgICAgIAot
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKLSAgICB9CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJhc2Uub2Zm
c2V0KCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgIAogICAgIGlmICghaXNWYWxpZE9mZnNldChy
ZXN1bHQubV9vZmZzZXQpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5o
CShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29t
cGxleEdldFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIENv
bXBsZXhHZXRTdGF0dXNfaAogI2RlZmluZSBDb21wbGV4R2V0U3RhdHVzX2gKIAotI2luY2x1ZGUg
IkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5j
bHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9m
ZnNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAg
IENvbXBsZXhHZXRTdGF0dXMoKQogICAgICAgICA6IG1fa2luZChTaG91bGRTa2lwKQogICAgICAg
ICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9hdHRyaWJ1dGVzKFVJTlRf
TUFYKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05NywyMSArOTYsMTYgQEAgcHVibGljOgogICAg
IH0KICAgICAKICAgICBzdGF0aWMgQ29tcGxleEdldFN0YXR1cyBjb21wdXRlRm9yKAotICAgICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwog
ICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KLSAgICBKU1Zh
bHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljVmFsdWU7IH0KICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAg
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbi5n
ZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogcHJpdmF0ZToKICAg
ICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAgICB1bnNpZ25l
ZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7Ci0gICAgUmVmUHRy
PEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVjay5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNo
ZWNrLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi12
b2lkIENvbnN0YW50U3RydWN0dXJlQ2hlY2s6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KAotICAgICAg
ICAiKENoZWNrIGlmICIsIGluQ29udGV4dChKU1ZhbHVlKG1fY29uc3RhbnQpLCBjb250ZXh0KSwg
IiBoYXMgc3RydWN0dXJlICIsCi0gICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fc3RydWN0
dXJlLCBjb250ZXh0KSwgIikiKTsKLX0KLQotdm9pZCBDb25zdGFudFN0cnVjdHVyZUNoZWNrOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIG51
bGxwdHIpOwotfQotCi1TdHJ1Y3R1cmUqIHN0cnVjdHVyZUZvcihjb25zdCBDb25zdGFudFN0cnVj
dHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIEpTQ2VsbCogY29uc3RhbnQpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gdmVjdG9yLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAodmVjdG9yW2ld
LmNvbnN0YW50KCkgPT0gY29uc3RhbnQpCi0gICAgICAgICAgICByZXR1cm4gdmVjdG9yW2ldLnN0
cnVjdHVyZSgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotYm9vbCBhcmVDb21w
YXRpYmxlKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGEsIGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGIpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gYS5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBvdGhlclN0cnVjdHVyZSA9IHN0cnVj
dHVyZUZvcihiLCBhW2ldLmNvbnN0YW50KCkpOwotICAgICAgICBpZiAoIW90aGVyU3RydWN0dXJl
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhW2ldLnN0cnVjdHVyZSgpICE9
IG90aGVyU3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBtZXJnZUludG8oY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYgc291cmNlLCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB0YXJnZXQp
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc291cmNlLnNpemUoKTsgaS0tOykgewotICAgICAg
ICBpZiAoc3RydWN0dXJlRm9yKHRhcmdldCwgc291cmNlW2ldLmNvbnN0YW50KCkpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIHRhcmdldC5hcHBlbmQoc291cmNlW2ldKTsKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmgJKHJldmlzaW9u
IDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVj
dHVyZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENvbnN0YW50U3RydWN0
dXJlQ2hlY2tfaAotI2RlZmluZSBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLQotI2luY2x1ZGUg
IkR1bXBDb250ZXh0LmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
LmgiCi0jaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjayB7Ci1w
dWJsaWM6Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjaygpCi0gICAgICAgIDogbV9jb25zdGFu
dChudWxscHRyKQotICAgICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogY29uc3RhbnQsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IG1fY29uc3RhbnQoY29uc3RhbnQpCi0gICAgICAg
ICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCEhbV9jb25z
dGFudCA9PSAhIW1fc3RydWN0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhbV9jb25zdGFudDsgfQotICAgIAotICAgIEpTQ2VsbCogY29uc3Rh
bnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50OyB9Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQotICAgIAotICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0gICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIEpTQ2VsbCogbV9jb25z
dGFudDsKLSAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwotfTsKLQotdHlwZWRlZiBWZWN0b3I8
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjaywgMj4gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvcjsK
LQotU3RydWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1Zl
Y3RvciYgdmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KTsKLWJvb2wgYXJlQ29tcGF0aWJsZShjb25z
dCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiwgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYpOwotdm9pZCBtZXJnZUludG8oY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVj
a1ZlY3RvciYgc291cmNlLCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB0YXJnZXQpOwot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENvbnN0YW50U3RydWN0dXJlQ2hlY2tf
aAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY5LDgg
KzE2OSw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlzdEluZGV4KS5zdHJ1Y3R1
cmUoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4
R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW4oKSwK
LSAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluQ291bnQoKSwgdWlkKTsK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRleCkuY29uZGl0aW9u
U2V0KCksIHVpZCk7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhH
ZXRTdGF0dXMua2luZCgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNo
b3VsZFNraXA6CkBAIC0yMDYsOCArMjA1LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBs
ZXhHZXRTdGF0dXMuY2hhaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxM
aW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUp
LCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4
R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFu
dCh2YXJpYW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xv
d1BhdGhTdGF0ZSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM0LDIzICszNCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5
SWRWYXJpYW50KAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCisgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQogICAgIDogbV9zdHJ1Y3R1
cmVTZXQoc3RydWN0dXJlU2V0KQotICAgICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCisgICAg
LCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAg
ICAgLCBtX2NhbGxMaW5rU3RhdHVzKFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpCiB7CiAgICAg
aWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gaW52
YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghY2hhaW4pOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoY2hhaW4gJiYgY2hhaW4tPnNpemUoKSkgewotICAgICAgICBtX2FsdGVybmF0ZUJhc2UgPSBj
aGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyht
X2NvbnN0YW50Q2hlY2tzKTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc0VtcHR5KCkp
OwogICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRCeUlkVmFyaWFudDo6fkdl
dEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25z
dCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBAIEdldEJ5SWRWYXJpYW50
OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFyaWFu
dDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAgICBtX3N0cnVj
dHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29uc3RhbnRDaGVja3MgPSBv
dGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0
ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0Owog
ICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtT
dGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxM
aW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03MiwyOCArNjcsMTkgQEAg
R2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJldHVybiAqdGhp
czsKIH0KIAotU3RydWN0dXJlU2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZVNldCgpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1f
Y29uc3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3Ry
dWN0dXJlKTsKLSAgICByZXR1cm4gc3RydWN0dXJlOwotfQotCiBib29sIEdldEJ5SWRWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7Ci0gICAgaWYg
KG1fYWx0ZXJuYXRlQmFzZSAhPSBvdGhlci5tX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFhcmVDb21wYXRpYmxlKG1f
Y29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQorICAgIAorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldCA9CisgICAgICAgIG1fY29u
ZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgIGlmICghbWVy
Z2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNs
b3RCYXNlQ29uZGl0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBtZXJn
ZUludG8ob3RoZXIubV9jb25zdGFudENoZWNrcywgbV9jb25zdGFudENoZWNrcyk7CisgICAgbV9j
b25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWVy
Z2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEy
LDEwICs5OCw3IEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAg
ICB9CiAgICAgCiAgICAgb3V0LnByaW50KAotICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1
cmVTZXQoKSwgY29udGV4dCksICIsICIsCi0gICAgICAgICJbIiwgbGlzdER1bXBJbkNvbnRleHQo
bV9jb25zdGFudENoZWNrcywgY29udGV4dCksICJdIik7Ci0gICAgaWYgKG1fYWx0ZXJuYXRlQmFz
ZSkKLSAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNW
YWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CisgICAgICAgICI8IiwgaW5Db250ZXh0
KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0
LCBjb250ZXh0KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsKICAg
ICBpZiAobV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAq
bV9jYWxsTGlua1N0YXR1cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDkg
KzI3LDggQEAKICNkZWZpbmUgR2V0QnlJZFZhcmlhbnRfaAogCiAjaW5jbHVkZSAiQ2FsbExpbmtT
dGF0dXMuaCIKLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAi
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zm
c2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCiAKQEAgLTQzLDcgKzQyLDcgQEAgY2xh
c3MgR2V0QnlJZFZhcmlhbnQgewogcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50KAogICAgICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAotICAgICAgICBjb25zdCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxs
cHRyKTsKICAgICAKICAgICB+R2V0QnlJZFZhcmlhbnQoKTsKQEAgLTU1LDkgKzU0LDEwIEBAIHB1
YmxpYzoKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZVNldDsgfQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4g
bV9zdHJ1Y3R1cmVTZXQ7IH0KLSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9y
JiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0KLSAg
ICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRlQmFz
ZTsgfQotICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CisKKyAgICAvLyBU
aGUgcHJlc2VuY2Ugb2YgYSBjb25kaXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3Rv
dHlwZSBsb2FkLgorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAogICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExp
bmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1
cy5nZXQoKTsgfQogICAgIApAQCAtNzAsOCArNzAsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBHZXRCeUlkU3RhdHVzOwogICAgIAogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNl
dDsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0g
ICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVm
ZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFs
aWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCI8Iiwg
aW5Db250ZXh0KEpTVmFsdWUobV9vYmplY3QpLCBjb250ZXh0KSwgIjogIiwgaW5Db250ZXh0KG1f
Y29uZGl0aW9uLCBjb250ZXh0KSwgIj4iKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQo
b3V0LCBudWxscHRyKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0
dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlz
U3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0
aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHN0cnVjdHVyZUVu
c3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5z
dHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7
CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVy
biB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1
Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxp
ZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24u
aXNTdGlsbFZhbGlkKHN0cnVjdHVyZSwgbV9vYmplY3QpOworfQorCitib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKG1fb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSgpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlD
b25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
c3RydWN0dXJlLCBtX29iamVjdCwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAg
ICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0
cnVjdHVyZSgpLCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpp
c1dhdGNoYWJsZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246
OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0
aW9uLmlzV2F0Y2hhYmxlKHN0cnVjdHVyZSwgbV9vYmplY3QsIGVmZm9ydCk7Cit9CisKK2Jvb2wg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpX
YXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGUobV9vYmplY3Qt
PnN0cnVjdHVyZSgpLCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
Ojppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vYmplY3QpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxMaXZl
KCk7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNl
cyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoISp0
aGlzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdHJhY2tlZC5jaGVjayhtX29iamVjdCk7
CisgICAgbV9jb25kaXRpb24udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gK
KyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCisjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xh
c3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb24geworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uKCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlIHRva2VuKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV9j
b25kaXRpb24odG9rZW4pCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbihKU09iamVjdCogb2JqZWN0LCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2NvbmRpdGlvbihj
b25kaXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gcHJlc2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVj
dCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5t
X2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKHVp
ZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndy
aXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVy
KG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAg
ICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRp
dGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90
b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVj
dCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRC
YXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0
KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1f
Y29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJy
aWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAg
ICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93
bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICBy
ZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlw
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVp
dmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFs
ZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVu
Y2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChv
d25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAg
cmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRp
b247IH07CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0OyB9CisgICAgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9jb25kaXRpb247IH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBo
YXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNl
dCgpOyB9CisgICAgdW5zaWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRp
dGlvbigpLmhhc0F0dHJpYnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAg
SlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlw
ZSgpOyB9CisgICAgYm9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkuaGFzUmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6
aGFzaChtX29iamVjdCkgKyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAg
ICAgICAgICYmIG1fY29uZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KTsKKyAgICB9CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYg
dGhleSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IK
KyAgICAvLyBkaWZmZXJlbnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZl
IHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFt
cGxlIGlmIHRoZXJlIGlzIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29t
ZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3
aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUg
dHdvLiBUaGlzCisgICAgLy8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlv
bnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3Qv
dWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUg
d2l0aCBhbnl0aGluZy4KKyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8
fCAhb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhp
cyA9PSBvdGhlciB8fCB1aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5v
YmplY3QoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0
aG9kcyBjYW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0
aGUKKyAgICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBj
b25jdXJyZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0
YWtlIGFuIGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIg
dG8gb3B0aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlk
YXRlZCAoaS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYg
dGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUg
aW50ZXJjZXB0ZWQuIFZhbGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50
cyBvbiB0aGUgb2JqZWN0LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBz
dHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBw
cm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNT
dGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wg
dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25z
dDsKKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBj
b25zdDsKKworICAgIC8vIENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkg
Y29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0
cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRo
aXMgbWF5IHJldHVybiB0cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJl
cyBzb21lIHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcg
dGhlCisgICAgLy8gc3RydWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0
aW9uIGhvbGRzIGJ5IHVzaW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVj
dHVyZUVuc3VyZXNWYWxpZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSop
IGNvbnN0OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hv
cnRoYW5kIGZvciBjb25kaXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29s
IHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNl
dHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFu
ZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0
Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVy
ZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJs
ZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5n
ZXMpIGNvbnN0OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5k
IHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAv
LyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAg
ICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0
eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBi
b29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5
RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAor
ICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVz
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGlu
Z1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7
CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZl
ZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsK
KyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNl
cyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9w
ZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9v
bCBlcXVhbCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0g
YjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAg
dHlwZWRlZiBKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3Qp
IGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3Qp
CisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0
UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25k
aXRpb246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtp
bmQoKSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAg
cmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK3Vuc2lnbmVkIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNv
bmRpdGlvbjo6S2luZCBraW5kKSBjb25zdAoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Cisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMp
IHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkKKyAgICAgICAgICAgIHJl
c3VsdCsrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVz
ZW5jZSkgPT0gMTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWduZWQgbnVtRm91bmQgPSAwOworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7Cisg
ICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOworICAgICAgICAgICAgbnVtRm91
bmQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChudW1Gb3VuZCA9PSAx
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bWVyZ2VkV2l0aCgKKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkg
fHwgIW90aGVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKworICAgIFZl
Y3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gcmVzdWx0OworICAgIAorICAgIGlmICghaXNF
bXB0eSgpKQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKG1fZGF0YS0+dmVjdG9yKTsKKyAg
ICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBuZXdDb25kaXRpb24g
OiBvdGhlcikgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBl
eGlzdGluZ0NvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgICAgICBpZiAobmV3Q29uZGl0aW9u
ID09IGV4aXN0aW5nQ29uZGl0aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlv
bikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBu
b25FbXB0eShyZXN1bHQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpz
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24u
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFs
aWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7
CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRo
aXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGls
bExpdmUoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNW
YWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAg
ICAgICAgb3V0LnByaW50KGxpc3REdW1wSW5Db250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0
KSk7CisgICAgb3V0LnByaW50KCJdIik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0
KG91dCwgbnVsbHB0cik7Cit9CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNl
OworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvbigKKyAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbktpbmQpCit7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHN3aXRjaCAo
Y29uZGl0aW9uS2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7
CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAg
ICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb246OnByZXNlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRl
cyk7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6IHsKKyAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKAorICAgICAgICAgICAg
dm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkpOworICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNl
T2ZTZXR0ZXI6IHsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNl
bmNlT2ZTZXR0ZXIoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3Qt
PnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSk7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgIH0KK30KKworZW51bSBDb25jdXJyZW5j
eSB7CisgICAgTWFpblRocmVhZCwKKyAgICBDb25jdXJyZW50Cit9OworT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlD
b25kaXRpb246OktpbmQga2luZCwKKyAgICBDb25jdXJyZW5jeSBjb25jdXJyZW5jeSA9IE1haW5U
aHJlYWQpCit7CisgICAgQVNTRVJUKCEhcHJvdG90eXBlID09IChraW5kID09IFByb3BlcnR5Q29u
ZGl0aW9uOjpQcmVzZW5jZSkpOworICAgIAorICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbj4gY29uZGl0aW9uczsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgc3RydWN0dXJlOiAiLCBwb2lu
dGVyRHVtcChzdHJ1Y3R1cmUpLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzUHJveHkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiSXQncyBhIHByb3h5LCBzbyBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICBy
ZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9y
TG9va3VwKGdsb2JhbE9iamVjdCk7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvdG90eXBlKSB7CisgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlYWNoZWQgZW5kIHVwIHBy
b3RvdHlwZSBjaGFpbiBhcyBleHBlY3RlZCwgZG9uZS5cbiIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiVW5leHBlY3RlZGx5IHJlYWNoZWQgZW5kIG9mIHByb3RvdHlwZSBjaGFp
biwgc28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisgICAgICAgIHN0cnVjdHVy
ZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHdl
J3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQgdGhh
dCBpdCBzaG91bGQgbm90IGJlCisgICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5Lgor
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYg
KGNvbmN1cnJlbmN5ID09IE1haW5UaHJlYWQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5m
bGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJDYW5ub3QgZmxhdHRlbiBkaWN0aW9uYXJ5IHdoZW4gbm90IG9uIG1haW4gdGhyZWFkLCBz
byBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCB0aGlzQ29uZGl0aW9uS2luZDsK
KyAgICAgICAgaWYgKGtpbmQgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlICYmIG9iamVj
dCAhPSBwcm90b3R5cGUpCisgICAgICAgICAgICB0aGlzQ29uZGl0aW9uS2luZCA9IFByb3BlcnR5
Q29uZGl0aW9uOjpBYnNlbmNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzQ29uZGl0
aW9uS2luZCA9IGtpbmQ7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBuZXdDb25kaXRpb24gPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgdGhpc0NvbmRpdGlvbktpbmQpOworICAgICAgICBpZiAoIW5ld0NvbmRp
dGlvbiB8fCAhbmV3Q29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBj
cmVhdGUgY29uZGl0aW9uIG9yIGNvbmRpdGlvbiBjYW5ub3QgYmUgZW5zdXJlZCBieSBzdHJ1Y3R1
cmUsIHNvIGludmFsaWQ6ICIsCisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmRpdGlvbiwgIlxu
Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uZGl0
aW9ucy5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvYmplY3Qg
PT0gcHJvdG90eXBlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJSZWFjaGVkIGRlc2lyZWQgcHJvdG90eXBlLCBkb25lLlxuIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBWYWxpZGF0ZSB0aGUg
cmVzdWx0LgorICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246
OlByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIHByZXNlbmNlQ291bnQgPSAwOworICAgICAg
ICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBjb25kaXRp
b25zKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICAgICAgICAgIHBy
ZXNlbmNlQ291bnQrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cHJlc2VuY2VDb3VudCA9PSAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6
IHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
IDogY29uZGl0aW9ucykKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5raW5k
KCkgPT0ga2luZCk7CisgICAgfSB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiUmV0dXJuaW5nIGNvbmRpdGlvbnM6ICIsIGxpc3REdW1wKGNvbmRpdGlvbnMpLCAiXG4iKTsK
KyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlv
bnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9u
cygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRT
dHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OkFic2Vu
Y2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlk
LAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyKTsKK30KKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAg
ICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJl
LCBwcm90b3R5cGUsIHVpZCwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsK
K30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBu
dWxscHRyLCBnbG9iYWxPYmplY3QsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVy
dHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlciwKKyAgICAgICAgQ29uY3VycmVudCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisK
KyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJvcGVydHkgY29uZGl0
aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0aW9uYWwgY29uZGl0
aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFjY2VzcyB0byBiZSB2
YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmVzdGluZyBzdGF0
ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRpdGlvbnMgdGhhdCBu
ZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBpcyBuZXZlciB2YWxp
ZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25z
IHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkgeyB9CisgICAg
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFsaWQoKQorICAgIHsK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBub25F
bXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2ZWN0b3IpCisgICAg
eworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYo
bmV3IERhdGEoKSk7CisgICAgICAgIHJlc3VsdC5tX2RhdGEtPnZlY3RvciA9IHZlY3RvcjsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhIHx8ICFtX2RhdGEtPnZlY3Rvci5pc0Vt
cHR5KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fZGF0YTsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiogaXRlcmF0b3I7CisgICAgCisgICAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmJlZ2luKCk7CisgICAgfQor
ICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRhLT52ZWN0b3Iu
ZW5kKCk7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvck9iamVj
dChKU09iamVjdCogb2JqZWN0KSBjb25zdDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBm
b3JDb25kaXRpb25LaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kKSBjb25zdDsKKworICAgIHVu
c2lnbmVkIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpLaW5k
KSBjb25zdDsKKworICAgIGJvb2wgaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAg
ICAKKyAgICAvLyBJZiB0aGlzIGlzIGEgY29uZGl0aW9uIHNldCBmb3IgYSBwcm90b3R5cGUgaGl0
LCB0aGVuIHRoaXMgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlCisgICAgLy8gY29uZGl0aW9u
IG9uIHRoZSBwcm90b3R5cGUgaXRzZWxmLiBUaGlzIGFsbG93cyB5b3UgdG8gZ2V0IHRoZSBvYmpl
Y3QsIG9mZnNldCwgYW5kCisgICAgLy8gYXR0cmlidXRlcyBmb3IgdGhlIHByb3RvdHlwZS4gVGhp
cyB3aWxsIFJFTEVBU0VfQVNTRVJUIHRoYXQgdGhlcmUgaXMgZXhhY3RseSBvbmUgUHJlc2VuY2UK
KyAgICAvLyBpbiB0aGUgc2V0LCBhbmQgaXQgd2lsbCByZXR1cm4gdGhhdCBwcmVzZW5jZS4KKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0OworICAg
IAorICAgIC8vIEF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3IGNvbmRpdGlvbiBzZXQgYnkgbWVyZ2lu
ZyB0aGlzIG9uZSB3aXRoIHRoZSBvdGhlciBvbmUuIFRoaXMgd2lsbAorICAgIC8vIGZhaWwgaWYg
YW55IG9mIHRoZSBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyLiBX
aGVuIGlmIGZhaWxzLCBpdCByZXR1cm5zCisgICAgLy8gaW52YWxpZCgpLgorICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZFdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIG90aGVyKSBjb25zdDsKKyAgICAKKyAgICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eSgpIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAKKyAgICBib29sIG5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxsTGl2ZSgpIGNv
bnN0OworICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisg
ICAgLy8gSGVscGVycyBmb3IgdXNpbmcgdGhpcyBpbiBhIHVuaW9uLgorICAgIHZvaWQqIHJlbGVh
c2VSYXdQb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4o
bV9kYXRhLmxlYWtSZWYoKSk7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBhZG9wdFJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0
YSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBmcm9tUmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gc3Rh
dGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gSW50ZXJuYWxseSwgdGhpcyByZXByZXNlbnRzIElu
dmFsaWQgdXNpbmcgYSBwb2ludGVyIHRvIGEgRGF0YSB0aGF0IGhhcyBhbiBlbXB0eSB2ZWN0b3Iu
CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXBhY3QgYnkg
aGF2aW5nIGl0IGludGVybmFsbHkgdXNlIGEgdmVjdG9yIHRoYXQganVzdCBoYXMKKyAgICAvLyB0
aGUgbm9uLXVpZCBwb3J0aW9uIG9mIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBhbmQgdGhlbiBy
ZXF1aXJpbmcgdGhhdCB0aGUgY2FsbGVycyBvZiBhbGwKKyAgICAvLyBvZiB0aGUgQVBJcyBzdXBw
bHkgdGhlIHVpZC4KKyAgICAKKyAgICBjbGFzcyBEYXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPERhdGE+IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YSk7CisgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAg
ICAgIERhdGEoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbj4gdmVjdG9yOworICAgIH07CisgICAgCisgICAgUmVmUHRyPERhdGE+IG1fZGF0YTsK
K307CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5TWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3Mo
CisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK09i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJ
ZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY2hh
aW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKICAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9j
aGFpbkNvdW50KGNoYWluQ291bnQpCiAgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVj
dHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKICAgICAsIG1fc3R1YlJv
dXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBtX2NoYWluLnNl
dCh2bSwgb3duZXIsIGNoYWluKTsKIH0KIAogR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3Mo
KQpAQCAtNzEsNyArNjksNyBAQCBib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNo
QnVmCiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVy
ZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9jaGFpbiAmJiAhSGVh
cDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVT
dGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGlu
ZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtNTMsMTMgKzU0LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICBHZXRCeUlkQWNjZXNz
KCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoMCkK
ICAgICB7CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgIFZNJiwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVj
dHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9IDAsIHVuc2lnbmVkIGNoYWluQ291bnQg
PSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgfkdldEJ5SWRBY2Nlc3MoKTsKICAg
ICAKQEAgLTcyLDggKzcyLDcgQEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAKLSAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9Ci0gICAg
dW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW5Db3VudDsgfQorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7
IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHVi
Um91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtOTEsOSArOTAsOCBAQCBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAg
dW5zaWduZWQgbV9jaGFpbkNvdW50OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3Ry
dWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsgLy8gRklYTUUgd2hhdCBh
Ym91dCBiYXJyaWVycz8KICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgUHV0QnlJZEFjY2VzcyBQdXRC
eUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlv
bjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0
QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQubV9uZXdT
dHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUp
OwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLmNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigKKyAgICAgICAgICAgIHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKICAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIApAQCAtNjQsNiArNjUsOSBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21T
dHJ1Y3R1CiAKIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImIHJl
cGF0Y2hCdWZmZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExp
dmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3Ry
dWN0dXJlLmdldCgpKSkKQEAgLTc0LDE1ICs3OCwxMSBAQCBib29sIFB1dEJ5SWRBY2Nlc3M6OnZp
c2l0V2VhayhSZXBhdGNoQnVmCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldHRl
cjoKICAgICBjYXNlIEN1c3RvbVNldHRlcjoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCht
X29sZFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNp
b24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisj
aW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNvZGUu
aCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCkBA
IC01Myw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAg
ICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAg
ICAgewogICAgIH0KICAgICAKQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEpT
Q2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAor
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAog
ICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAg
ICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJh
bnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9s
ZFN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBj
aGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAg
ICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJv
dXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1LDggKzk1
LDcgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAg
IFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0LDEwICsx
MDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICBy
ZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAg
cmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewotICAgICAg
ICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAgICAgICAg
cmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmVz
dWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0
b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0g
c3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAgIH0KICAg
ICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAg
IHJldHVybiBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBjaGFpbkNv
dW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9t
KCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBj
b25zdAogICAgIHsKQEAgLTE3OCw4ICsxNjQsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5cGUg
bV90eXBlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7Cisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBib29sIHZl
cmJvc2UgPSBmYWxzZTsKKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7Cisg
ICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJp
bnQoIiBhdCAiLCBvZmZzZXQoKSwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgYXR0cmlidXRlcygpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNl
dHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpT
VmFsdWUocHJvdG90eXBlKCkpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRoICIsIGluQ29udGV4dChyZXF1
aXJlZFZhbHVlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51
bGxwdHIpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNP
YmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxv
ZygKKyAgICAgICAgICAgICJEZXRlcm1pbmluZyB2YWxpZGl0eSBvZiAiLCAqdGhpcywgIiB3aXRo
IHN0cnVjdHVyZSAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUpLCAiIGFuZCBiYXNlICIsCisgICAg
ICAgICAgICBKU1ZhbHVlKGJhc2UpLCAiIGFzc3VtaW5nIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50cyBhcmUgc2V0LlxuIik7CisgICAgfQorICAgIAorICAgIGlmICghKnRoaXMpIHsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgdW5z
ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7CisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiSW52YWxpZCBiZWNhdXNlIGFjY2Vzc2VzIGFy
ZSBub3QgY2FjaGVhYmxlLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOiB7CisgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50
T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0
dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJl
Y2F1c2Ugd2UgbmVlZCBvZmZzZXQsIGF0dHJpYnV0ZXMgdG8gYmUgIiwgb2Zmc2V0KCksICIsICIs
IGF0dHJpYnV0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgIiBidXQgdGhleSBhcmUgIiwgY3Vy
cmVudE9mZnNldCwgIiwgIiwgY3VycmVudEF0dHJpYnV0ZXMsICJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgaXQncyBhIGRpY3Rpb25hcnku
XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQoKSk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQg
YmVjYXVzZSB0aGUgcHJvcGVydHkgZXhpc3RzIGF0IG9mZnNldDogIiwgY3VycmVudE9mZnNldCwg
IlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpICE9IHByb3RvdHlw
ZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFM
b2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2UgdGhlIHByb3RvdHlwZSBp
cyAiLCBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCAiIGV2ZW4gdGhvdWdoICIKKyAgICAg
ICAgICAgICAgICAgICAgIml0IHNob3VsZCBoYXZlIGJlZW4gIiwgSlNWYWx1ZShwcm90b3R5cGUo
KSksICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
Y2FzZSBBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIkludmFsaWQgYmVjYXVzZSBpdCdzIGEgZGljdGlvbmFyeS5cbiIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAg
ICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlm
IChjdXJyZW50QXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yKSkgeworICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHdlIGV4cGVjdGVkIG5v
dCB0byBoYXZlIGEgc2V0dGVyLCBidXQgd2UgaGF2ZSBvbmUgYXQgb2Zmc2V0ICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0LCAiIHdpdGggYXR0cmlidXRlcyAiLCBjdXJy
ZW50QXR0cmlidXRlcywgIlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90eXBlKCkp
IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB0aGUgcHJvdG90eXBlIGlzICIs
IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksICIgZXZlbiB0aG91Z2ggIgorICAgICAgICAg
ICAgICAgICAgICAiaXQgc2hvdWxkIGhhdmUgYmVlbiAiLCBKU1ZhbHVlKHByb3RvdHlwZSgpKSwg
IlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJl
KCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhl
CisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1
c2Ugd2UgZG9uJ3QgaGF2ZSBhIGJhc2Ugb3IgdGhlIGJhc2UgaGFzIHRoZSB3cm9uZyBzdHJ1Y3R1
cmU6ICIsCisgICAgICAgICAgICAgICAgICAgIFJhd1BvaW50ZXIoYmFzZSksICJcbiIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByYWN5LCBhbmQgbWF5YmUgbW9y
ZSByaXNreSB0aGFuIHdlIHdhbnQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKKyAgICAgICAgCisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAg
ICAgIEpTVmFsdWUgY3VycmVudFZhbHVlID0gYmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRPZmZzZXQp
OworICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IHJlcXVpcmVkVmFsdWUoKSkgeworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHRoZSB2YWx1ZSBpcyAiLCBjdXJyZW50VmFsdWUs
ICIgYnV0IHdlIHJlcXVpcmUgIiwgcmVxdWlyZWRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAg
ICAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2Fz
ZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNh
biBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwgYW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRv
dyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24gdGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBh
ZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAgLy8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZl
Y3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1wdXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIg
c2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAg
Y2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFs
ZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZhcmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0
cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVzIHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQg
dGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAg
ICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFi
bGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UKKyAgICAgICAgLy8gc2hvdWxkbid0IGhhdmUg
YSBUT0NUT1UgcmFjZSBlaXRoZXIuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCAhPSBp
bnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAg
ICAgICAgc3dpdGNoIChlZmZvcnQpIHsKKyAgICAgICAgY2FzZSBNYWtlTm9DaGFuZ2VzOgorICAg
ICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNl
dChvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5zdXJlV2F0Y2hh
YmlsaXR5OgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVJlcGxh
Y2VtZW50V2F0Y2hwb2ludFNldCgKKyAgICAgICAgICAgICAgICAqSGVhcDo6aGVhcChzdHJ1Y3R1
cmUpLT52bSgpLCBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmICghc2V0IHx8ICFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVy
biBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUs
IGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0
KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0
KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQorICAg
ICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jv
b2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFz
UHJvdG90eXBlKCkgJiYgcHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVl
KCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUo
KS5pc0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFz
Q2VsbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJh
Y2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgp
KQorICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFz
UmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQg
Y29uZGl0aW9uKQoreworICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlOgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBv
dXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVu
Y2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5l
IFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVu
Y2VzOworCitjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5k
IHsKKyAgICAgICAgUHJlc2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VP
ZlNldHRlciwKKyAgICAgICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBv
biB0aGlzIHdpbGwgYmUgYSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0
dXJlIHRyYW5zaXRpb25zLCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBv
biB0aGUgbmV3IHN0cnVjdHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9u
KCkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkK
KyAgICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisg
ICAgUHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAg
ICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgewor
ICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAg
ICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
dWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAgIHJl
c3VsdC51LnByZXNlbmNlLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJlc2Vu
Y2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAg
Vk0mLCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcHJlc2VuY2VX
aXRob3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAg
ICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90
b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBw
cm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJz
ZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlv
biByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEFic2VuY2VPZlNldHRlcjsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5
cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNldHRlcldpdGhvdXRC
YXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5
Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRp
dGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQudS5lcXVpdmFsZW5jZS52YWx1
ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgICAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2UoCisg
ICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSAmJiBvd25lcikK
KyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJu
IGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAgfQorICAgICAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0g
UHJlc2VuY2U7IH07CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9
CisgICAgCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1f
a2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHJl
c2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJl
dHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBdHRyaWJ1dGVzKCkpOwor
ICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAgICBi
b29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgKG1fa2luZCA9PSBB
YnNlbmNlIHx8IG1fa2luZCA9PSBBYnNlbmNlT2ZTZXR0ZXIpOyB9CisgICAgSlNPYmplY3QqIHBy
b3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUHJvdG90eXBlKCkpOwor
ICAgICAgICByZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0g
RXF1aXZhbGVuY2U7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGhhc1JlcXVpcmVkVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjpkZWNvZGUodS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8VW5pcXVl
ZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5k
KTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVzZW5jZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAgICAgICAgIHJlc3Vs
dCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgICAg
IHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFic2VuY2UucHJvdG90
eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAg
ICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVxdWl2YWxlbmNl
LnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eUNv
bmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91aWQgIT0gb3RoZXIu
bV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tpbmQgIT0g
b3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUu
cHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0CisgICAgICAgICAgICAg
ICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2VuY2UuYXR0cmlidXRl
czsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJzZW5j
ZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgICAgICByZXR1
cm4gdS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNlLnZhbHVlOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBBYnNl
bmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBp
ZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcy4g
SWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0byBy
ZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzCisgICAgLy8gYSBQ
cmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3YW50
IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGluIG90aGVyIGNhc2Vz
IHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRoaXMgd2lsbCBhbHNv
IHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5jZSBh
bmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQKKyAgICAv
LyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcuCisgICAgYm9vbCBp
c0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkgIT0gb3RoZXIudWlk
KCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJl
IGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4KKyAgICBib29s
IGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSos
IEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZh
bGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgp
IHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUg
Y29uZGl0aW9uIGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdpdmVuIG9iamVjdCBh
bmQgc3RydWN0dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlm
IHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlCisgICAg
Ly8gY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29uZGl0aW9uIG9uIGFu
IG9iamVjdCB0aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRpZXMuIElmIHRoZSBv
YmplY3QgaXMgbm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBpbmRpY2F0ZXMgdGhh
dCBjaGVja2luZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVuIHN0cnVjdHVyZSBn
dWFyYW50ZWVzIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9iamVjdCBpcworICAg
IC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBvdGhlciB3YXRjaHBv
aW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBjb25kaXRpb24gaW4g
YWRkaXRpb24gdG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8v
IEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJsZSwgYnV0IGNvdWxk
IGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFwcHJvcHJpYXRlIHdh
dGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50cyBhcmUgZW5hYmxl
ZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24gdGhlIHByb3BlcnR5
IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNwYWNlIGZvcgorICAg
IC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQgbmV2ZXIgZ2V0IHZl
cnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFibGUgd2F0Y2hpbmcs
IHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAg
ZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0
LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2YgYW55IFN0cnVjdHVy
ZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYgdGhlIHByb3BlcnR5
IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1ha2UKKyAgICAgICAg
Ly8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5nIGZyb20gYSBKSVQg
dGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJlZmVyYWJsZSB3aGVu
IGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24gZm9yIHRoZSBmaXJz
dCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2ludCBmaXJlIHRoYXQg
Y2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBhCisgICAgICAgIC8v
IHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGluZyBpbXBsaWVzIHRo
YXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0IHRvIG1ha2UgaXQg
cHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5nIHdhdGNoZWQgbWF5
IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVmZXIgdG8gb25seSBh
c3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJlZW4KKyAgICAgICAg
Ly8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAgICBNYWtlTm9DaGFu
Z2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0byBlbnN1cmUgdGhh
dCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhhcyBubworICAgICAg
ICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVzdCBtZWFucyB0aGF0
IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyByZXBsYWNlbWVudCB3
YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxlZCBhbHJlYWR5LiBE
byBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywgc2luY2UgdGhlIGFj
dCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgICAgIEVu
c3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0
J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBh
IHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBvc3Np
Ymx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNXYXRjaGFibGVB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNP
YmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2Vz
KSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBh
bmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAg
IC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKAor
ICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIsIFdhdGNoYWJpbGl0
eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdS
ZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9mIG91ciBjb25kaXRp
b25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1Jl
cXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxp
dmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRh
dGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBXYXRjaGFiaWxpdHlF
ZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIEtpbmQg
bV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAg
ICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBKU09iamVjdCog
cHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFsZW5jZTsKKyAgICB9
IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0IFByb3BlcnR5Q29u
ZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1l
c3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZh
dWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvcGVydHlDb25k
aXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4g
c3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg3
NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwyMiBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUu
b3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
X291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBpbnN0
cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4g
PSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAgIEFTU0VSVChuZXdT
dHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZv
cm1hdGlvbik7CiAgICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGludGVu
ZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENoYWluID0gYWRvcHRS
ZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBj
aGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bj
b2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291
dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAg
ICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9
CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBpbnRlbmRlZENoYWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVybiBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBvZmZzZXQpOwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsxNjgs
MTQgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJh
bnNpdGlvbi5jaGFpbikgewotICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
IHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAot
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQ
b2ludGVyKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVz
RW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlk
VHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgY2hhaW4uZ2V0KCks
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0K
QEAgLTIxOSwxNSArMjIwLDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclMKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0
ZSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWlu
OwotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAg
ICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBh
Y2Nlc3MuY2hhaW4oKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYWluLT5pc1N0aWxs
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZh
cmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAg
YWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNoYWluLmdldCgp
LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFj
Y2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM1LDcgKzIz
Miw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRT
dGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGFjY2Vzcy5jaGFpbigpLCBhY2Nlc3MuY2hhaW5D
b3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25k
aXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMjUzLDcgKzI1MCw3IEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxF
eGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVz
LmNoYWluKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRT
dGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAg
ICAgICB9IH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2OCwyMiArMzY1LDExIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAotICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbj4gY2hhaW47CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgY2hhaW4g
PSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSkpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4g
aGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KLSAgICAg
ICAgICAgIGlmIChjaGFpbi0+bWF5SW50ZXJjZXB0U3RvcmVUbyh1aWQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAKLSAgICAg
ICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXplZCAo
aS5lLiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJpZXMpCi0gICAgICAgICAgICAvLyB0
aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9uYXJ5IGNhc2Ugd291bGQgb25seSBoYXBwZW4gaWYgdGhp
cyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVuCi0gICAgICAgICAgICAvLyB1c2VkIGluIGFuIG9wdGlt
aXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxseSB0aGUgb25seSByZWFzb24gd2h5
IHdlIHdvdWxkCi0gICAgICAgICAgICAvLyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJlYWxs
eSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBvcHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgotICAg
ICAgICAgICAgLy8gZGljdGlvbmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0
aGF0IHRob3NlIG9iamVjdHMgd2VyZSBuZXZlciB1c2VkIGFzCi0gICAgICAgICAgICAvLyBwcm90
b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJlJ3MgYSBn
b29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKLSAgICAgICAgICAgIC8vIHRoZSBvdGhlciBjaGVja3Mg
YmVsb3cgd2lsbCBmYWlsLgotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpIHx8
ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkpCisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAg
ICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlk
KTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQogICAg
IApAQCAtMzk0LDcgKzM4MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAg
ICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWluLmdl
dCgpLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKICAgICAgICAgaWYg
KCFkaWRBcHBlbmQpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDgg
KzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1f
a2luZCA9IG90aGVyLm1fa2luZDsKICAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3Ry
dWN0dXJlOwogICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAg
bV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5h
dGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3Ro
ZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBp
ZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsK
QEAgLTY0LDI5ICs2MywyNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwK
LSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFyaWFu
dCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CiAgICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9
IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAoc3RydWN0dXJlQ2hhaW4pCi0gICAgICAgIHN0cnVjdHVy
ZUNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAgIHJlc3Vs
dC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBv
ZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZh
cmlhbnQ6OnNldHRlcigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LAotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKIHsKICAgICBQdXRCeUlkVmFyaWFu
dCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKICAgICByZXN1bHQubV9vbGRT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKGNoYWluKSB7Ci0gICAgICAgIGNoYWluLT5n
YXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQubV9h
bHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgfQorICAgIHJl
c3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2FsbExp
bmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzQsMTggKzEzMCw2IEBAIGJvb2wg
UHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0g
U2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQgUHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUo
KSBjb25zdAotewotICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAKLSAgICBpZiAo
IW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpOwotICAgIAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29uc3RhbnRDaGVja3MsIG1f
YWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKLSAgICByZXR1
cm4gc3RydWN0dXJlOwotfQotCiBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVy
Lm1fb2Zmc2V0KQpAQCAtMTU1LDggKzEzOSw4IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVt
cHRUb01lcmdlKGNvbnMKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIHN3aXRjaCAob3RoZXIu
bV9raW5kKSB7CiAgICAgICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJUKG1f
Y29uc3RhbnRDaGVja3MuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2Nv
bnN0YW50Q2hlY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJn
ZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5
Niw2ICsxODAsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zCiAg
ICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwogICAgIEFTU0VSVCghcmVw
bGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwogICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRl
c1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgp
KTsKICAgICAKICAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2Ug
aGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKICAgICAv
LyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxy
ZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0CkBAIC0yMzIsMTUgKzIxNywxMyBAQCB2
b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIG91dC5wcmlu
dCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgp
LCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3
U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250
ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8U2V0
dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAg
ICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIpOwot
ICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAgICAgICAgb3V0LnByaW50KCIsIGFs
dGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250
ZXh0KSk7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwogICAgICAg
ICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKICAgICAgICAgb3V0
LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgUHV0QnlJZFZhcmlhbnRfaAogI2RlZmluZSBQdXRCeUlkVmFyaWFudF9oCiAK
LSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICBQdXRC
eUlkVmFyaWFudCgpCiAgICAgICAgIDogbV9raW5kKE5vdFNldCkKICAgICAgICAgLCBtX25ld1N0
cnVjdHVyZShudWxscHRyKQotICAgICAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQogICAg
ICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgewogICAgIH0KQEAgLTU0LDE2ICs1
MywxNSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQm
KTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7
CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZSgKLSAgICAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgc3RhdGlj
IFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsCi0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWlu
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZh
cmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAotICAgICAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyk7CisgICAg
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+KTsKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQ7IH0KICAgICAKQEAgLTc2LDYgKzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOwogICAgIH0KICAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7CisgICAg
fQorICAgIAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVw
bGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKQEAgLTEwMCwxMCArMTAzLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxz
KCkgY29uc3Q7CiAgICAgCi0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYg
Y29uc3RhbnRDaGVja3MoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRD
aGVja3M7Ci0gICAgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtMTExLDE0ICsxMTEsNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICB9CiAgICAgCi0gICAgSlNPYmpl
Y3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwotICAgIH0KLSAgICAK
LSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OwotICAgIAogICAgIENhbGxM
aW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
a2luZCgpID09IFNldHRlcik7CkBAIC0xMzYsOCArMTI4LDcgQEAgcHJpdmF0ZToKICAgICBLaW5k
IG1fa2luZDsKICAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJl
KiBtX25ld1N0cnVjdHVyZTsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29u
c3RhbnRDaGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBt
X29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywzMyArMzcsNDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojp+U3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgpIHsgfQogCiBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgV2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQ+JiBoZWFkKQogewotICAgIGhlYWQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+KGhvbGRlciwgV1RGOjptb3ZlKGhl
YWQpKTsKKyAgICBoZWFkID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50PihrZXksIGhvbGRlciwgV1RGOjptb3ZlKGhlYWQpKTsKICAgICByZXR1cm4gaGVh
ZC5nZXQoKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJl
SW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0
bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50
cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1v
dmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRy
YXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0g
ICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7
CisgICAgaWYgKCFtX2tleSB8fCAhbV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246
OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkg
Y2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4K
KyAgICAgICAgLy8gVGhhdCB3b3JrcywgYmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVt
b3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBsaXN0LCBhbmQKKyAgICAgICAgLy8gdGhlIHNldCdzIGxp
c3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2lu
Zy4KKyAgICAgICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1
YkluZm8oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9rZXkua2luZCgp
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAvLyBJZiB0aGlzIHdh
cyBhIHByZXNlbmNlIGNvbmRpdGlvbiwgbGV0J3Mgd2F0Y2ggdGhlIHByb3BlcnR5IGZvciByZXBs
YWNlbWVudHMuIFRoaXMgaXMgcHJvZml0YWJsZQorICAgICAgICAvLyBmb3IgdGhlIERGRywgd2hp
Y2ggd2lsbCB3YW50IHRoZSByZXBsYWNlbWVudCBzZXQgdG8gYmUgdmFsaWQgaW4gb3JkZXIgdG8g
ZG8gY29uc3RhbnQgZm9sZGluZy4KKyAgICAgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAobV9rZXku
b2JqZWN0KCkpLT52bSgpOworICAgICAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPnN0
YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgbV9rZXkub2Zmc2V0KCkpOwor
ICAgIH0KKworICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQodGhpcyk7CiB9CiAKIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6fldh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygpCiB7CiB9CiAKLVN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hw
b2ludCgpCitTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6
cHVzaCgqdGhpcywgbV9oZWFkKTsKKyAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludDo6cHVzaChrZXksICp0aGlzLCBtX2hlYWQpOwogfQogCiBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJl
ZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbz4mIGhvbGRlclJlZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCi0gICAgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvKQorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKICAgICBpZiAoIWhvbGRlclJl
ZikKICAgICAgICAgaG9sZGVyUmVmID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbyhjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CkBAIC03Miw3ICs4NSw3IEBAIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAgICAgQVNTRVJUKGhvbGRl
clJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBo
b2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoKTsKKyAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRj
aHBvaW50KGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKIAorI2lu
Y2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5o
IgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTQ2LDE1ICs0NywxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50IDogCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgKLSAgICAgICAgV2F0
Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIpCi0gICAgICAgIDogbV9ob2xkZXIo
aG9sZGVyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAg
ICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBuZXh0KQotICAg
ICAgICA6IG1faG9sZGVyKGhvbGRlcikKKyAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICwg
bV9ob2xkZXIoaG9sZGVyKQogICAgICAgICAsIG1fbmV4dChXVEY6Om1vdmUobmV4dCkpCiAgICAg
ewogICAgIH0KQEAgLTYyLDYgKzU5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoKTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludCogcHVzaCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBo
b2xkZXIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50PiYgaGVhZCk7CiAKQEAgLTY5LDYgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OwogICAgIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbyYgbV9ob2xkZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG1fbmV4dDsKIH07CkBAIC04MywxMSArODIsMTEg
QEAgcHVibGljOgogICAgIAogICAgIH5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKTsK
ICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50
KCk7CisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAgICBzdGF0aWMgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hw
b2ludCgKICAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhv
bGRlclJlZiwKLSAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyAgICAg
ICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5KTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODc0
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwxMiBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVy
ZXM7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCk7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgogICAgIGNhc2UgYWNj
ZXNzX3Vuc2V0OgogICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byBy
ZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5CkBAIC03NSw4ICs3OCwxMCBAQCBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X2RpcmVjdDoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9u
LnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2Vk
KHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhl
YXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKQorICAgICAgICAg
ICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
QEAgLTExMyw3ICsxMTQsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8g
UHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQ
dXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNE
aXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50
ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc2
LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwog
ICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRk
V2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uKCkpCiAgICAgewogICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAgICAg
ICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcyk7CisgICAgICAgICAgICB3YXRjaHBvaW50
cywgY29kZUJsb2NrLCB0aGlzLCBjb25kaXRpb24pOwogICAgIH0KICAgICAKICAgICBpbnQ4X3Qg
YWNjZXNzVHlwZTsKQEAgLTIxNywyMyArMjE5LDEyIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
byB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0
cnVjdHVyZTsKICAgICAgICAgfSBnZXRCeUlkU2VsZjsKICAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByb3RvdHlwZVN0cnVjdHVy
ZTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgIH0gZ2V0QnlJZFByb3RvOwot
ICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50IDogMzE7Ci0gICAg
ICAgICAgICBib29sIGlzRGlyZWN0IDogMTsKLSAgICAgICAgfSBnZXRCeUlkQ2hhaW47Ci0gICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0Owog
ICAgICAgICB9IGdldEJ5SWRMaXN0OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICAgICAgdm9pZCogcmF3
Q29uZGl0aW9uU2V0OwogICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwogICAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RT
dHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NzksNyArMTc3OSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUg
c3VidGxlPwogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tpXS5h
bHRlcm5hdGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0
IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3
ZSdkCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCisg
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNv
bmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNl
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewpAQCAtMjA2
MCwzMCArMjA2MywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1
bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAg
ICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAg
ICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQg
PSBnZXRDYXNlLnNldCgpOwogICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAg
ICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1Zh
bHVlIGJhc2VGb3JMb2FkOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KQotICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlLm1f
dmFsdWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAg
IGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7
Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoZ2V0
Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7CiAg
ICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50
UmVzdWx0KSwKKyAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAog
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlv
bjo6RXF1aXZhbGVuY2UpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRj
aGFibGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFu
c2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENvbmN1
cnJlbnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXkub2Jq
ZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZz
ZXQpOworICAgIHNldC0+YWRkKCZtX3Byb3BlcnR5V2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpmaXJlKGNvbnN0IEZpcmVEZXRh
aWwmIGRldGFpbCkKK3sKKyAgICAvLyBPbmUgb2YgdGhlIHdhdGNocG9pbnRzIGZpcmVkLCBidXQg
dGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1ha2Ugc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlbSBhcmUK
KyAgICAvLyBpbiBhbnkgc2V0IGFueW1vcmUuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgYnkgYWxs
b3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRoZSB3YXRjaHBvaW50cworICAgIC8vIHdoZXJldmVyIGZy
b20gc2NyYXRjaC4KKyAgICBpZiAobV9zdHJ1Y3R1cmVXYXRjaHBvaW50LmlzT25MaXN0KCkpCisg
ICAgICAgIG1fc3RydWN0dXJlV2F0Y2hwb2ludC5yZW1vdmUoKTsKKyAgICBpZiAobV9wcm9wZXJ0
eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAgICAgICAgbV9wcm9wZXJ0eVdhdGNocG9pbnQucmVt
b3ZlKCk7CisgICAgCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9u
OjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkg
eworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJh
d1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIp
OworICAgIH0KKyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50
KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAg
ICBTdHJpbmdGaXJlRGV0YWlsIHN0cmluZ0RldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsK
KyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZzdHJp
bmdEZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVE
ZXRhaWwmIGRldGFpbCkKK3sKKyAgICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VU
T0YoCisgICAgICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9z
dHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFp
bCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQ
cm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBk
ZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAg
ICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fcHJvcGVydHlX
YXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4o
dGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUg
IldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAor
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBt
X2tleTsgfQorICAgIAorICAgIHZvaWQgaW5zdGFsbCgpOworCitwcml2YXRlOgorICAgIGNsYXNz
IFN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgor
ICAgICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsK
KyAgICB9OworICAgIGNsYXNzIFByb3BlcnR5V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFByb3BlcnR5V2F0Y2hwb2ludCgpIHsgfQorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0
YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIGZpcmUoY29uc3QgRmlyZURl
dGFpbCYpOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgU3RydWN0dXJlV2F0Y2hwb2ludCBtX3N0cnVjdHVy
ZVdhdGNocG9pbnQ7CisgICAgUHJvcGVydHlXYXRjaHBvaW50IG1fcHJvcGVydHlXYXRjaHBvaW50
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2Nr
KGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1aXJlc1N0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXku
d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1
cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7Cit9CisKK3ZvaWQgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWls
KQoreworICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJl
V2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVy
KHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9
CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRh
dGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5n
RmlyZURldGFpbCBzdHJpbmdEZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisg
ICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVU
b1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWls
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dF9oCisjZGVmaW5lIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5j
bHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsK
K3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29u
c3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5Owor
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAzLDcgKzIwMywxNCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNr
c0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJl
c3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29uc3Qg
Q2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNl
dChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSog
dmFsdWUpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2Rl
KiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFu
ZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAg
ICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29u
c3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5
T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAgICAvLyBXb3JrcyB3aXRo
IGJvdGggR2V0QnlJZFZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFyaWFu
dC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KKyAgICBOb2RlKiBsb2FkKFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25z
dCBWYXJpYW50VHlwZSYgdmFyaWFudCk7CisgICAgICAgIAogICAgIHZvaWQgaGFuZGxlR2V0QnlJ
ZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUq
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRT
dGF0dXMmKTsKQEAgLTIxMiw3ICsyMTksMzIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVB1
dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5v
ZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCk7
Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
KTsKKyAgICAKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVtaXQgYSBj
aGVjayBmb3IgdGhpcyBjb25kaXRpb24uIFJldHVybnMgZmFsc2UgaWYgdGhlCisgICAgLy8gY29u
ZGl0aW9uIG5vIGxvbmdlciBob2xkcywgYW5kIHRoZXJlZm9yZSBubyByZWFzb25hYmxlIGNoZWNr
IGNhbiBiZSBlbWl0dGVkLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mKTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwcm9tb3RlVG9Db25zdGFudChH
ZXRCeU9mZnNldE1ldGhvZCk7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEgd2F0Y2hw
b2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBJdCBtdXN0IGJlIGEgUHJl
c2VuY2UKKyAgICAvLyBjb25kaXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byBwcm9tb3RlIGEgUHJl
c2VuY2UgY29uZGl0aW9uIHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbi4KKyAgICAvLyBFbWl0
cyBjb2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNvbmRpdGlvbiBndWFyZHMsIGFu
ZCByZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0
dXJucyBudWxsIGlmIHRoZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLgorICAgIEdldEJ5T2Zm
c2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAg
Tm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29u
c3QgR2V0QnlPZmZzZXRNZXRob2QmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2Rl
KiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIE5v
ZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNrKCkgZm9yIGVh
Y2ggY29uZGl0aW9uIGluIHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVpdGhlciBlbWl0cyBjaGVja3Mg
b3IgcmVnaXN0ZXJzCisgICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEgY29tYmluYXRpb24gb2YgdGhl
IHR3bykgdG8gbWFrZSB0aGUgY29uZGl0aW9ucyBob2xkLiBJZiBhbnkgb2YgdGhvc2UKKyAgICAv
LyBjb25kaXRpb25zIGFyZSBubyBsb25nZXIgY2hlY2thYmxlLCByZXR1cm5zIGZhbHNlLgorICAg
IGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICAKKyAg
ICAvLyBDYWxscyBjaGVjaygpIGZvciB0aG9zZSBjb25kaXRpb25zIHRoYXQgYXJlbid0IHRoZSBz
bG90IGJhc2UsIGFuZCBjYWxscyBsb2FkKCkgZm9yIHRoZSBzbG90CisgICAgLy8gYmFzZS4gRG9l
cyBhIGNvbWJpbmF0aW9uIG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBjaGVjayBlbWlz
c2lvbiB0byBndWFyZCB0aGUKKyAgICAvLyBjb25kaXRpb25zLCBhbmQgZW1pdHMgY29kZSB0byBs
b2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzbG90IGJhc2UuIFJldHVybnMgYSBub2RlIGNvbnRhaW5p
bmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgYW55IG9mIHRoZSBj
b25kaXRpb25zIHdlcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAgICBHZXRCeU9mZnNldE1ldGhv
ZCBwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOworICAgIE5vZGUq
IGxvYWQoU3BlY3VsYXRlZFR5cGUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwg
Tm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2so
KTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiArNzM4LDkgQEAgcHJpdmF0ZToK
ICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBv
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBh
cm91bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJv
bSB1c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdh
dGNoIHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtl
IGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlND
b25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAg
ICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKQEAgLTIyNDAsMTUgKzIyNzUsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1O
b2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUg
b3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAgICBpZiAoYmFzZS0+aGFzQ29u
c3RhbnQoKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQp
KSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOwotICAgICAgICAgICAg
cmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
ICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNl
dCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0yMjY0LDYgKzIyOTIsMTgg
QEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIHJldHVybiBn
ZXRCeU9mZnNldDsKIH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIE5vZGVUeXBlIG9wKQoreworICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgpKSB7
CisgICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFBy
b3BlcnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQsIG9mZnNldCkpIHsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gd2Vh
a0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBv
ZmZzZXQsIG9wKTsKK30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0
KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
Tm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMjI4MSwxMCAr
MjMyMSwyMTYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVja3MoY29u
c3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKQorYm9vbCBCeXRlQ29kZVBh
cnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sK
KyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmpl
Y3QoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1Zh
bGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhZGRU
b0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3ZWFrSlNDb25zdGFudChjb25k
aXRpb24ub2JqZWN0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRo
b2QgQnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kIG1l
dGhvZCkKK3sKKyAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9h
ZEZyb21Qcm90b3R5cGUKKyAgICAgICAgJiYgbWV0aG9kLnByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUo
KS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1f
Z3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCks
IG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCksIG1ldGhvZC5vZmZzZXQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXpl
KGNvbnN0YW50KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBtZXRob2Q7Cit9CisKK0dldEJ5
T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJQbGFubmluZyBhIGxvYWQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CisgICAgCisgICAgLy8g
V2UgbWlnaHQgcHJvbW90ZSB0aGlzIHRvIEVxdWl2YWxlbmNlLCBhbmQgYSBsYXRlciBERkcgcGFz
cyBtaWdodCBhbHNvIGRvIHN1Y2ggcHJvbW90aW9uCisgICAgLy8gZXZlbiBpZiB3ZSBmYWlsLCBi
dXQgZm9yIHNpbXBsaWNpdHkgdGhpcyBjYW5ub3QgYmUgYXNrZWQgdG8gbG9hZCBhbiBlcXVpdmFs
ZW5jZSBjb25kaXRpb24uCisgICAgLy8gTm9uZSBvZiB0aGUgY2xpZW50cyBvZiB0aGlzIG1ldGhv
ZCB3aWxsIHJlcXVlc3QgYSBsb2FkIG9mIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbnl3YXks
CisgICAgLy8gYW5kIHN1cHBvcnRpbmcgaXQgd291bGQgY29tcGxpY2F0ZSB0aGUgaGV1cmlzdGlj
cyBiZWxvdy4KKyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5
Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgCisgICAgLy8gSGVyZSdzIHRoZSByYW5raW5nIG9m
IGhvdyB0byBoYW5kbGUgdGhpcywgZnJvbSBtb3N0IHByZWZlcnJlZCB0byBsZWFzdCBwcmVmZXJy
ZWQ6CisgICAgLy8KKyAgICAvLyAxKSBXYXRjaHBvaW50IG9uIGFuIGVxdWl2YWxlbmNlIGNvbmRp
dGlvbiBhbmQgcmV0dXJuIGEgY29uc3RhbnQgbm9kZSBmb3IgdGhlIGxvYWRlZCB2YWx1ZS4KKyAg
ICAvLyAgICBObyBvdGhlciBjb2RlIGlzIGVtaXR0ZWQsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRo
ZSBiYXNlIG9iamVjdCBpcyBuZXZlciByZWdpc3RlcmVkLgorICAgIC8vICAgIEhlbmNlIHRoaXMg
cmVzdWx0cyBpbiB6ZXJvIGNvZGUgYW5kIHdlIHdvbid0IGpldHRpc29uIHRoaXMgY29tcGlsYXRp
b24gaWYgdGhlIG9iamVjdAorICAgIC8vICAgIHRyYW5zaXRpb25zLCBldmVuIGlmIHRoZSBzdHJ1
Y3R1cmUgaXMgd2F0Y2hhYmxlIHJpZ2h0IG5vdy4KKyAgICAvLworICAgIC8vIDIpIE5lZWQgdG8g
ZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgZ29p
bmcgdG8gYmUgd2F0Y2hlZCBieSB0aGUKKyAgICAvLyAgICBERkcgYW55d2F5IChpLmUuIGRmZ1No
b3VsZFdhdGNoKS4gV2F0Y2ggdGhlIHN0cnVjdHVyZSBhbmQgZW1pdCB0aGUgbG9hZC4gRG9uJ3Qg
d2F0Y2ggdGhlCisgICAgLy8gICAgY29uZGl0aW9uLCBzaW5jZSB0aGUgYWN0IG9mIHR1cm5pbmcg
dGhlIGJhc2UgaW50byBhIGNvbnN0YW50IGluIElSIHdpbGwgY2F1c2UgdGhlIERGRyB0bworICAg
IC8vICAgIHdhdGNoIHRoZSBzdHJ1Y3R1cmUgYW55d2F5IGFuZCBkb2luZyBzbyB3b3VsZCBzdWJz
dW1lIHdhdGNoaW5nIHRoZSBjb25kaXRpb24uCisgICAgLy8KKyAgICAvLyAzKSBOZWVkIHRvIGVt
aXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIHdhdGNo
YWJsZSBidXQgbm90IGJ5IHRoZQorICAgIC8vICAgIERGRyAoaS5lLiB0cmFuc2l0aW9uV2F0Y2hw
b2ludFNldElzU3RpbGxWYWxpZCgpIGFuZCAhZGZnU2hvdWxkV2F0Y2hJZlBvc3NpYmxlKCkpLiBX
YXRjaAorICAgIC8vICAgIHRoZSBjb25kaXRpb24sIGFuZCBlbWl0IGEgbG9hZC4KKyAgICAvLwor
ICAgIC8vIDQpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUg
b2YgdGhlIGJhc2UgaXMgbm90IHdhdGNoYWJsZS4gRW1pdCBhCisgICAgLy8gICAgc3RydWN0dXJl
IGNoZWNrLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA1KSBUaGUgY29uZGl0aW9u
IGRvZXMgbm90IGhvbGQuIEdpdmUgdXAgYW5kIHJldHVybiBudWxsLgorICAgIAorICAgIC8vIE1h
a2Ugc3VyZSB3ZSBhZ3JlZSBvbiB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZm9yIHRoZSBwdXJwb3Nl
IG9mIGVtaXR0aW5nIHRoZXNlIHZhcmlvdXMKKyAgICAvLyBjaGVja3MuCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgIAorICAg
IC8vIEZpcnN0LCB0cnkgdG8gcHJvbW90ZSBQcmVzZW5jZSB0byBFcXVpdmFsZW5jZS4gV2UgZG8g
dGhpcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZQorICAgIC8vIGJlY2F1c2UgaXQncyB0aGUg
bW9zdCBwcm9maXRhYmxlLiBBbHNvLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIHByZXNlbmNl
IGlzIHdhdGNoYWJsZSBidXQKKyAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHdhdGNoIGl0IHVubGVz
cyBpdCBiZWNhbWUgYW4gZXF1aXZhbGVuY2UgKHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4K
KyAgICAvLyAoMSksICgyKSwgYW5kICgzKSBhYm92ZSkuCisgICAgaWYgKHN0cnVjdHVyZS0+aXNW
YWxpZE9mZnNldChjb25kaXRpb24ub2Zmc2V0KCkpKSB7CisgICAgICAgIC8vIFRoaXMgbG9hZCBp
cyBmaW5lIGJlY2F1c2Ugb25seSB0aGUgR0MgY2FuIGNhdXNlIGEgZGVsZXRlZCBwcm9wZXJ0eSB0
byBoYXZlIGEgZ2FyYmFnZQorICAgICAgICAvLyB2YWx1ZS4KKyAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+Z2V0RGlyZWN0KGNvbmRpdGlvbi5vZmZzZXQoKSk7Cisg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlQ29uZGl0aW9uID0KKyAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJy
aWVyKAorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5vYmplY3QoKSwgY29uZGl0aW9uLnVpZCgp
LCB2YWx1ZSk7CisgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGVxdWl2YWxlbmNl
Q29uZGl0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZDo6Y29uc3Rh
bnQobV9ncmFwaC5mcmVlemUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBw
b2ludCwgd2UnbGwgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgY29uZGl0aW9uJ3MgYmFzZSBhcyBh
IGNvbnN0YW50IGluIERGRyBJUi4gT25jZQorICAgIC8vIHdlIGRvIHRoaXMsIHRoZSBmcm96ZW4g
dmFsdWUgd2lsbCBoYXZlIGl0cyBvd24gaWRlYSBvZiB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMuIFVz
ZSB0aGF0IGZyb20KKyAgICAvLyBub3cgb24ganVzdCBiZWNhdXNlIGl0J3MgbGVzcyBjb25mdXNp
bmcuCisgICAgRnJvemVuVmFsdWUqIGJhc2UgPSBtX2dyYXBoLmZyZWV6ZShjb25kaXRpb24ub2Jq
ZWN0KCkpOworICAgIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOworICAgIAorICAgIC8v
IENoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSd2ZSByZWdpc3RlcmVkIG1ha2VzIHRoZSBj
b25kaXRpb24gaG9sZC4gSWYgbm90LCBqdXN0IGdpdmUKKyAgICAvLyB1cC4gVGhpcyBpcyBjYXNl
ICg1KSBhYm92ZS4KKyAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHko
c3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7CisgICAgCisg
ICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRjaGVkIGJ5IHRoZSBERkcgYWxyZWFkeSwgdGhl
biBqdXN0IHVzZSB0aGlzIGZhY3QgdG8gZW1pdCB0aGUgbG9hZC4KKyAgICAvLyBUaGlzIGlzIGNh
c2UgKDIpIGFib3ZlLgorICAgIGlmIChzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCisgICAg
ICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Q
cm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7CisgICAgCisgICAgLy8gSWYgd2Ug
Y2FuIHdhdGNoIHRoZSBjb25kaXRpb24gcmlnaHQgbm93LCB0aGVuIHdlIGNhbiBlbWl0IHRoZSBs
b2FkIGFmdGVyIHdhdGNoaW5nIGl0LiBUaGlzCisgICAgLy8gaXMgY2FzZSAoMykgYWJvdmUuCisg
ICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0dXJu
IHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlwZShi
YXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBXZSBjYW4ndCB3YXRjaCBh
bnl0aGluZyBidXQgd2Uga25vdyB0aGF0IHRoZSBjdXJyZW50IHN0cnVjdHVyZSBzYXRpc2ZpZXMg
dGhlIGNvbmRpdGlvbi4gU28sCisgICAgLy8gY2hlY2sgZm9yIHRoYXQgc3RydWN0dXJlIGFuZCB0
aGVuIGVtaXQgdGhlIGxvYWQuCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tTdHJ1Y3R1
cmUsIAorICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSks
CisgICAgICAgIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGJhc2UpKSk7CisgICAgcmV0
dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlw
ZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCwKKyAgICBOb2RlVHlwZSBv
cCkKK3sKKyAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjYXNlIEdldEJ5
T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CisgICAgY2FzZSBHZXRCeU9mZnNldE1l
dGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKKyAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKKyAgICAgICAg
cmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVy
TnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICB9CisgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6TG9hZDoKKyAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9tIHBsYW5M
b2FkKCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uLCBOb2RlVHlwZSBvcCkKK3sKKyAgICBHZXRCeU9mZnNldE1ldGhv
ZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgIHJldHVybiBsb2FkKHByZWRpY3Rp
b24sIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0aW9uLnVpZCgpKSwgbWV0aG9k
LCBvcCk7Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKKyAgICAgICAgaWYg
KCFjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJzZXI6OnBs
YW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7
CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coImNvbmRpdGlvblNldCA9ICIsIGNv
bmRpdGlvblNldCwgIlxuIik7CisgICAgCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0Owor
ICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29uZGl0
aW9uU2V0KSB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICBj
YXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFyZXN1bHQpOyAvLyBTaG91bGQgb25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhlc2UuCisg
ICAgICAgICAgICByZXN1bHQgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgICAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICghY2hl
Y2soY29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Qo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUKCEhcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOb2RlKiBCeXRlQ29kZVBh
cnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBOb2RlVHlwZSBvcCkKK3sKKyAgICBH
ZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb25TZXQpOworICAgIHJl
dHVybiBsb2FkKAorICAgICAgICBwcmVkaWN0aW9uLAorICAgICAgICBtX2dyYXBoLmlkZW50aWZp
ZXJzKCkuZW5zdXJlKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLnVpZCgpKSwKKyAg
ICAgICAgbWV0aG9kLCBvcCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRUeXBlPgor
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5
cGUmIHZhcmlhbnQpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXpl
KCk7ICsraSkKLSAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHZlY3Rvcltp
XS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCkpOworICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVj
dHVyZVNldCgpKSksIGJhc2UpOworICAgIAorICAgIFNwZWN1bGF0ZWRUeXBlIGxvYWRQcmVkaWN0
aW9uOworICAgIE5vZGVUeXBlIGxvYWRPcDsKKyAgICBpZiAodmFyaWFudC5jYWxsTGlua1N0YXR1
cygpKSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gU3BlY0NlbGxPdGhlcjsKKyAgICAgICAg
bG9hZE9wID0gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bG9hZFByZWRpY3Rpb24gPSBwcmVkaWN0aW9uOworICAgICAgICBsb2FkT3AgPSBHZXRCeU9mZnNl
dDsKKyAgICB9CisgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWU7CisgICAgaWYgKCF2YXJpYW50
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBsb2FkKGxv
YWRQcmVkaWN0aW9uLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLCBsb2FkT3ApOworICAgIGVsc2Ug
eworICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAg
bG9hZFByZWRpY3Rpb24sIGJhc2UsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJO
dW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICBsb2FkT3ApOworICAgIH0KKwor
ICAgIC8vIE1ha2Ugc3VyZSBiYWNrd2FyZHMgcHJvcGFnYXRpb24ga25vd3MgdGhhdCB3ZSd2ZSB1
c2VkIGJhc2UuCisgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAKKyAgICByZXR1
cm4gbG9hZGVkVmFsdWU7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQo
CkBAIC0yMzA3LDE4ICsyNTUzLDM2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlm
IChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9u
KCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7Ci0gICAgCisgICAgICAgIFZlY3RvcjxNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7CisgICAgICAgIAogICAgICAgICAvLyAxKSBFbWl0IHBy
b3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwgY2hhaW5zLiBUaGlzIGNvdWxkIHNvcnQg
b2YgbWF5YmUgbm90IGJlCiAgICAgICAgIC8vICAgIG9wdGltYWwsIGlmIHRoZXJlIGlzIHNvbWUg
cmFyZWx5IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNoYWluIHRoYXQgcmVxdWlyZXMgYSBsb3QKICAg
ICAgICAgLy8gICAgb2YgY2hlY2tzIGFuZCB0aG9zZSBjaGVja3MgYXJlIG5vdCB3YXRjaHBvaW50
YWJsZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBnZXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykKLSAgICAgICAgICAgIGVtaXRDaGVja3Mo
Z2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkpOwotICAgICAgICAK
KyAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IGdldEJ5SWRTdGF0
dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQuY29uZGl0aW9uU2V0KCku
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKAorICAgICAgICAgICAg
ICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBHZXRCeU9mZnNl
dE1ldGhvZDo6bG9hZCh2YXJpYW50Lm9mZnNldCgpKSkpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBHZXRCeU9mZnNl
dE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZCh2YXJpYW50LmNvbmRpdGlvblNldCgpKTsKKyAgICAg
ICAgICAgIGlmICghbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNl
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoTXVsdGlHZXRCeU9mZnNldENhc2UodmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKSwgbWV0aG9kKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ncmFw
aC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3Rp
Y2VJbmxpbmVkR2V0QnlJZCgpOworICAgIAogICAgICAgICAvLyAyKSBFbWl0IGEgTXVsdGlHZXRC
eU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9t
dWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBnZXRC
eUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPmNhc2VzID0gY2FzZXM7CiAgICAg
ICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksCiAgICAgICAgICAgICBhZGRU
b0dyYXBoKE11bHRpR2V0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBiYXNlKSk7CkBAIC0yMzI4LDMwICsyNTkyLDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5SWQoCiAgICAgQVNTRVJUKGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
KTsKICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZ2V0QnlJZFN0YXR1c1swXTsKICAgICAg
ICAgICAgICAgICAKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQocHJlZGljdGlvbiwgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CisgICAgaWYgKCFsb2FkZWRWYWx1ZSkgewor
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksCisgICAgICAg
ICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
bV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5v
dGljZUlubGluZWRHZXRCeUlkKCk7CiAgICAgCi0gICAgTm9kZSogb3JpZ2luYWxCYXNlID0gYmFz
ZTsKLSAgICAgICAgICAgICAgICAKLSAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNl
KTsKLSAgICAKLSAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7Ci0KLSAg
ICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAgICAgIGJhc2UgPSB3ZWFrSlNDb25z
dGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgCi0gICAgLy8gVW5sZXNzIHdlIHdh
bnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4
Mywgd2UgbmVlZCB0bwotICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBiYXNlIG9mIHRoZSBvcmlnaW5h
bCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGgKLSAgICAvLyBh
bGwgb2YgdGhlIHNwZWN1bGF0aW9ucy4gV2Ugb25seSBpbnNlcnQgdGhlIFBoYW50b20gaWYgdGhl
cmUgaGFkIGJlZW4gYSBDaGVja1N0cnVjdHVyZQotICAgIC8vIG9uIHNvbWV0aGluZyBvdGhlciB0
aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tTdHJ1Y3R1cmUgb24gYmFzZS4KLSAgICBp
ZiAob3JpZ2luYWxCYXNlICE9IGJhc2UpCi0gICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgb3Jp
Z2luYWxCYXNlKTsKLSAgICAKLSAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zm
c2V0KAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVjQ2VsbE90aGVyIDog
cHJlZGljdGlvbiwKLSAgICAgICAgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50
aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgIHZhcmlhbnQuY2FsbExpbmtT
dGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZzZXQpOwotICAgIAog
ICAgIGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CiAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgbG9hZGVkVmFsdWUpOwogICAgICAgICByZXR1
cm47CkBAIC0yMzg4LDcgKzI2MzgsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRC
eUlkKAogICAgIC8vICAgIHNpbmNlIHdlIG9ubHkgcmVhbGx5IGNhcmUgYWJvdXQgJ3RoaXMnIGlu
IHRoaXMgY2FzZS4gQnV0IHdlJ3JlIG5vdCBnb2luZyB0byB0YWtlIHRoYXQKICAgICAvLyAgICBz
aG9ydGN1dC4KICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lz
dGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAg
IAogICAgIGhhbmRsZUNhbGwoCiAgICAgICAgIGRlc3RpbmF0aW9uT3BlcmFuZCwgQ2FsbCwgSW5s
aW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCksCkBA
IC0yNDIyLDE3ICsyNjcyLDIwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQo
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICht
X2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCkt
Pm5vdGljZUlubGluZWRQdXRCeUlkKCk7Ci0gICAgICAgIAogICAgICAgICBpZiAoIWlzRGlyZWN0
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0
dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgaWYg
KHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGVtaXRDaGVja3MocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkp
OworICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhd
LmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigp
KQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJ
ZCgpOworICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPnZhcmlhbnRz
ID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVt
YmVyID0gaWRlbnRpZmllck51bWJlcjsKQEAgLTI0NTQsNyArMjcwNywxMCBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6
OlRyYW5zaXRpb246IHsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7
Ci0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAg
aWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGly
ZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVCh2
YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgCkBAIC0yNTA1LDE5ICsyNzYxLDExIEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsKLSAgICAgICAgTm9kZSogb3JpZ2luYWxCYXNl
ID0gYmFzZTsKLSAgICAgICAgCi0gICAgICAgIGFkZFRvR3JhcGgoCi0gICAgICAgICAgICBDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0
dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgIAotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29u
c3RhbnRDaGVja3MoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVC
YXNlKCkpCi0gICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5h
dGVCYXNlKCkpOwotICAgICAgICAKLSAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVH
ZXRCeU9mZnNldCgKLSAgICAgICAgICAgIFNwZWNDZWxsT3RoZXIsIGJhc2UsIHZhcmlhbnQuYmFz
ZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAg
ICAgICAgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQpOworICAgICAgICBOb2RlKiBsb2FkZWRWYWx1
ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7
CisgICAgICAgIGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE5vZGUqIHNl
dHRlciA9IGFkZFRvR3JhcGgoR2V0U2V0dGVyLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIApAQCAt
MjU0NSw3ICsyNzkzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OwogICAgIAogICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5l
eHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlhdGVOYWtl
ZFNldCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCB2YWx1
ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgIAogICAgICAgICBoYW5kbGVDYWxsKApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAx
ODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw5IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVS
ZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwogICAgICAgICB9CiAg
ICAgfQorICAgIAorICAgIGZvciAoQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRjaHBv
aW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cykKKyAgICAgICAgd2F0Y2hwb2ludC0+
a2V5KCkudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKyNpbmNs
dWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQu
aCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk4LDYgKzEwMCw4IEBAIHB1YmxpYzoKICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOwogICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPj4gd2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgQmFn
PENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gd2F0Y2hwb2ludHM7CisgICAgQmFnPEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsK
KyAgICBCYWc8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBhZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFj
ZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7CiAgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21w
aWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg3NDg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5NCwyMSArMjk0LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92
ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAgICAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29u
c3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRzLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEudmFyaWFudHMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgZ2V0Q2FzZS5zZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGdldENhc2Uuc2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzW2ktLV0gPSBkYXRhLmNhc2VzLmxhc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGRh
dGEudmFyaWFudHMuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FzZXMu
c2l6ZSgpICE9IDEpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIGRhdGEudmFyaWFudHNbMF0sIGRhdGEuaWRl
bnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5C
bG9jaywgbm9kZSwgZGF0YS5jYXNlc1swXS5tZXRob2QoKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
KTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTM3NCw4ICszNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25zdGFudENoZWNrcygpLmlzRW1wdHkoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90
eXBlIGNhc2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4NgogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zOTIsNyArMzkwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRE
YXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAg
ICAgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gc3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50
cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzLmFwcGVuZCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlk
ZW50aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvTXVsdGlHZXRC
eU9mZnNldChkYXRhKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTQzMiw5
ICs0MzUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRz
KCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIGFkZENoZWNrcyhvcmlnaW4sIGluZGV4SW5C
bG9jaywgc3RhdHVzW2ldLmNvbnN0YW50Q2hlY2tzKCkpOworCisgICAgICAgICAgICAgICAgYm9v
bCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6
IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1
cmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNr
U3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgY29u
ZGl0aW9uLm9iamVjdCgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aWYgKHN0YXR1cy5udW1WYXJpYW50cygpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgZW1p
dFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0sIGlk
ZW50aWZpZXJOdW1iZXIpOwpAQCAtNTI5LDQxICs1NTQsNjggQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRHZXRC
eU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEdldEJ5T2Zm
c2V0TWV0aG9kJiBtZXRob2QsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgeworICAg
ICAgICAvLyBXaGVuIHdlIGdldCB0byBoZXJlIHdlIGhhdmUgYWxyZWFkeSBlbWl0dGVkIGFsbCBv
ZiB0aGUgcmVxdWlzaXRlIGNoZWNrcyBmb3IgZXZlcnl0aGluZy4KKyAgICAgICAgLy8gU28sIHdl
IGp1c3QgbmVlZCB0byBlbWl0IHdoYXQgdGhlIG1ldGhvZCBvYmplY3QgdGVsbHMgdXMgdG8gZW1p
dC4KICAgICAgICAgCisgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgICAgIG1fZ3Jh
cGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbWV0aG9kLmNvbnN0YW50KCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkxvYWQ6CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBu
b2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2lu
c2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IG5vZGUtPm9yaWdpbiwgbWV0aG9kLnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRC
eU9mZnNldCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVkZ2UoY2hpbGQs
IEtub3duQ2VsbFVzZSksIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0R2V0QnlPZmZz
ZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVl
JiBiYXNlVmFsdWUsIGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyKQogICAgIHsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5v
cmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAKICAgICAg
ICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0
cnVjdHVyZVNldCgpKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZUZvckxvYWQ7Ci0g
ICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2VGb3JM
b2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGJhc2VGb3JMb2FkID0gYmFzZVZhbHVlLm1fdmFsdWU7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZh
bHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2FkLCB2YXJpYW50
LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgLy8gV2UgYXJl
bid0IHNldCB1cCB0byBoYW5kbGUgcHJvdG90eXBlIHN0dWZmLgorICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKworICAg
ICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShi
YXNlVmFsdWUubV92YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgdmFyaWFudC5vZmZzZXQo
KSkpIHsKICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFw
aC5mcmVlemUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICBO
b2RlKiBjaGlsZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5CbG9jaywg
b3JpZ2luLCB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGlsZEVkZ2Ug
PSBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRHZXRCeU9m
ZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFy
aWFudC5vZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVu
c2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAg
IGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAgICAgICBF
ZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNl
dCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkp
CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG5vZGUtPm9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gKm1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS5vZmZzZXQgPSB2YXJp
YW50Lm9mZnNldCgpOworICAgICAgICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0
YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgCiAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CkBAIC02
NDMsMTUgKzY5NSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnRDaGVjayhpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGFkZENoZWNrcygKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4s
IHVuc2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgY2hlY2tzKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoZWNr
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBjaGVja3NbaV0uY29uc3Rh
bnQoKSwgY2hlY2tzW2ldLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHZv
aWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ewogICAgICAgICBpZiAobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUo
KSkgPT0gU3RydWN0dXJlUmVnaXN0ZXJlZEFuZFdhdGNoZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lv
biAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRv
cjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmll
dywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNB
cnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBv
aW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAg
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAg
ICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2st
PnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7
CkBAIC00NSwxMCArNDYsMjMgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRv
cjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdh
dGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVy
cmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0
YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxs
eSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5
LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOwor
ICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykp
OworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtl
eSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkgeworICAg
IGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBjb21tb24uYWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2sp
LT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbW1v
bi5hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3Rh
bGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRl
c2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZp
ZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMu
YWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0
Y2goKSkKQEAgLTg4LDYgKzEwNyw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlB
ZGQoQ29kZUIKICAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0
YSk7CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRh
KTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwor
ICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRh
dGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0
CkBAIC05NSw3ICsxMTUsMTggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFs
aWQoKQogICAgIHJldHVybiBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5s
aW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVT
dGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7Cisg
ICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1fYWRh
cHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKK30KKwordm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJEZXNpcmVkIHdhdGNocG9pbnRzOlxuIik7
CisgICAgb3V0LnByaW50KCIgICAgV2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9zZXRz
LCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5saW5lIHdhdGNocG9pbnQg
c2V0czogIiwgaW5Db250ZXh0KG1faW5saW5lU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91
dC5wcmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1
ZXMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIs
IGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50
KCIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZl
U3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDkgQEAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1
ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQwLDMzICs0Miw1NiBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBHZW5lcmljU2V0QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayos
IFQgc2V0LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorc3RydWN0IFNldFBvaW50ZXJBZGFwdG9y
IHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21t
b25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2lu
dCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVC
bG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQp
IHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KKyAgICBzdGF0aWMgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIFQgc2V0LCBEdW1wQ29udGV4dCopCisgICAg
eworICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihzZXQpKTsKKyAgICB9CiB9OwogCiBzdHJ1
Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sq
LCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2Rl
QmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhh
c0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwogICAgIH0K
KyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUsIER1bXBDb250ZXh0KikKKyAgICB7CisgICAgICAgIG91dC5w
cmludChSYXdQb2ludGVyKGluZmVycmVkVmFsdWUpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgQXJy
YXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2Rl
QmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9p
ZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAgICAg
c3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQog
ICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdU
Rjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBEdW1wQ29udGV4dCog
Y29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZSh2aWV3
KSwgY29udGV4dCkpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFz
QmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gIWtleS5pc1dhdGNoYWJsZSgpOworICAgIH0KKyAgICBzdGF0aWMg
dm9pZCBkdW1wSW5Db250ZXh0KAorICAgICAgICBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7Cisg
ICAgICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7CiAgICAgfQogfTsKIAot
dGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBH
ZW5lcmljU2V0QWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBX
YXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdh
dGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2ludFNldFR5cGUs
IGJvb2w+IFN0YXRlTWFwOwpAQCAtODcsNyArMTEyLDcgQEAgcHVibGljOgogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8m
IHNldCA6IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwg
Y29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6
OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5
QWRkZWQgPSB0cnVlOwogICAgIH0KQEAgLTEwNyw2ICsxMzIsMTUgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9zZXRzLmNvbnRhaW5zKHNldCk7CiAgICAgfQogCisgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAg
IHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKGNvbnN0IFdhdGNo
cG9pbnRTZXRUeXBlJiBlbnRyeSA6IG1fc2V0cykgeworICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmR1bXBJbkNvbnRleHQob3V0LCBlbnRyeSwgY29u
dGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgSGFzaFNldDxXYXRjaHBv
aW50U2V0VHlwZT4gbV9zZXRzOwogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTEyMiw2ICsx
NTYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAg
ICB2b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0J3Mg
cmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6
OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFn
aWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgorICAgIHZvaWQgYWRkTGF6aWx5
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9vbCBjb25zaWRl
cihTdHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21t
b25EYXRhJik7CkBAIC0xNDQsMTIgKzE4MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAgfQorICAgIGJvb2wgaXNX
YXRjaGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAgfQor
CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25z
dDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAg
ICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAg
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5l
U2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZl
cnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdh
dGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFk
YXB0b3I+IG1fYnVmZmVyVmlld3M7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4g
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTAsNyArNTAsMTQgQEAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp+RGVzaXJlZFdlYWtSZWZl
cgogCiB2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTQ2VsbCogY2VsbCkK
IHsKLSAgICBtX3JlZmVyZW5jZXMuYWRkKGNlbGwpOworICAgIGlmIChjZWxsKQorICAgICAgICBt
X3JlZmVyZW5jZXMuYWRkKGNlbGwpOworfQorCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6
YWRkTGF6aWx5KEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICBhZGRMYXppbHkodmFsdWUuYXNDZWxsKCkpOwogfQogCiBib29sIERlc2lyZWRXZWFrUmVm
ZXJlbmNlczo6Y29udGFpbnMoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAx
ODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJl
bmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
IAogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKU1ZhbHVlOwogY2xh
c3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIApAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6CiAg
ICAgfkRlc2lyZWRXZWFrUmVmZXJlbmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXppbHkoSlNDZWxs
Kik7CisgICAgdm9pZCBhZGRMYXppbHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250YWlucyhKU0Nl
bGwqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODc0ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU3LDggKzI1Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICBpZiAobm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBN
dWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAi
eyIsIGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250
ZXh0KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNl
c1tpXSwgY29udGV4dCkpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNl
dERhdGEoKSkgewogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCk7CkBAIC01MzAsNiArNTMwLDggQEAgdm9pZCBHcmFwaDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBpZiAodmFsdWUtPnBvaW50c1RvSGVh
cCgpKQogICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5Db250ZXh0KCp2YWx1ZSwgJm15
Q29udGV4dCksICJcbiIpOwogICAgIH0KKworICAgIG91dC5wcmludChpbkNvbnRleHQod2F0Y2hw
b2ludHMoKSwgJm15Q29udGV4dCkpOwogICAgIAogICAgIGlmICghbXlDb250ZXh0LmlzRW1wdHko
KSkgewogICAgICAgICBteUNvbnRleHQuZHVtcChvdXQpOwpAQCAtODQ4LDYgKzg1MCwzMCBAQCB2
b2lkIEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCitib29s
IEdyYXBoOjp3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
KQoreworICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7
CisgICAgaWYgKGtleS5oYXNQcm90b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVu
Y2VzLmFkZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgIGlmIChrZXkuaGFzUmVxdWlyZWRW
YWx1ZSgpKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5yZXF1
aXJlZFZhbHVlKCkpOworICAgIAorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5
KTsKKworICAgIGlmIChrZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkK
KyAgICAgICAgbV9zYWZlVG9Mb2FkLmFkZChzdGQ6Om1ha2VfcGFpcihrZXkub2JqZWN0KCksIGtl
eS5vZmZzZXQoKSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjpp
c1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAg
ICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNl
dCkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVf
cHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2
ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTAyMCw4ICsxMDQ2LDEyIEBAIEpTVmFsdWUgR3Jh
cGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0
YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0
dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpCisgICAgaWYgKHN0cnVjdHVy
ZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBJZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbgorICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1m
b2xkIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NzI3MQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KICAg
ICAKICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBzdHJ1Y3R1cmUuc2V0
KCksIG9mZnNldCk7CiB9CkBAIC0xMTY3LDE3ICsxMTk3LDkgQEAgdm9pZCBHcmFwaDo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2
YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50LnN0cnVjdHVy
ZVNldCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6ZSgp
OyBqLS07KQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFJlYWRPbmx5UG9pbnRlcihzZXRbal0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0
IG5lZWQgdG8gbWFyayBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhh
dCB3b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRv
IENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gbWFyayB0aGUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRC
eU9mZnNldCBpZiBhbnkgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRp
ZCB0aGF0LgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0
dXMoKSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYg
Z2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IGdldENhc2Uuc2V0KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQ
b2ludGVyKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSwxNSBAQCBwdWJsaWM6CiAg
ICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVu
dGlmaWVyczsgfQogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVy
biBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRo
ZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEgUHJl
c2VuY2UgY29uZGl0aW9uLAorICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBxdWVy
eSBpZiB0aGUgY29uZGl0aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mga25v
d3MKKyAgICAvLyB3aGF0J3MgZ29pbmcgb24uCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25v
d24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0
IGlzIGZpbmUuIFRoaXMgaXMKKyAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25k
aXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4KKyAgICBib29sIGlzU2FmZVRv
TG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOworICAgIAogICAgIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkBAIC04NDQsNiAr
ODUzLDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5s
aW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRy
PEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIEhhc2hNYXA8
Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5dGVjb2RlS2ls
bHM7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9mZnNldD4+IG1f
c2FmZVRvTG9hZDsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVt
YmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9v
cHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRp
R2V0QnlPZmZzZXREYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwg
IjoiKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAg
b3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6
CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChjb25zdGFudCgpLCBjb250
ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmlu
dChvZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBl
OgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCksICJAIiwgcG9pbnRlckR1bXBJbkNvbnRleHQo
cHJvdG90eXBlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9p
ZCBHZXRCeU9mZnNldE1ldGhvZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0
Q2FzZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSwgIjoi
LCBpbkNvbnRleHQobV9tZXRob2QsIGNvbnRleHQpKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1l
c3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgR2V0QnlPZmZzZXRNZXRob2Q6OktpbmQga2luZCkKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlk
OgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0
YW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2Fk
OgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
R2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQo
IkxvYWRGcm9tUHJvdG90eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKyNk
ZWZpbmUgREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVk
ZSAiU3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgRnJvemVuVmFsdWU7CisKK2NsYXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsKK3B1YmxpYzoK
KyAgICBlbnVtIEtpbmQgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBDb25zdGFudCwKKyAg
ICAgICAgTG9hZCwKKyAgICAgICAgTG9hZEZyb21Qcm90b3R5cGUKKyAgICB9OworICAgIAorICAg
IEdldEJ5T2Zmc2V0TWV0aG9kKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFudChGcm96ZW5W
YWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3Rh
bnQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsK
KyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gTG9hZDsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhv
ZCBsb2FkRnJvbVByb3RvdHlwZShGcm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBMb2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUu
bG9hZC5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkOyB9CisgICAgCisg
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgRnJvemVu
VmFsdWUqIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
Q29uc3RhbnQpOworICAgICAgICByZXR1cm4gdS5jb25zdGFudDsKKyAgICB9CisgICAgCisgICAg
RnJvemVuVmFsdWUqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5wcm90b3R5
cGU7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWQgfHwga2luZCgpID09IExvYWRGcm9tUHJv
dG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Cisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHVu
aW9uIHsKKyAgICAgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50OworICAgICAgICBzdHJ1Y3Qgewor
ICAgICAgICAgICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1fa2lu
ZDsKK307CisKK2NsYXNzIE11bHRpR2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBNdWx0
aUdldEJ5T2Zmc2V0Q2FzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2Qm
IG1ldGhvZCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9k
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzZXQoKSB7IHJldHVybiBt
X3NldDsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
ZXQ7IH0KKyAgICBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRob2Q7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
LCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIFN0cnVjdHVyZVNldCBtX3NldDsKKyAgICBHZXRCeU9mZnNldE1l
dGhvZCBtX21ldGhvZDsKK307CisKK3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CisgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENh
c2UsIDI+IGNhc2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6Okdl
dEJ5T2Zmc2V0TWV0aG9kOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NzQ4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXBv
Y2guaCIKICNpbmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0
QnlPZmZzZXREYXRhLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZH
Tm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwxMSArNjYsNiBA
QCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXI7CiB9OwogCi1zdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgewotICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXI7Ci0gICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsK
LX07Ci0KIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlcjsKICAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlz
aW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsMTAgKzMyOCwxOCBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNl
IEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZz
ZXQ7CisKKyAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVj
dHVyZXNBcmVXYXRjaGVkKSB7CisgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9
IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAg
ICAgICAgICAgICAgIGlmIChncmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAgaWYgKHZhbHVl
LmlzSW5maW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAg
aWYgKCF2YWx1ZVtpXS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTM0MSw0MiArMzQ5LDI4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0
cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7
CiAgICAgICAgIC8vIFdlIGNhbid0IGFsd2F5cyBndWFyYW50ZWUgdGhhdCB0aGUgTXVsdGlHZXRC
eU9mZnNldCBpcyBzYWZlIHRvIGV4ZWN1dGUgaWYgaXQKLSAgICAgICAgLy8gY29udGFpbnMgbG9h
ZHMgZnJvbSBwcm90b3R5cGVzLiBXZSBrbm93IHRoYXQgaXQgd29uJ3QgbG9hZCBmcm9tIHRob3Nl
IHByb3RvdHlwZXMgaWYKLSAgICAgICAgLy8gd2Ugd2F0Y2ggdGhlIG11dGFiaWxpdHkgb2YgdGhl
IHByb3BlcnRpZXMgYmVpbmcgbG9hZGVkLiBTbywgaGVyZSB3ZSB0cnkgdG8KLSAgICAgICAgLy8g
Y29uc3RhbnQtZm9sZCBwcm90b3R5cGUgbG9hZHMsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSBjbGFp
bSB0aGF0IHdlIGNhbm5vdCBob2lzdC4gV2UKLSAgICAgICAgLy8gYWxzbyBrbm93IHRoYXQgYSBs
b2FkIGlzIHNhZmUgdG8gZXhlY3V0ZSBpZiB3ZSBhcmUgd2F0Y2hpbmcgdGhlIHByb3RvdHlwZSdz
Ci0gICAgICAgIC8vIHN0cnVjdHVyZS4KLSAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMpIHsKLSAg
ICAgICAgICAgIGlmICghdmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBJdCdzIG5vdCBhIHByb3RvdHlwZSBsb2FkLgotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJhc2Ug
PSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96
ZW4gPSBncmFwaC5mcmVlemUoYmFzZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuc3RydWN0dXJl
Q2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQKLSAgICAgICAgICAgICAgICAm
JiBmcm96ZW4tPnN0cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpCi0gICAgICAgICAgICAgICAg
JiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkg
ewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgd2F0Y2hpbmcgdGhhdCBpdCdzIHNh
ZmUgdG8gbG9hZCBmcm9tIHRoaXMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQg
PSBncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgIHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQo
KSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAg
Ly8gQ291bGRuJ3QgY29uc3RhbnQtZm9sZCBhIHByb3RvdHlwZSBsb2FkLiBUaGVyZWZvcmUsIHdl
IHNob3VsZG4ndCBob2lzdAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHNhZmV0eSBv
ZiB0aGUgbG9hZCBkZXBlbmRzIG9uIHN0cnVjdHVyZSBjaGVja3Mgb24gdGhlIHByb3RvdHlwZSwK
LSAgICAgICAgICAgICAgICAvLyBhbmQgd2UncmUgdG9vIGNoZWFwIHRvIHZlcmlmeSB0aGF0IGhl
cmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBjb250YWlucyBs
b2FkcyBmcm9tIHByb3RvdHlwZXMuIElmIHRoZSBsb2FkIHJlcXVpcmVzIGEgY2hlY2sgaW4gSVIs
IHdoaWNoIGlzIHJhcmUsIHRoZW4KKyAgICAgICAgLy8gd2UgY3VycmVudGx5IGNsYWltIHRoYXQg
d2UgZG9uJ3Qga25vdyBpZiBpdCdzIHNhZmUgdG8gZXhlY3V0ZSBiZWNhdXNlIGZpbmRpbmcgdGhh
dAorICAgICAgICAvLyBjaGVjayBpbiB0aGUgYWJzdHJhY3Qgc3RhdGUgd291bGQgYmUgaGFyZC4g
SWYgdGhlIGxvYWQgcmVxdWlyZXMgd2F0Y2hwb2ludHMsIHdlIGp1c3QKKyAgICAgICAgLy8gY2hl
Y2sgaWYgd2UncmUgbm90IGluIGEgY2xvYmJlcmVkIHN0YXRlIChpLmUuIGluIGJldHdlZW4gYSBz
aWRlIGVmZmVjdCBhbmQgYW4KKyAgICAgICAgLy8gaW52YWxpZGF0aW9uIHBvaW50KS4KKyAgICAg
ICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9k
IG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZC5r
aW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50
OiAvLyBPSyBiZWNhdXNlIGNvbnN0YW50cyBhcmUgYWx3YXlzIHNhZmUgdG8gZXhlY3V0ZS4KKyAg
ICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6IC8vIE9LIGJlY2F1c2UgdGhl
IE11bHRpR2V0QnlPZmZzZXQgaGFzIGl0cyBvd24gY2hlY2tzIGZvciBsb2FkaW5nIGZyb20gc2Vs
Zi4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRN
ZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgT0sgaWYg
dGhlIHN0YXRlIGlzbid0IGNsb2JiZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2Uu
CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpICE9IFN0
cnVjdHVyZXNBcmVXYXRjaGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaWYgKCFncmFwaC5pc1NhZmVUb0xvYWQobWV0aG9kLnByb3RvdHlwZSgp
LT5jYXN0PEpTT2JqZWN0Kj4oKSwgbWV0aG9kLm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwgZWl0aGVyOgot
ICAgICAgICAgICAgLy8gLSBOb3QgbG9hZCBmcm9tIHRoZSBwcm90b3R5cGUgYmVjYXVzZSBjb25z
dGFudCBmb2xkaW5nIHdpbGwgc3VjY2VlZCBpbiB0aGUKLSAgICAgICAgICAgIC8vICAgYmFja2Vu
ZCwgb3IKLSAgICAgICAgICAgIC8vIC0gRW1pdCBpbnZhbGlkIGNvZGUgdGhhdCBmYWlscyB3YXRj
aHBvaW50IGNoZWNrcy4gVGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlCi0gICAgICAgICAgICAvLyAg
IHByb3BlcnR5IGJlY29tZXMgbXV0YWJsZSBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB3ZSBhbHJl
YWR5IHNldCB0aGUgd2F0Y2hwb2ludAotICAgICAgICAgICAgLy8gICBhYm92ZS4gVGhpcyBjYXNl
IGlzIE9LIHNpbmNlIHRoZSBjb2RlIHdpbGwgZmFpbCB3YXRjaHBvaW50IGNoZWNrcyBhbmQgbmV2
ZXIKLSAgICAgICAgICAgIC8vICAgZ2V0IGluc3RhbGxlZC4KICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4Niw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlcyh2YXJpYW50LnN0cnVjdHVyZVNldCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhp
bmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUn
cy4gRG9uJ3QgbmVlZCB0byB3YXRjaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNh
bGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYg
YW55IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXRE
YXRhKCkuY2FzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZXMo
Z2V0Q2FzZS5zZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NzAsMjQgKzM4NzAsMjQgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAoZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IC8vIFByb3RlY3QgYWdhaW5zdCBjcmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRoIHplcm8gaW5w
dXRzLiBMTFZNIGRvZXNuJ3QgbGlrZSB0aGF0LgogICAgICAgICAgICAgdGVybWluYXRlKEJhZENh
Y2hlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
VmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXplKCkpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS5jYXNlcy5zaXplKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykKICAgICAgICAg
ICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBj
YXNlICIsIGkpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTXVsdGlHZXRCeU9mZnNldCBmYWlsIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY29udGlu
dWF0aW9uIikpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2Vz
OwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEdldEJ5SWRWYXJp
YW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KClbal07Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgpOyBqLS07KSB7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNlLnNldCgpW2pd
OwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAg
ICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJs
b2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CiAgICAgICAgICAgICB9CkBAIC0zODk4LDI5ICszODk4LDM2
IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0
QmxvY2s7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3Vs
dHM7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52
YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIEdldEJ5
T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNp
emUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBi
YXNlU2V0Lm1lcmdlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdDsKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQ7Ci0gICAgICAgICAg
ICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdGFu
dFJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2
YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb25zdGFu
dFJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFs
dWU6OmVuY29kZShjb25zdGFudFJlc3VsdCkpOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUo
bWV0aG9kLmNvbnN0YW50KCktPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6
CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTog
ewogICAgICAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eUJhc2UgPSB3ZWFrUG9pbnRlcih2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zm
c2V0TWV0aG9kOjpMb2FkKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBiYXNl
OwotICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkp
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2Ug
PSB3ZWFrUG9pbnRlcihtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxsKCkpOworICAg
ICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJhc2Us
IG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBs
b2FkUHJvcGVydHkocHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQu
b2Zmc2V0KCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQ
cm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZp
ZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKHJlc3VsdCkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODc0
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KAogICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBh
Y3QpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZp
cmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpCiAgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAg
ICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0
NyArMTMyLDMzIEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgog
fQogCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsK
LSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVy
ZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxv
Y2spKTsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIC8vIElm
IHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJl
IHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgICAgICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgot
ICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0
KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGJy
YW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBqaXQsCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAg
ICAgICAgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRj
aEluZWZmZWN0aXZlV2F0Y2hwb2ludCk7Ci0gICAgICAgICAgICBvay5saW5rKCZqaXQpOwotICAg
ICAgICB9CitzdGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgTWFjcm9Bc3NlbWJsZXImIGpp
dCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hH
UFIpCit7CisgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUo
KS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCisgICAgICAgICAgICBzdHViSW5mby5hZGRXYXRj
aHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwg
c2NyYXRjaEdQUik7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmpl
Y3QoKS0+c3RydWN0dXJlKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVy
ZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVy
ZSkpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlv
bi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAg
ICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Cisg
ICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0YXRp
YyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlw
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAg
ICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwot
ICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90eXBl
LmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CitzdGF0aWMg
dm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAg
ICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAg
fQogfQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRj
aEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgdGFyZ2V0KQpAQCAtMjk2LDExICsyODIsMTIgQEAgc3RhdGljIEZ1bmN0aW9uUHRy
IGN1c3RvbUZvcihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgRnVu
Y3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBX
YXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nl
c3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVj
dHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOwor
ICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzNyArMzMzLDMxIEBAIHN0YXRpYyBi
b29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0lt
cHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJl
UHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykp
OwogCiAgICAgaWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChz
dHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJy
U3RydWN0dXJlID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwot
ICAgIGlmIChjaGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBj
aGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSwgKytpdCkgewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0
dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBw
cm90b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlm
IChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hw
b2ludHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJl
UHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykp
OwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgIHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1
YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAg
ICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NF
UlQoIXByb3RvT2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0
dXJlKTsKKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0
aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOworCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBTdHJ1
Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgp
KQorICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlv
bigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAgICB9CiAgICAg
Ci0gICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KCp2bSwgb2Zmc2V0KTsKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJS
ZWc7CiAgICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikg
eworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8v
IFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0
byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYg
KGxvYWRUYXJnZXRGcm9tUHJveHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwg
YmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0
dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgYmFz
ZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBGb3IgcHJveHkgb2JqZWN0cywgd2UgbmVlZCB0byBkbyBhbGwgdGhlIFN0cnVjdHVyZSBj
aGVja3MgYmVmb3JlIG1vdmluZyB0aGUgYmFzZUdQUiBpbnRvCkBAIC02MjcsOSArNjA4LDggQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNlbGwoVgogICAgICAgICBhc09iamVj
dChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwogICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwogICAgIH0KLSAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgaWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blBy
b3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHMoKSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgp
KQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIHJldHVybiBBdHRlbXB0VG9D
YWNoZTsKQEAgLTgyNywyMSArODA3LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlC
dWlsZEdldEJ5SUQKICAgICB9CiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90Lmlz
VW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKKyAg
ICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgCiAg
ICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsK
ICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
IAogICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICBjb3VudCA9IG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBjb25kaXRp
b25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JD
aGFpbkFjY2VzcygKLSAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJh
c2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90
eXBlQ2hhaW4pCisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5w
cm90b3R5cGVDaGFpbihleGVjKTsKKworICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/
IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQo
KTsKICAgICB9CiAgICAgCiAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8pOwpAQCAtODUyLDcgKzgzMyw3IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVC
eUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihz
bG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCAKKyAgICAgICAg
ZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNv
bmRpdGlvblNldCwgb2Zmc2V0LCAKICAgICAgICAgc3RydWN0dXJlLCBsb2FkVGFyZ2V0RnJvbVBy
b3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgCiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldChzdHVi
SW5mbykpLCBzdHViUm91dGluZSk7CkBAIC04NzEsNyArODUyLDcgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIAogICAgIGxpc3QtPmFkZEFjY2VzcyhHZXRC
eUlkQWNjZXNzKAogICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGFj
Y2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsCi0gICAgICAgIHByb3RvdHlwZUNoYWlu
LCBjb3VudCkpOworICAgICAgICBjb25kaXRpb25TZXQpKTsKICAgICAKICAgICBwYXRjaEp1bXBU
b0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKICAg
ICAKQEAgLTk5MywyNiArOTc0LDI4IEBAIHN0YXRpYyBib29sIGVtaXRQdXRSZXBsYWNlU3R1YigK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRp
b25TdHViQW5kR2V0T2xkU3RydWN0dXJlKEV4ZWNTdGF0ZSogZXhlYywgVk0qIHZtLCBTdHJ1Y3R1
cmUqJiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCAKLSAgICBjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBw
dXRLaW5kKQorc3RhdGljIGJvb2wgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgVk0qIHZtLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCAKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kLAorICAgIFN0cnVjdHVyZSomIG9sZFN0cnVj
dHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKIHsKICAgICBQ
cm9wZXJ0eU5hbWUgcG5hbWUoaWRlbnQpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICBpZiAoIW9sZFN0
cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8IHBh
cnNlSW5kZXgocG5hbWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgUHJvcGVydHlPZmZzZXQgcHJvcGVydHlPZmZzZXQ7CiAgICAgc3RydWN0
dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
Q29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCAwLCBwcm9wZXJ0eU9mZnNl
dCk7CiAKICAgICBpZiAoIXN0cnVjdHVyZSB8fCAhc3RydWN0dXJlLT5pc09iamVjdCgpIHx8IHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSBy
ZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCiAgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtl
IGl0IGhhcHBlbi4KICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CiAgICAg
ICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkKICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQg
cmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCkBAIC0xMDIwLDE0ICsxMDAzLDE0IEBAIHN0
YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKICAgICBpZiAob2xkU3RydWN0dXJlLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpID09IEludmFsaWRQ
cm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBTdHJ1Y3R1cmVD
aGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBlbWl0UHV0VHJhbnNpdGlvblN0dWIKKyAg
ICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgICAgICAgICAgKnZtLCBl
eGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRl
bnQuaW1wbCgpKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1
cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4mIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CkBAIC0xMDgzLDE3ICsxMDY2
LDggQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCAKICAgICAgICAgb2xkU3RydWN0dXJlKSk7CiAgICAgCi0gICAgYWRkU3RydWN0dXJlVHJh
bnNpdGlvbkNoZWNrKAotICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAg
ICAgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGly
ZWN0KSB7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90
eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgp
LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAg
ICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2hlY2tP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsK
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKQEAgLTEyMjgs
NyArMTIwMiw3IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAg
ICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJs
b2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCkBAIC0xMjU2LDgg
KzEyMzAsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAg
ICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLAogICAgICAgICAgICAgc3RydWN0dXJlKTsKLQotICAgIHJldHVybiBvbGRT
dHJ1Y3R1cmU7CisgICAgCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2lu
ZCBwdXRLaW5kKQpAQCAtMTI4MSwxMiArMTI1NSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBz
bG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFBy
b3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKIAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywg
dm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLSAgICAgICAg
ICAgIGlmICghb2xkU3RydWN0dXJlKQorICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmU7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
CisgICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0
dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0
aW9uU2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluaygKICAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KApAQCAtMTI5NCw3ICsxMjY3LDcgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgICAgICAgICByZXBh
dGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJv
cHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CisgICAgICAgICAgICBzdHViSW5mby5p
bml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBv
bGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBwdXRLaW5kID09IERpcmVjdCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAg
ICAgIH0KQEAgLTEzMTIsMjAgKzEyODUsMjIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnlJRAogICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9u
dFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAK
LSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgc2l6ZV90
IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZSAhPSBzbG90LmJhc2UoKSkgewotICAg
ICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4
ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LCBvZmZzZXQpOwotICAgICAgICAgICAg
aWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAg
IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0
KAorICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhl
Yywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLSAgICAgICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihleGVjKTsKLSAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlz
dDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5l
cmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1
c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZv
LCBjb25kaXRpb25TZXQsCiAgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51
bGxwdHIsCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSksCkBAIC0xMzM2LDcgKzEzMTEsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNj
ZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNz
OjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1
Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJv
dXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3Rv
bVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CkBAIC0xMzgwLDE3ICsxMzU1LDE2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWls
ZFB1dEJ5SWQKICAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUgdG8gcmVjdXJzaW9u
LgogCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0
aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLQotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1
Y3R1cmUpIAorICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBp
ZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4o
ZXhlYyk7CiAgICAgICAgICAgICBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwog
ICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAogICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nl
c3M6OnRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0
cnVjdHVyZSwgY29uZGl0aW9uU2V0LAogICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkp
OwogCiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDIzLDIxICsxMzk3LDI1IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCiAgICAgICAgICYmIHN0dWJJbmZv
LnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNo
YWluID0gMDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZSAh
PSBzbG90LmJhc2UoKSkgewotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVD
aGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIHByb3BlcnR5
TmFtZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBl
Q2hhaW4pCisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAg
ICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgK
KyAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIHByb3Rv
dHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAgfQor
ICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zm
c2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRP
ZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7
CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0
dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAg
ICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90
KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtp
bmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29u
ZGl0aW9uU2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRy
LAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKQEAgLTE0NDgsNyArMTQyNiw3
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAgbGlz
dC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVT
ZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNl
dHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90
LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTE0ODcsMTEgKzE0NjUsMTcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgqdm0pOwogICAgIAot
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgSlNWYWx1ZSBmb3VuZFNsb3RC
YXNlID0gd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCk7Ci0gICAgc2l6ZV90
IGNvdW50ID0gIWZvdW5kU2xvdEJhc2UgfHwgZm91bmRTbG90QmFzZSAhPSBiYXNlID8gCi0gICAg
ICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJl
LCBmb3VuZFNsb3RCYXNlLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgOiAwOwotICAgIGlmIChjb3Vu
dCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICBpZiAoc2xvdC5z
bG90QmFzZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RC
YXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwg
aWRlbnQuaW1wbCgpKTsKKyAgICB9CisgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKICAgICBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKQEAgLTE1MTYsNyArMTUw
MCw2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4q
IGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIAogICAgIHsKQEAgLTE1NDcsMTggKzE1MzAs
OCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICBpZiAo
c2xvdC53YXRjaHBvaW50U2V0KCkpCiAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKS0+
YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKLSAgICAgICAgU3RydWN0
dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlw
ZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0g
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0gcHJvdG90eXBlLT5zdHJ1Y3R1
cmUoKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAg
ICAgICAgICBwcm90b3R5cGUsIHByb3RvU3RydWN0dXJlLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1
YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQ
cm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJX
YXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQo
Y29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAg
ICAgICB9CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICAg
ICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZh
aWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTkyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4u
aCIKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgotI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCi0gICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCi0gICAgLCBtX3Byb3RvdHlw
ZShwcm90b3R5cGUpCi17Ci0gICAgQVNTRVJUKG1fcHJvdG90eXBlLmlzTnVsbCgpIHx8IG1fcHJv
dG90eXBlLmlzT2JqZWN0KCkpOwotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGFzT2JqZWN0KHByb3RvdHlw
ZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90
eXBlU3RydWN0dXJlKCkpCi0gICAgICAgIG1fdmVjdG9yLmFwcGVuZChjdXJyZW50KTsKLX0KLQot
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWQpCi0gICAgOiBtX2dsb2JhbE9iamVj
dChnbG9iYWxPYmplY3QpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29r
dXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGlmIChtX3Byb3RvdHlwZS5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gYXNPYmplY3QobV9w
cm90b3R5cGUpLT5zdHJ1Y3R1cmUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3Jl
ZFByb3RvdHlwZVN0cnVjdHVyZSgpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY3VycmVudCk7
Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlKiBwcm90b3R5cGVT
dHJ1Y3R1cmUpCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2Jq
ZWN0KSkKLXsKLSAgICBtX3ZlY3Rvci5hcHBlbmQocHJvdG90eXBlU3RydWN0dXJlKTsKLX0KLQot
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pCi0gICAg
OiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQotICAgICwgbV9wcm90
b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBjaGFpbi0+aGVhZCgpW2ldOyArK2kpCi0gICAgICAgIG1fdmVj
dG9yLmFwcGVuZChjaGFpbi0+aGVhZCgpW2ldLmdldCgpKTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNvdW50KQotICAg
IDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJv
dG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1fdmVjdG9yLmFw
cGVuZChjaGFpbi0+aGVhZCgpW2ldLmdldCgpKTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6fkludGVuZGVkU3RydWN0dXJlQ2hhaW4oKQotewotfQotCi1ib29sIEludGVuZGVkU3RydWN0
dXJlQ2hhaW46OmlzU3RpbGxWYWxpZCgpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSBjdXJyZW50UHJv
dG90eXBlID0gbV9wcm90b3R5cGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVj
dG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhc09iamVjdChjdXJyZW50UHJvdG90eXBl
KS0+c3RydWN0dXJlKCkgIT0gbV92ZWN0b3JbaV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGN1cnJlbnRQcm90b3R5cGUgPSBtX3ZlY3RvcltpXS0+c3RvcmVkUHJvdG90eXBl
KCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJl
Q2hhaW46Om1hdGNoZXMoU3RydWN0dXJlQ2hhaW4qIGNoYWluKSBjb25zdAotewotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
bV92ZWN0b3JbaV0gIT0gY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGNoYWluLT5oZWFkKClbbV92ZWN0b3Iuc2l6ZSgpXSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW46Om1heUludGVyY2VwdFN0b3JlVG8oVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gbV92ZWN0b3JbaV0tPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMp
OwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjppc05vcm1h
bGl6ZWQoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7
ICsraSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fdmVjdG9yW2ldOwotICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjp0YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpCi17Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBpZiAoYXQo
aSktPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1KU09iamVjdCogSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGVybWluYWxQcm90b3R5cGUoKSBjb25zdAotewotICAgIEFT
U0VSVCghbV92ZWN0b3IuaXNFbXB0eSgpKTsKLSAgICBpZiAobV92ZWN0b3Iuc2l6ZSgpID09IDEp
Ci0gICAgICAgIHJldHVybiBhc09iamVjdChtX3Byb3RvdHlwZSk7Ci0gICAgcmV0dXJuIGFzT2Jq
ZWN0KG1fdmVjdG9yW21fdmVjdG9yLnNpemUoKSAtIDJdLT5zdG9yZWRQcm90b3R5cGUoKSk7Ci19
Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6b3BlcmF0b3I9PShjb25zdCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9nbG9iYWxPYmpl
Y3QgPT0gb3RoZXIubV9nbG9iYWxPYmplY3QKLSAgICAgICAgJiYgbV9wcm90b3R5cGUgPT0gb3Ro
ZXIubV9wcm90b3R5cGUKLSAgICAgICAgJiYgbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7Ci19
Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6Z2F0aGVyQ2hlY2tzKENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikgY29uc3QKLXsKLSAgICBKU1ZhbHVlIGN1cnJlbnRQ
cm90b3R5cGUgPSBtX3Byb3RvdHlwZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRPYmplY3QgPSBhc09iamVjdChj
dXJyZW50UHJvdG90eXBlKTsKLSAgICAgICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0g
YXQoaSk7Ci0gICAgICAgIHZlY3Rvci5hcHBlbmQoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjayhjdXJy
ZW50T2JqZWN0LCBjdXJyZW50U3RydWN0dXJlKSk7Ci0gICAgICAgIGN1cnJlbnRQcm90b3R5cGUg
PSBjdXJyZW50U3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpOwot
ICAgIH0KLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2lu
dGVyKCZtX2dsb2JhbE9iamVjdCk7Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVl
KCZtX3Byb3RvdHlwZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV92ZWN0b3Iuc2l6ZSgpOyBp
LS07KQotICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmbV92ZWN0b3Jb
aV0pOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Ci19Ci0KLXZvaWQgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoCi0gICAgICAgICIoZ2xv
YmFsID0gIiwgUmF3UG9pbnRlcihtX2dsb2JhbE9iamVjdCksICIsIGhlYWQgPSAiLAotICAgICAg
ICBpbkNvbnRleHQobV9wcm90b3R5cGUsIGNvbnRleHQpLCAiLCB2ZWN0b3IgPSBbIik7Ci0gICAg
Q29tbWFQcmludGVyIGNvbW1hOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rv
ci5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29u
dGV4dChtX3ZlY3RvcltpXSwgY29udGV4dCkpOwotICAgIG91dC5wcmludCgiXSkiKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDE4NzQ4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbl9oCi0jZGVmaW5lIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faAotCi0jaW5jbHVkZSAiQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7
Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIFN0cnVjdHVyZUNoYWluOwotY2xhc3MgVk07
Ci1zdHJ1Y3QgRHVtcENvbnRleHQ7Ci0KLWNsYXNzIEludGVuZGVkU3RydWN0dXJlQ2hhaW4gOiBw
dWJsaWMgUmVmQ291bnRlZDxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiB7Ci1wdWJsaWM6Ci0gICAg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSk7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJvdG90
eXBlU3RydWN0dXJlKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbik7Ci0gICAgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFk
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNvdW50KTsKLSAgICB+SW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbigpOwotICAgIAotICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7Ci0g
ICAgYm9vbCBtYXRjaGVzKFN0cnVjdHVyZUNoYWluKikgY29uc3Q7Ci0gICAgYm9vbCBtYXlJbnRl
cmNlcHRTdG9yZVRvKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotICAgIGJvb2wgaXNOb3JtYWxp
emVkKCk7Ci0gICAgCi0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpOwotICAgIAotICAgIEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90
b3R5cGU7IH0KLSAgICAKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
LnNpemUoKTsgfQotICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3ZlY3RvcltpbmRleF07IH0KLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAKLSAgICBKU09iamVjdCogdGVy
bWluYWxQcm90b3R5cGUoKSBjb25zdDsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25z
dCB7IHJldHVybiBtX3ZlY3Rvci5sYXN0KCk7IH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBnYXRo
ZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYpIGNvbnN0OwotICAgIAotICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIEpTR2xvYmFsT2JqZWN0KiBtX2ds
b2JhbE9iamVjdDsKLSAgICBKU1ZhbHVlIG1fcHJvdG90eXBlOwotICAgIFZlY3RvcjxTdHJ1Y3R1
cmUqPiBtX3ZlY3RvcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw0OCArMTk0LDYg
QEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQWRkKENhbGxGcmFtZSogYwogCiAjZGVmaW5lIElu
dmFsaWRQcm90b3R5cGVDaGFpbiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkK
IAotaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBzbG90QmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgc2xvdE9m
ZnNldCkKLXsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7Ci0gICAgc2l6ZV90IGNvdW50
ID0gMDsKLSAgICAgICAgCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90b3R5cGVDaGFpbjsKLQot
ICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7
Ci0gICAgICAgIGlmICh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAh
dHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAg
ICByZXR1cm4gSW52YWxpZFByb3RvdHlwZUNoYWluOwotICAgICAgICAgICAgCi0gICAgICAgIEpT
VmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7Ci0KLSAg
ICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgc2xvdEJhc2UgaW4gdGhlIGJhc2UncyBwcm90b3R5
cGUgY2hhaW4sIHRoZW4gdGhlIGJhc2UKLSAgICAgICAgLy8gbXVzdCBiZSBhIHByb3h5IGZvciBh
bm90aGVyIG9iamVjdC4KLQotICAgICAgICBpZiAodi5pc051bGwoKSkgewotICAgICAgICAgICAg
aWYgKCFzbG90QmFzZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJldHVy
biBJbnZhbGlkUHJvdG90eXBlQ2hhaW47Ci0gICAgICAgIH0KLQotICAgICAgICBKU0NlbGwqIGNl
bGwgPSB2LmFzQ2VsbCgpOwotICAgICAgICBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0p
OwotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBsb29w
LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAotICAgICAgICAvLyBzaG91bGQgbm90IGJlIHRyZWF0
ZWQgYXMgYSBkaWN0aW9uYXJ5LgotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkgewotICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2
bSwgYXNPYmplY3QoY2VsbCkpOwotICAgICAgICAgICAgaWYgKHNsb3RCYXNlID09IGNlbGwpCi0g
ICAgICAgICAgICAgICAgc2xvdE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5h
bWUpOyAKLSAgICAgICAgfQotICAgICAgICArK2NvdW50OwotCi0gICAgICAgIGlmIChzbG90QmFz
ZSA9PSBjZWxsKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1
cm4gY291bnQ7Ci19Ci0KIGlubGluZSBzaXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNJiB2bSA9
IGNhbGxGcmFtZS0+dm0oKTsKQEAgLTI1OCwyMyArMjE2LDYgQEAgaW5saW5lIHNpemVfdCBub3Jt
YWxpemVQcm90b3R5cGVDaGFpbihDYQogICAgIH0KIH0KIAotaW5saW5lIGJvb2wgaXNQcm90b3R5
cGVDaGFpbk5vcm1hbGl6ZWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCi17Ci0gICAgZm9yICg7OykgewotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c1Byb3h5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgSlNWYWx1ZSB2ID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgaWYgKHYuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIAotICAgICAgICBzdHJ1Y3R1cmUgPSB2LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gT3BlcmF0aW9uc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0
MTIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgZWxz
ZQogICAgICAgICBtYXhUcmFuc2l0aW9uTGVuZ3RoID0gc19tYXhUcmFuc2l0aW9uTGVuZ3RoOwog
ICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Db3VudCgpID4gbWF4VHJhbnNpdGlvbkxlbmd0
aCkgewotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25h
cnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIGRlZmVy
cmVkKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0aW9uKTsKICAgICAgICAg
b2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwog
ICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsKQEAgLTQ4OSwxMSArNDg5LDExIEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmEKICAgICByZXR1cm4gc3RydWN0dXJlOwog
fQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBraW5kKQorU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBj
cmVhdGUodm0sIHN0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwg
ZGVmZXJHQyk7CkBAIC01MDcsOSArNTA3LDkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGlj
dGlvbmFyeVRyYW5zaQogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFy
eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGVmZXJyZWRTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewotICAgIHJldHVybiB0b0Rp
Y3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kKTsK
KyAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBDYWNoZWRE
aWN0aW9uYXJ5S2luZCwgZGVmZXJyZWQpOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9V
bmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCkBAIC03NjEsNiArNzYxLDEwIEBAIHZvaWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRh
KFZNJiB2bSkKIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNl
bWVudFdhdGNocG9pbnRTZXQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAg
QVNTRVJUKCFpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKworICAgIC8vIEluIHNvbWUgcGxh
Y2VzIGl0J3MgY29udmVuaWVudCB0byBjYWxsIHRoaXMgd2l0aCBhbiBpbnZhbGlkIG9mZnNldC4g
U28sIHdlIGRvIHRoZSBjaGVjayBoZXJlLgorICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkp
CiAgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOwpAQCAtNzgxLDExICs3ODUsNyBAQCB2b2lk
IFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yCiB7CiAgICAgQVNTRVJUKCFpc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBnZXQodm0sIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KTsKKyAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIGdldCh2bSwgcHJvcGVydHlOYW1lKSk7CiB9CiAKIHZvaWQgU3RydWN0
dXJlOjpkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
cmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMi0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTY4LDcgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiByZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zm
c2V0Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogY2hhbmdlUHJv
dG90eXBlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURp
Y3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYs
IFN0cnVjdHVyZSosIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9
IG51bGxwdHIpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5
VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlvbihWTSYsIFN0cnVj
dHVyZSopOwpAQCAtMTk0LDcgKzE5NCwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RpY3Rpb25h
cnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2lu
ZDsgfQogICAgIGJvb2wgaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBk
aWN0aW9uYXJ5S2luZCgpID09IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQ7IH0KICAgCi0gICAgYm9v
bCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQo
KSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZygpOyB9CisgICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlv
bmFyeUtpbmQKKyAgICAgICAgICAgICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZygpCisgICAgICAgICAgICAmJiAhKHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVy
dHlTbG90KCkgJiYgIXR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRz
KCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQor
ICAgICAgICAgICAgJiYgdHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKQor
ICAgICAgICAgICAgJiYgdHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHMoKTsKKyAgICB9CiAKICAgICAvLyBXZSB1c2UgU2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBm
b3Igc3RydWN0dXJlcyB0aGF0IG1heSBnZXQgbmV3IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRv
IHByZXZlbnQKICAgICAvLyBERkcgZnJvbSBpbmxpbmluZyBwcm9wZXJ0eSBhY2Nlc3NlcyBzaW5j
ZSBzdHJ1Y3R1cmVzIGRvbid0IHRyYW5zaXRpb24gd2hlbiBhIG5ldyBpbXB1cmUgcHJvcGVydHkg
YXBwZWFycy4KQEAgLTIwMiw3ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gdHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKTsKICAgICB9Ci0KKyAg
ICAKICAgICAvLyBUeXBlIGFjY2Vzc29ycy4KICAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0
IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9i
bG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3Qo
KSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KQEAgLTUyOCw3ICs1NDAs
NyBAQCBwcml2YXRlOgogICAgIC8vIHRvIHVubG9jayBpdC4KICAgICB2b2lkIGZpbmRTdHJ1Y3R1
cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiYgc3RydWN0
dXJlcywgU3RydWN0dXJlKiYsIFByb3BlcnR5VGFibGUqJik7CiAgICAgCi0gICAgc3RhdGljIFN0
cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25h
cnlLaW5kKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogCiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZN
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBQcm9wZXJ0eU9mZnNl
dCByZW1vdmUoUHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtNTM2LDYgKzUzNiw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb2RlKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImLCBXYXRjaHBvaW50Kik7
CisgICAgCiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBpdCBnb3QgbWVyZ2Vk
IHdpdGggSWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEltcHVyZVBy
b3BlcnR5KGNvbnN0IFN0cmluZyYpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODc1NjUpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAx
NS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBz
aG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG1pY3JvYmVuY2htYXJrIHRo
YXQgaWxsdXN0cmF0ZXMgdGhlIG5lZWQgZm9yIHRoaXMgZmVhdHVyZS4gVGhpcyBiZW5jaG1hcmsg
Z2V0cyA1OHggZmFzdGVyIHdpdGgKKyAgICAgICAgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBq
cy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0
aC1tdXRhdGluZy1wcm90b3R5cGUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qczog
QWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDE1LTA3LTI5ICBaYWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBzcGFubmVyIHBsYWNlaG9sZGVyIGZy
b20gbV9zcGFubmVyTWFwIHdoZW4gdGhlIHBsYWNlaG9sZGVyIG9iamVjdApJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBl
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3Rv
dHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0
YXRpbmctcHJvdG90eXBlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZQor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3du
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmct
cHJvdG90eXBlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wcm90
b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1w
cm90b3R5cGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNjZXNzLXdp
dGgtbXV0YXRpbmctcHJvdG90eXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3Byb3RvdHlwZS1hY2Nlc3Mt
d2l0aC1tdXRhdGluZy1wcm90b3R5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3Rv
dHlwZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxOCBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICB2YXIgcmVzdWx0
ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICByZXN1bHQg
Kz0gby5mOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBw
ID0ge2Y6NDJ9OwordmFyIG8gPSBPYmplY3QuY3JlYXRlKHApOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICBwWyJpIiArIGldID0gaTsKKyAgICB2YXIgcmVzdWx0ID0g
Zm9vKG8pOworICAgIGlmIChyZXN1bHQgIT0gNDIgKiAxMDApCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257812</attachid>
            <date>2015-07-29 21:30:25 -0700</date>
            <delta_ts>2015-07-30 14:07:56 -0700</delta_ts>
            <desc>fixed more bugs</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>300918</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2NiBA
QAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3Mu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpD
b21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9Db21wbGV4
R2V0U3RhdHVzLmg6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OkNvbXBsZXhHZXRT
dGF0dXMpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjp0YWtlc1Nsb3dQYXRoKToK
KyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6a2luZCk6CisgICAgICAgIChKU0M6OkNv
bXBsZXhHZXRTdGF0dXM6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6
OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmF0dHJpYnV0
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpzcGVjaWZpY1Zh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6Y2hhaW4pOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlh
bnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6R2V0
QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFu
dDo6YmFzZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yISk6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkVmFyaWFudDo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpjYWxsTGlua1N0YXR1
cyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojpjb25zdGFudENoZWNrcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNo
YWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0QmFycmllcik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRl
cik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdp
dGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmVx
dWl2YWxlbmNlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Om9wZXJh
dG9yISk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpvYmplY3QpOgor
ICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6Y29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dWlkKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVy
dHlDb25kaXRpb246Omhhc09mZnNldCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aGFzQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjph
dHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc1By
b3RvdHlwZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcm90b3R5
cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzUmVxdWlyZWRW
YWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpyZXF1aXJlZFZh
bHVlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc2gpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc0NvbXBhdGlibGVXaXRo
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OndhdGNoaW5nUmVxdWly
ZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoOjplcXVhbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvck9iamVjdCk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JDb25kaXRpb25LaW5kKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om51bWJlck9mQ29uZGl0aW9uc1dp
dGhLaW5kKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omhhc09u
ZVNsb3RCYXNlQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Om1lcmdlZFdpdGgpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KToKKyAgICAgICAgKEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Om5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQpOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxMaXZlKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyk6CisgICAgICAgIChKU0M6OmdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcyk6CisgICAgICAgIChKU0M6OmdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KToKKyAgICAgICAg
KiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9uRW1wdHkpOgor
ICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aXNWYWxpZCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojppc0VtcHR5KToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmVuZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpyZWxlYXNlUmF3UG9pbnRlcik6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIpOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6RGF0YTo6RGF0YSk6CisgICAgICAgICog
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5
SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+
R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnZpc2l0V2Vhayk6
CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOgorICAgICAgICAo
SlNDOjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJ
ZEFjY2Vzczo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y29uZGl0
aW9uU2V0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpjaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkdldEJ5SWRBY2Nlc3M6OmNoYWluQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2Rl
L1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
Ojpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjp2
aXNpdFdlYWspOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaDoK
KyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6UHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNj
ZXNzOjpzZXR0ZXIpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpuZXdTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpjb25kaXRpb25TZXQpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjpzdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRB
Y2Nlc3M6OmNoYWluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6Y2hh
aW5Db3VudCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJl
cXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlD
b25kaXRpb246OmlzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
Ojppc1dhdGNoYWJsZVdoZW5WYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
Ojppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJvcGVydHlDb25kaXRpb24pOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcik6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjplcXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp1aWQpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b246Om9mZnNldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpoYXNBdHRyaWJ1
dGVzKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmF0dHJpYnV0ZXMpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzUHJvdG90eXBlKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246OnByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjpoYXNSZXF1aXJlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OnJlcXVpcmVkVmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6
aGFzaCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzQ29tcGF0aWJsZVdpdGgpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246Ondh
dGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbkhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OnNldHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjptYWtl
c0NhbGxzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldp
dGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6OmtpbmQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9mZnNl
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpjYWxsTGlua1N0YXR1cyk6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojpjb25zdGFudENoZWNrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6flN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpwdXNoKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvOjp+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAg
KEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KToKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVu
Y2VBbmRBZGRXYXRjaHBvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQpOgorICAgICAgICAoSlND
OjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmNvZGVCbG9jayk6CisgICAgICAgIChK
U0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6c3R1YkluZm8pOgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0
V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBsYWNlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNldFNlZW4pOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aW5z
dGFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50OjpmaXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omtl
eSk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlBy
b3BlcnR5V2F0Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKiBkZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5z
dGFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50OjprZXkpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVj
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50
ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjplbWl0Q2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKToKKyAg
ICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
OjplbWl0R2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1Bo
YXNlOjphZGRCYXNlQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1Bo
YXNlOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjphZGRDaGVja3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVy
Vmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVk
VmFsdWVBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNo
cG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRX
YXRjaHBvaW50czo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hw
b2ludHM6OmNvbnNpZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6
OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphcmVT
dGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTZXRQb2ludGVyQWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZH
OjpTZXRQb2ludGVyQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpTZXRQb2ludGVyQWRhcHRvcjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5mZXJyZWRWYWx1ZUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6CisgICAgICAgIChK
U0M6OkRGRzo6SW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpERkc6OkFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjpoYXNCZWVuSW52YWxp
ZGF0ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFw
dG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6
CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVk
KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5D
b250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hl
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY1NldEFkYXB0b3I6OmFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY1NldEFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRl
ZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXppbHkpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6Y29udGFpbnMpOgorICAg
ICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaDoKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjp3YXRjaENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzU2Fm
ZVRvTG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxpdmVuZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5o
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppZGVudGlmaWVycyk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OndhdGNocG9pbnRzKToKKyAgICAgICAgKiBkZmcvREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhv
ZDo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNlOjpkdW1wSW5D
b250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcCk6
CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1l
dGhvZDo6R2V0QnlPZmZzZXRNZXRob2QpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0
TWV0aG9kOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6
OmxvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVBy
b3RvdHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6Om9wZXJhdG9y
ISk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OmtpbmQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpwcm90b3R5cGUpOgorICAgICAgICAoSlND
OjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok11
bHRpR2V0QnlPZmZzZXRDYXNlOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6TXVs
dGlHZXRCeU9mZnNldENhc2U6Om1ldGhvZCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2U6OnJ1bik6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRCeU9mZnNldCk6CisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZXBhdGNoQnlJZFNlbGZBY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMpOgorICAgICAgICAoSlNDOjpyZXBs
YWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUJ5SWRTdHViKToKKyAgICAgICAg
KEpTQzo6YWN0aW9uRm9yQ2VsbCk6CisgICAgICAgIChKU0M6OnRyeUJ1aWxkR2V0QnlJRExpc3Qp
OgorICAgICAgICAoSlNDOjplbWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjplbWl0
UHV0VHJhbnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5UmVwYXRj
aEluKToKKyAgICAgICAgKEpTQzo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpu
b3JtYWxpemVQcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluRm9yQ2hhaW5BY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppc1Byb3RvdHlw
ZUNoYWluTm9ybWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2lu
dFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9y
UmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5
UmVwbGFjZW1lbnQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICog
cnVudGltZS9WTS5oOgorCiAyMDE1LTA3LTI5ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTg3NTUwLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg3NDg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC05NywxMCArOTcsMTMgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29k
ZS9KdW1wVGFibGUuY3BwCiAgICAgYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
CiAgICAgYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKyAgICBieXRl
Y29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKKyAgICBieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAKICAgICBieXRlY29kZS9PcGNvZGUuY3BwCiAgICAgYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKICAgICBieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcAogICAgIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKKyAgICBi
eXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAogICAgIGJ5dGVjb2RlL1JlZHVj
ZVdoaXRlc3BhY2UuY3BwCkBAIC0xMjgsNiArMTMxLDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKIAogICAgIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCiAgICAgZGZnL0RGR0Fic3RyYWN0
VmFsdWUuY3BwCisgICAgZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHAKKyAgICBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAogICAg
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdBcmd1bWVu
dHNVdGlsaXRpZXMuY3BwCiAgICAgZGZnL0RGR0FyaXRoTW9kZS5jcHAKQEAgLTE5Niw2ICsyMDEs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdNaW5pZmllZEdyYXBo
LmNwcAogICAgIGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwCiAgICAgZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwCisgICAgZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAogICAgIGRm
Zy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAg
ICBkZmcvREZHTm9kZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvagkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRh
cmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5t
aWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVs
PSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNs
dWRlPSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+CkBAIC0zMzcsMTAgKzMzNywxMyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSnVtcFRhYmxlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRhcmdl
dHMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvcGVydHlD
b25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0
QnlJZFN0YXR1cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQ
dXRCeUlkVmFyaWFudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxSZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4KQEAgLTM2NSw2ICszNjgsOCBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJTY29wZS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcml0aE1vZGUuY3BwIiAvPgpAQCAtNDMzLDYgKzQz
OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50UmVtb3ZhbFBo
YXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFp
dmVEb21pbmF0b3JzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdO
YXR1cmFsTG9vcHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05v
ZGUuY3BwIiAvPgpAQCAtMTAwMSwxMSArMTAwNywxNCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExMSW50Q2FsbExpbmtJbmZvLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXE9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcT3BlcmFuZHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBv
bHltb3JwaGljR2V0QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRLaW5kLmgiIC8+CkBAIC0xMDQxLDYgKzEwNTAs
OCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SW50ZXJwcmV0
ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fi
c3RyYWN0VmFsdWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGphY2VuY3lMaXN0LmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWxsb2NhdG9yLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQW5hbHlzaXMuaCIgLz4KQEAgLTExMzMsNiArMTE0NCw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRJRC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05haXZlRG9taW5hdG9ycy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRBMUYwMERDOERF
NyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
Ki87IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBBQzNBNTUgLyog
REZHTWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5j
cHAgKi87IH07CisJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0
aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHAgKi87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29u
UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUREODRBMThB
OTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0y
OTMsOCArMjk1LDYgQEAKIAkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0Ey
QTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCN0UyQTE5QTExQjgwMDBEOUJDNTYgLyog
Q2FsbFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLzsgfTsK
IAkJMEYzQjdFMkIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNTE5QTExQjgwMDBEOUJD
NTYgLyogQ2FsbFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAg
Ki87IH07Ci0JCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNE
MEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUz
QTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEz
MUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTU4OCw2ICs1ODgsMTQgQEAKIAkJMEZEMkM5MjQxNkQwMUVFOTAw
Qzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgx
Q0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8q
IERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OworCQkwRkQz
RTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMDFCNjE4QUFGMDBD
ODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MDkx
QjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDAzMUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBGRDNFNDBBMUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5jcHAgKi87IH07CisJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNF
NDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBG
RDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDgxQjYxOEI2NjAwQzgw
RTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWlu
YXRvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovOyB9OwogCQkw
RkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAxNTRGQjRFQjAwOTgzRTcy
IC8qIERGR0RvbWluYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9OwpAQCAtNjk0
LDYgKzcwMiw4IEBACiAJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdFZGdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTFCMTZC
NjI3NzIwMDNGNjk2QiAvKiBERkdFZGdlLmNwcCAqLzsgfTsKIAkJMEZGMEYxOUYxNkI3MkExNzAw
NURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjExNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwICovOyB9OwogCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5
NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1bmN0aW9u
RXhlY3V0YWJsZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNl
dERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAq
LzsgfTsKKwkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYy
Q0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY0MjczMTE1OEVC
RDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1i
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjczMDE1OEVCRDQ0
MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZGNDI3NDAxNThF
QkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAvKiB1ZGlzODZf
ZGVjb2RlLmMgKi87IH07CkBAIC0xMzg5LDggKzEzOTksNiBAQAogCQlBNzg0QTI2NDExRDE2NjIy
MDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNr
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
Nzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1h
cERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZGNjQ3QTE4QzUyRTg1
MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwICovOyB9OwotCQlBNzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
NzhBOTc3NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZDMTc5NzM4Qjgw
MDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovOyB9OwogCQlBNzhBOTc3NTE3OTcz
OEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RDE3OTczOEI4MDA5REY3NDQgLyogREZH
RmFpbGVkRmluYWxpemVyLmggKi87IH07CiAJCUE3OEE5Nzc2MTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi87IH07
CkBAIC0xODU3LDYgKzE4NjUsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5k
ZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGV4
aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3
M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBwYXRo
ID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0UxQjU1
QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVy
SmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRp
c29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIxODlE
ODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJvZmls
ZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDQyLDggKzIwNTIsNiBAQAogCQkwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyog
REZHVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsaWRh
dGUuaDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFZhcmlhbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENv
bnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hl
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYx
QjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlE
MzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQ
b3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIzNDgsNiArMjM1NiwxNCBAQAogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0
dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgw
MEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0g
ZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTNGRjFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDsgcGF0aCA9
IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA1MUI2MThCNjYwMEM4
MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUg
LyogUHJvcGVydHlDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJvcGVydHlDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZENTY1
MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGggPSBkZmcv
REZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
ODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRG9taW5hdG9ycy5jcHA7IHBhdGggPSBkZmcvREZH
RG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUQwMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQ5LDYgKzI0NjUsOCBAQAogCQkwRkVGQzlB
ODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHBh
dGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFi
bGVBbGxvY2F0aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjA1
NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBE
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHBhdGggPSBkZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkYyQ0Q1
QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaDsgcGF0aCA9
IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc2Fzc2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0Mjcz
MDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBk
aXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGNDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdWRpczg2X2RlY29kZS5jOyBwYXRoID0gZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZGlzODZfZGVjb2RlLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zMTY5LDggKzMxODcsNiBAQAogCQlBNzdGMTgyMDE2NDA4OEIyMDA2NDBBNDcgLyog
Q29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVDYWNoZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcg
LyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTAxLDggKzQ1MTcsNiBAQAogCQkJCUE3QThBRjJCMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1
QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAv
KiBJbnQzMkFycmF5LmggKi8sCi0JCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAotCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4
ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUxOTlDMDUwMDgw
NjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJQTEyQkJGRjMxQjA0NEE5ODAwNjY0
QjY5IC8qIEludGxPYmplY3QuY3BwICovLApAQCAtNDg4OSw2ICs0OTAzLDEwIEBACiAJCQkJQTcw
NEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgg
Ki8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3Bw
ICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
Ki8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZEM0U0MDAxQjYxOEFBRjAwQzgw
RTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovLAor
CQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQg
LyogREZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAv
KiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZH
QW5hbHlzaXMuaCAqLywKQEAgLTUwNDgsNiArNTA2Niw4IEBACiAJCQkJMEYyQkRDM0UxNTIyODAx
NzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAogCQkJCTBGOEYxNDMxMUFERjA5MDEw
MEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLywKIAkJCQkwRjhGMTQzMjFB
REYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oICovLAorCQkJCTBGRjJD
RDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8sCisJ
CQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmgg
Ki8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5j
cHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMu
Y3BwICovLApAQCAtNTMxOSw4ICs1MzM5LDYgQEAKIAkJCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVC
NEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQwMkQgLyogQ29t
cGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY2RkM3NEYxOTYxMTBBODAwRTFEMDJEIC8qIENv
bXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8sCi0JCQkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5
IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAx
MzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAogCQkJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAv
KiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAogCQkJCTBGQzcxMkREMTdDRDg3
NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKQEAgLTUzNTMs
NiArNTM3MSwxMCBAQAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJCTE0Q0E5NThDMTZBQjUw
RkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJCTBGRDNFNDAz
MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJ
MEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi8s
CisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5NjlBMDc5NDBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi8s
CiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCkBAIC01MzY0
LDYgKzUzODYsOCBAQAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFBy
ZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8q
IFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQ
dXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
SWRWYXJpYW50LmNwcCAqLywKQEAgLTU4NzQsNiArNTg5OCw3IEBACiAJCQkJQzI5ODFGRDkxN0JB
RUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0
eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2
IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzQzgyODE0
MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2
QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTI2LDYg
KzYxNTEsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21iaW5lZERvbWFp
bnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzg4MTg1NjgzMzUwMDJFRDY5MiAvKiBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0MzhB
MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAv
KiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOEMxODU2ODMz
NTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MTM1LDcgKzYxNjEsNiBAQAogCQkJCUE3QThBRjNCMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURC
NUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0Ex
N0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4ODUz
RkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRy
aW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0OCw2ICs2MTczLDcgQEAKIAkJCQlCQzE4QzQx
NTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQ0VGREUw
RjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJG
MTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC02MzYyLDcgKzYzODgsNiBAQAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMy
MDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2
N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAwOENFNzE4NzYzMUI2MDA5NTVDMjQg
LyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3
RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlE
QjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAt
NjQ0NSw5ICs2NDcwLDExIEBACiAJCQkJMkFBRDk2NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vy
c2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4
MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEy
MDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTI0LDYgKzY1NTEsNyBAQAogCQkJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJl
RGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzE1LDYgKzczNDMsNyBAQAogCQkJ
CTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNh
Y2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMg
LyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQw
RDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJ
VEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMjUsNiArNzM1NCw3IEBACiAJCQkJ
MEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50
cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERG
R011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1
QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTczNzYsNiArNzQwNiw3IEBACiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1
Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0
MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBF
MUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4
QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4
MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzM4Niw3ICs3NDE3LDYgQEAKIAkJCQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIg
LyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0
QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2
MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5
RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc0MDMsNiArNzQzMyw3IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAw
NEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1
RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdB
ODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03NDU4LDcgKzc0ODksNiBAQAogCQkJCUE1MDNGQTFCMTg4RTBGQjAw
MDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAxM0U3QjIgLyogSlNM
b2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0QwQkJDMTk0QTQxNDMwMEZDOUNGOSAvKiBD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUQ3MDlCMTZE
RTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE3
MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc2NTEsNiArNzY4MSw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMyRDAwMTQ1M0E3IC8q
IFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0
QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJGMEYyRDExNkJB
RUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjBE
MEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzY2MCw2ICs3NjkxLDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyog
U3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMw
MDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4
MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRl
c3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1
NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw2IEBAIHZvaWQgQ29kZUJs
b2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIAogICAgICAgICAgICAg
U3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgICAgIFN0cnVjdHVyZSogcHJv
dG90eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9
IDA7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CkBAIC0z
NzAsMTEgKzM2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygK
ICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByb3RvdHlwZVN0cnVjdCIsIGJh
c2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAg
ICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICAgICAg
IG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7CiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CkBAIC0zODIsOSArMzc2
LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiKCIpOwogICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgImJh
c2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWxp
c3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBDaGFp
bihvdXQsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTQ1NiwxMCArNDUwLDggQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJ
ZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJldiIs
IHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksIGlk
ZW50KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAgICAgICAgICAgICAg
ZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5z
dHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlQ2hh
aW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAgICAgICAgICAg
IGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNl
dCkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJs
aXN0ID0gWyIpOwpAQCAtNDgzLDEwICs0NzUsOCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRQdXRC
eUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91
dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBT
dHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBDaGFpbihvdXQsIGFjY2Vzcy5jaGFpbigpLCBpZGVudCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vzcy5jb25kaXRp
b25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCIsICIsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJ1bmtub3duIik7CiAgICAgICAg
ICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHJl
dmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw2
IEBAIHZvaWQgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXIKICAgICAgICAgZGF0
YUxvZygiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiBvbiAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOwogCiAgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZk
ZXRhaWwpOwotCi0gICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgIHJlbW92ZSgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvbXBsZXhHZXRTdGF0dXMg
Q29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAotICAg
IHVuc2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgU3RydWN0
dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKICAgICAvLyBo
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0CkBAIC00
MCwzMiArMzksMzQgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdQog
ICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
OworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAogICAg
IENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBJbmxpbmVhYmxl
OwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAgICAgIHJlc3VsdC5t
X2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3VudCkpOworICAg
IGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJlc3VsdC5tX2No
YWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9jb25kaXRpb25TZXQu
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1cm4gc2tpcCgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2NoYWluLT50YWtlc1Ns
b3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQorCisgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mU2xvdEJhc2VzID0KKyAgICAgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldC5udW1iZXJP
ZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlNsb3RCYXNlcyA8PSAxKTsKKyAgICAgICAgaWYgKCFu
dW1iZXJPZlNsb3RCYXNlcykgeworICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIGRvbid0IHN1
cHBvcnQgbWlzc2VzLiBUaGF0J3MgYSBidW1tZXIuCisgICAgICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgogICAgICAgICAgICAg
cmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKKyAgICAgICAgfQorICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9u
KCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJl
c2VuY2UpOwogICAgICAgICAKLSAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRPYmplY3QgPSByZXN1
bHQubV9jaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICAgICAgU3RydWN0dXJlKiBjdXJy
ZW50U3RydWN0dXJlID0gcmVzdWx0Lm1fY2hhaW4tPmxhc3QoKTsKLSAgICAgICAgCi0gICAgICAg
IEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9iamVjdCk7Ci0gICAgICAgIAot
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKLSAgICB9CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJhc2Uub2Zm
c2V0KCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgIAogICAgIGlmICghaXNWYWxpZE9mZnNldChy
ZXN1bHQubV9vZmZzZXQpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5o
CShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29t
cGxleEdldFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIENv
bXBsZXhHZXRTdGF0dXNfaAogI2RlZmluZSBDb21wbGV4R2V0U3RhdHVzX2gKIAotI2luY2x1ZGUg
IkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5j
bHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9m
ZnNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAg
IENvbXBsZXhHZXRTdGF0dXMoKQogICAgICAgICA6IG1fa2luZChTaG91bGRTa2lwKQogICAgICAg
ICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9hdHRyaWJ1dGVzKFVJTlRf
TUFYKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05NywyMSArOTYsMTYgQEAgcHVibGljOgogICAg
IH0KICAgICAKICAgICBzdGF0aWMgQ29tcGxleEdldFN0YXR1cyBjb21wdXRlRm9yKAotICAgICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwog
ICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KLSAgICBKU1Zh
bHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljVmFsdWU7IH0KICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAg
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbi5n
ZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogcHJpdmF0ZToKICAg
ICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAgICB1bnNpZ25l
ZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7Ci0gICAgUmVmUHRy
PEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVjay5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNo
ZWNrLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi12
b2lkIENvbnN0YW50U3RydWN0dXJlQ2hlY2s6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KAotICAgICAg
ICAiKENoZWNrIGlmICIsIGluQ29udGV4dChKU1ZhbHVlKG1fY29uc3RhbnQpLCBjb250ZXh0KSwg
IiBoYXMgc3RydWN0dXJlICIsCi0gICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fc3RydWN0
dXJlLCBjb250ZXh0KSwgIikiKTsKLX0KLQotdm9pZCBDb25zdGFudFN0cnVjdHVyZUNoZWNrOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIG51
bGxwdHIpOwotfQotCi1TdHJ1Y3R1cmUqIHN0cnVjdHVyZUZvcihjb25zdCBDb25zdGFudFN0cnVj
dHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIEpTQ2VsbCogY29uc3RhbnQpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gdmVjdG9yLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAodmVjdG9yW2ld
LmNvbnN0YW50KCkgPT0gY29uc3RhbnQpCi0gICAgICAgICAgICByZXR1cm4gdmVjdG9yW2ldLnN0
cnVjdHVyZSgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotYm9vbCBhcmVDb21w
YXRpYmxlKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGEsIGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGIpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gYS5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBvdGhlclN0cnVjdHVyZSA9IHN0cnVj
dHVyZUZvcihiLCBhW2ldLmNvbnN0YW50KCkpOwotICAgICAgICBpZiAoIW90aGVyU3RydWN0dXJl
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhW2ldLnN0cnVjdHVyZSgpICE9
IG90aGVyU3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBtZXJnZUludG8oY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYgc291cmNlLCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB0YXJnZXQp
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc291cmNlLnNpemUoKTsgaS0tOykgewotICAgICAg
ICBpZiAoc3RydWN0dXJlRm9yKHRhcmdldCwgc291cmNlW2ldLmNvbnN0YW50KCkpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIHRhcmdldC5hcHBlbmQoc291cmNlW2ldKTsKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmgJKHJldmlzaW9u
IDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVj
dHVyZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENvbnN0YW50U3RydWN0
dXJlQ2hlY2tfaAotI2RlZmluZSBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLQotI2luY2x1ZGUg
IkR1bXBDb250ZXh0LmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
LmgiCi0jaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjayB7Ci1w
dWJsaWM6Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjaygpCi0gICAgICAgIDogbV9jb25zdGFu
dChudWxscHRyKQotICAgICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogY29uc3RhbnQsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IG1fY29uc3RhbnQoY29uc3RhbnQpCi0gICAgICAg
ICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCEhbV9jb25z
dGFudCA9PSAhIW1fc3RydWN0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhbV9jb25zdGFudDsgfQotICAgIAotICAgIEpTQ2VsbCogY29uc3Rh
bnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50OyB9Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQotICAgIAotICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0gICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIEpTQ2VsbCogbV9jb25z
dGFudDsKLSAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwotfTsKLQotdHlwZWRlZiBWZWN0b3I8
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjaywgMj4gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvcjsK
LQotU3RydWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1Zl
Y3RvciYgdmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KTsKLWJvb2wgYXJlQ29tcGF0aWJsZShjb25z
dCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiwgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYpOwotdm9pZCBtZXJnZUludG8oY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVj
a1ZlY3RvciYgc291cmNlLCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB0YXJnZXQpOwot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENvbnN0YW50U3RydWN0dXJlQ2hlY2tf
aAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY5LDgg
KzE2OSw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlzdEluZGV4KS5zdHJ1Y3R1
cmUoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4
R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW4oKSwK
LSAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluQ291bnQoKSwgdWlkKTsK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRleCkuY29uZGl0aW9u
U2V0KCksIHVpZCk7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhH
ZXRTdGF0dXMua2luZCgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNo
b3VsZFNraXA6CkBAIC0yMDYsOCArMjA1LDggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBs
ZXhHZXRTdGF0dXMuY2hhaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjptb3ZlKGNhbGxM
aW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUp
LCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4
R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFu
dCh2YXJpYW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xv
d1BhdGhTdGF0ZSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM0LDIzICszNCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5
SWRWYXJpYW50KAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCisgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQogICAgIDogbV9zdHJ1Y3R1
cmVTZXQoc3RydWN0dXJlU2V0KQotICAgICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCisgICAg
LCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAg
ICAgLCBtX2NhbGxMaW5rU3RhdHVzKFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpCiB7CiAgICAg
aWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gaW52
YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghY2hhaW4pOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoY2hhaW4gJiYgY2hhaW4tPnNpemUoKSkgewotICAgICAgICBtX2FsdGVybmF0ZUJhc2UgPSBj
aGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyht
X2NvbnN0YW50Q2hlY2tzKTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc0VtcHR5KCkp
OwogICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRCeUlkVmFyaWFudDo6fkdl
dEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25z
dCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBAIEdldEJ5SWRWYXJpYW50
OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFyaWFu
dDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKICAgICBtX3N0cnVj
dHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29uc3RhbnRDaGVja3MgPSBv
dGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0
ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0Owog
ICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtT
dGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxM
aW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03MiwyOCArNjcsMTkgQEAg
R2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJldHVybiAqdGhp
czsKIH0KIAotU3RydWN0dXJlU2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZVNldCgpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1f
Y29uc3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3Ry
dWN0dXJlKTsKLSAgICByZXR1cm4gc3RydWN0dXJlOwotfQotCiBib29sIEdldEJ5SWRWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7Ci0gICAgaWYg
KG1fYWx0ZXJuYXRlQmFzZSAhPSBvdGhlci5tX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFhcmVDb21wYXRpYmxlKG1f
Y29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQorICAgIAorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldCA9CisgICAgICAgIG1fY29u
ZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgIGlmICghbWVy
Z2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNs
b3RCYXNlQ29uZGl0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBtZXJn
ZUludG8ob3RoZXIubV9jb25zdGFudENoZWNrcywgbV9jb25zdGFudENoZWNrcyk7CisgICAgbV9j
b25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWVy
Z2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEy
LDEwICs5OCw3IEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAg
ICB9CiAgICAgCiAgICAgb3V0LnByaW50KAotICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1
cmVTZXQoKSwgY29udGV4dCksICIsICIsCi0gICAgICAgICJbIiwgbGlzdER1bXBJbkNvbnRleHQo
bV9jb25zdGFudENoZWNrcywgY29udGV4dCksICJdIik7Ci0gICAgaWYgKG1fYWx0ZXJuYXRlQmFz
ZSkKLSAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNW
YWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CisgICAgICAgICI8IiwgaW5Db250ZXh0
KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0
LCBjb250ZXh0KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsKICAg
ICBpZiAobV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAq
bV9jYWxsTGlua1N0YXR1cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDkg
KzI3LDggQEAKICNkZWZpbmUgR2V0QnlJZFZhcmlhbnRfaAogCiAjaW5jbHVkZSAiQ2FsbExpbmtT
dGF0dXMuaCIKLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAi
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zm
c2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCiAKQEAgLTQzLDcgKzQyLDcgQEAgY2xh
c3MgR2V0QnlJZFZhcmlhbnQgewogcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50KAogICAgICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAotICAgICAgICBjb25zdCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxs
cHRyKTsKICAgICAKICAgICB+R2V0QnlJZFZhcmlhbnQoKTsKQEAgLTU1LDkgKzU0LDEwIEBAIHB1
YmxpYzoKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZVNldDsgfQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4g
bV9zdHJ1Y3R1cmVTZXQ7IH0KLSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9y
JiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0KLSAg
ICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRlQmFz
ZTsgfQotICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CisKKyAgICAvLyBU
aGUgcHJlc2VuY2Ugb2YgYSBjb25kaXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3Rv
dHlwZSBsb2FkLgorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAogICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExp
bmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1
cy5nZXQoKTsgfQogICAgIApAQCAtNzAsOCArNzAsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBHZXRCeUlkU3RhdHVzOwogICAgIAogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNl
dDsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0g
ICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVm
ZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFs
aWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCI8Iiwg
aW5Db250ZXh0KEpTVmFsdWUobV9vYmplY3QpLCBjb250ZXh0KSwgIjogIiwgaW5Db250ZXh0KG1f
Y29uZGl0aW9uLCBjb250ZXh0KSwgIj4iKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQo
b3V0LCBudWxscHRyKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0
dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlz
U3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0
aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHN0cnVjdHVyZUVu
c3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5z
dHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7
CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVy
biB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1
Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxp
ZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24u
aXNTdGlsbFZhbGlkKHN0cnVjdHVyZSwgbV9vYmplY3QpOworfQorCitib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKG1fb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSgpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30K
KworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlD
b25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
c3RydWN0dXJlLCBtX29iamVjdCwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAg
ICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0
cnVjdHVyZSgpLCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpp
c1dhdGNoYWJsZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlDb25kaXRpb246
OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0
aW9uLmlzV2F0Y2hhYmxlKHN0cnVjdHVyZSwgbV9vYmplY3QsIGVmZm9ydCk7Cit9CisKK2Jvb2wg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpX
YXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGUobV9vYmplY3Qt
PnN0cnVjdHVyZSgpLCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
Ojppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vYmplY3QpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxMaXZl
KCk7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNl
cyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoISp0
aGlzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdHJhY2tlZC5jaGVjayhtX29iamVjdCk7
CisgICAgbV9jb25kaXRpb24udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdFByb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gK
KyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCisjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xh
c3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb24geworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uKCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlIHRva2VuKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV9j
b25kaXRpb24odG9rZW4pCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbihKU09iamVjdCogb2JqZWN0LCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2NvbmRpdGlvbihj
b25kaXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gcHJlc2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVj
dCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5t
X2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKHVp
ZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndy
aXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVy
KG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAg
ICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRp
dGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90
b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVj
dCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRC
YXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0
KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1f
Y29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJy
aWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAg
ICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93
bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICBy
ZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlw
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVp
dmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFs
ZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVu
Y2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChv
d25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAg
cmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRp
b247IH07CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0OyB9CisgICAgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9jb25kaXRpb247IH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBo
YXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNl
dCgpOyB9CisgICAgdW5zaWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRp
dGlvbigpLmhhc0F0dHJpYnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAg
SlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlw
ZSgpOyB9CisgICAgYm9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkuaGFzUmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6
aGFzaChtX29iamVjdCkgKyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAg
ICAgICAgICYmIG1fY29uZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KTsKKyAgICB9CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYg
dGhleSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IK
KyAgICAvLyBkaWZmZXJlbnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZl
IHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFt
cGxlIGlmIHRoZXJlIGlzIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29t
ZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3
aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUg
dHdvLiBUaGlzCisgICAgLy8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlv
bnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3Qv
dWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUg
d2l0aCBhbnl0aGluZy4KKyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8
fCAhb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhp
cyA9PSBvdGhlciB8fCB1aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5v
YmplY3QoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0
aG9kcyBjYW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0
aGUKKyAgICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBj
b25jdXJyZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0
YWtlIGFuIGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIg
dG8gb3B0aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlk
YXRlZCAoaS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYg
dGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUg
aW50ZXJjZXB0ZWQuIFZhbGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50
cyBvbiB0aGUgb2JqZWN0LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBz
dHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBw
cm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNT
dGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wg
dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25z
dDsKKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBj
b25zdDsKKworICAgIC8vIENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkg
Y29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0
cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRo
aXMgbWF5IHJldHVybiB0cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJl
cyBzb21lIHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcg
dGhlCisgICAgLy8gc3RydWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0
aW9uIGhvbGRzIGJ5IHVzaW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVj
dHVyZUVuc3VyZXNWYWxpZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSop
IGNvbnN0OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hv
cnRoYW5kIGZvciBjb25kaXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29s
IHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNl
dHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFu
ZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0
Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVy
ZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJs
ZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5n
ZXMpIGNvbnN0OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5k
IHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAv
LyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAg
ICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0
eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBi
b29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5
RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAor
ICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVz
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGlu
Z1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7
CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZl
ZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsK
KyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNl
cyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9w
ZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9v
bCBlcXVhbCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0g
YjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAg
dHlwZWRlZiBKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3Qp
IGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3Qp
CisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0
UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25k
aXRpb246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtp
bmQoKSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAg
cmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK3Vuc2lnbmVkIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNv
bmRpdGlvbjo6S2luZCBraW5kKSBjb25zdAoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Cisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMp
IHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkKKyAgICAgICAgICAgIHJl
c3VsdCsrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVz
ZW5jZSkgPT0gMTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWduZWQgbnVtRm91bmQgPSAwOworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7Cisg
ICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOworICAgICAgICAgICAgbnVtRm91
bmQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChudW1Gb3VuZCA9PSAx
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bWVyZ2VkV2l0aCgKKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkg
fHwgIW90aGVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKworICAgIFZl
Y3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gcmVzdWx0OworICAgIAorICAgIGlmICghaXNF
bXB0eSgpKQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKG1fZGF0YS0+dmVjdG9yKTsKKyAg
ICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBuZXdDb25kaXRpb24g
OiBvdGhlcikgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBl
eGlzdGluZ0NvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgICAgICBpZiAobmV3Q29uZGl0aW9u
ID09IGV4aXN0aW5nQ29uZGl0aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlv
bikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBu
b25FbXB0eShyZXN1bHQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpz
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24u
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFs
aWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7
CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRo
aXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGls
bExpdmUoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNW
YWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAg
ICAgICAgb3V0LnByaW50KGxpc3REdW1wSW5Db250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0
KSk7CisgICAgb3V0LnByaW50KCJdIik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0
KG91dCwgbnVsbHB0cik7Cit9CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNl
OworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvbigKKyAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbktpbmQpCit7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHN3aXRjaCAo
Y29uZGl0aW9uS2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOiB7
CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAg
ICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb246OnByZXNlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRl
cyk7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6IHsKKyAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKAorICAgICAgICAgICAg
dm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkpOworICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNl
T2ZTZXR0ZXI6IHsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNl
bmNlT2ZTZXR0ZXIoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmplY3Qt
PnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSk7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgIH0KK30KKworZW51bSBDb25jdXJyZW5j
eSB7CisgICAgTWFpblRocmVhZCwKKyAgICBDb25jdXJyZW50Cit9OworT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlD
b25kaXRpb246OktpbmQga2luZCwKKyAgICBDb25jdXJyZW5jeSBjb25jdXJyZW5jeSA9IE1haW5U
aHJlYWQpCit7CisgICAgQVNTRVJUKCEhcHJvdG90eXBlID09IChraW5kID09IFByb3BlcnR5Q29u
ZGl0aW9uOjpQcmVzZW5jZSkpOworICAgIAorICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbj4gY29uZGl0aW9uczsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgc3RydWN0dXJlOiAiLCBwb2lu
dGVyRHVtcChzdHJ1Y3R1cmUpLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzUHJveHkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiSXQncyBhIHByb3h5LCBzbyBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICBy
ZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9y
TG9va3VwKGdsb2JhbE9iamVjdCk7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvdG90eXBlKSB7CisgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlYWNoZWQgZW5kIHVwIHBy
b3RvdHlwZSBjaGFpbiBhcyBleHBlY3RlZCwgZG9uZS5cbiIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiVW5leHBlY3RlZGx5IHJlYWNoZWQgZW5kIG9mIHByb3RvdHlwZSBjaGFp
biwgc28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisgICAgICAgIHN0cnVjdHVy
ZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHdl
J3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQgdGhh
dCBpdCBzaG91bGQgbm90IGJlCisgICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5Lgor
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYg
KGNvbmN1cnJlbmN5ID09IE1haW5UaHJlYWQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5m
bGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJDYW5ub3QgZmxhdHRlbiBkaWN0aW9uYXJ5IHdoZW4gbm90IG9uIG1haW4gdGhyZWFkLCBz
byBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCB0aGlzQ29uZGl0aW9uS2luZDsK
KyAgICAgICAgaWYgKGtpbmQgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlICYmIG9iamVj
dCAhPSBwcm90b3R5cGUpCisgICAgICAgICAgICB0aGlzQ29uZGl0aW9uS2luZCA9IFByb3BlcnR5
Q29uZGl0aW9uOjpBYnNlbmNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzQ29uZGl0
aW9uS2luZCA9IGtpbmQ7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBuZXdDb25kaXRpb24gPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgdGhpc0NvbmRpdGlvbktpbmQpOworICAgICAgICBpZiAoIW5ld0NvbmRp
dGlvbiB8fCAhbmV3Q29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBj
cmVhdGUgY29uZGl0aW9uIG9yIGNvbmRpdGlvbiBjYW5ub3QgYmUgZW5zdXJlZCBieSBzdHJ1Y3R1
cmUsIHNvIGludmFsaWQ6ICIsCisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmRpdGlvbiwgIlxu
Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uZGl0
aW9ucy5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvYmplY3Qg
PT0gcHJvdG90eXBlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJSZWFjaGVkIGRlc2lyZWQgcHJvdG90eXBlLCBkb25lLlxuIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBWYWxpZGF0ZSB0aGUg
cmVzdWx0LgorICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246
OlByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIHByZXNlbmNlQ291bnQgPSAwOworICAgICAg
ICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBjb25kaXRp
b25zKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICAgICAgICAgIHBy
ZXNlbmNlQ291bnQrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OkFic2VuY2U6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cHJlc2VuY2VDb3VudCA9PSAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6
IHsKKyAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
IDogY29uZGl0aW9ucykKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5raW5k
KCkgPT0ga2luZCk7CisgICAgfSB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiUmV0dXJuaW5nIGNvbmRpdGlvbnM6ICIsIGxpc3REdW1wKGNvbmRpdGlvbnMpLCAiXG4iKTsK
KyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlv
bnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9u
cygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRT
dHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OkFic2Vu
Y2UpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwgdWlk
LAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyKTsKK30KKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAg
ICAgIHZtLCBvd25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJl
LCBwcm90b3R5cGUsIHVpZCwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsK
K30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBu
dWxscHRyLCBnbG9iYWxPYmplY3QsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwgUHJvcGVy
dHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlciwKKyAgICAgICAgQ29uY3VycmVudCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisK
KyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJvcGVydHkgY29uZGl0
aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0aW9uYWwgY29uZGl0
aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFjY2VzcyB0byBiZSB2
YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmVzdGluZyBzdGF0
ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRpdGlvbnMgdGhhdCBu
ZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBpcyBuZXZlciB2YWxp
ZC4KKy8vIE5vbi1lbXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25z
IHRoYXQgbmVlZCB0byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgeworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkgeyB9CisgICAg
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFsaWQoKQorICAgIHsK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBub25F
bXB0eShjb25zdCBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2ZWN0b3IpCisgICAg
eworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYo
bmV3IERhdGEoKSk7CisgICAgICAgIHJlc3VsdC5tX2RhdGEtPnZlY3RvciA9IHZlY3RvcjsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhIHx8ICFtX2RhdGEtPnZlY3Rvci5pc0Vt
cHR5KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fZGF0YTsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiogaXRlcmF0b3I7CisgICAgCisgICAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmJlZ2luKCk7CisgICAgfQor
ICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRhLT52ZWN0b3Iu
ZW5kKCk7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvck9iamVj
dChKU09iamVjdCogb2JqZWN0KSBjb25zdDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBm
b3JDb25kaXRpb25LaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kKSBjb25zdDsKKworICAgIHVu
c2lnbmVkIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpLaW5k
KSBjb25zdDsKKworICAgIGJvb2wgaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAg
ICAKKyAgICAvLyBJZiB0aGlzIGlzIGEgY29uZGl0aW9uIHNldCBmb3IgYSBwcm90b3R5cGUgaGl0
LCB0aGVuIHRoaXMgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlCisgICAgLy8gY29uZGl0aW9u
IG9uIHRoZSBwcm90b3R5cGUgaXRzZWxmLiBUaGlzIGFsbG93cyB5b3UgdG8gZ2V0IHRoZSBvYmpl
Y3QsIG9mZnNldCwgYW5kCisgICAgLy8gYXR0cmlidXRlcyBmb3IgdGhlIHByb3RvdHlwZS4gVGhp
cyB3aWxsIFJFTEVBU0VfQVNTRVJUIHRoYXQgdGhlcmUgaXMgZXhhY3RseSBvbmUgUHJlc2VuY2UK
KyAgICAvLyBpbiB0aGUgc2V0LCBhbmQgaXQgd2lsbCByZXR1cm4gdGhhdCBwcmVzZW5jZS4KKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0OworICAg
IAorICAgIC8vIEF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3IGNvbmRpdGlvbiBzZXQgYnkgbWVyZ2lu
ZyB0aGlzIG9uZSB3aXRoIHRoZSBvdGhlciBvbmUuIFRoaXMgd2lsbAorICAgIC8vIGZhaWwgaWYg
YW55IG9mIHRoZSBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyLiBX
aGVuIGlmIGZhaWxzLCBpdCByZXR1cm5zCisgICAgLy8gaW52YWxpZCgpLgorICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZFdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIG90aGVyKSBjb25zdDsKKyAgICAKKyAgICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eSgpIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAKKyAgICBib29sIG5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxsTGl2ZSgpIGNv
bnN0OworICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisg
ICAgLy8gSGVscGVycyBmb3IgdXNpbmcgdGhpcyBpbiBhIHVuaW9uLgorICAgIHZvaWQqIHJlbGVh
c2VSYXdQb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4o
bV9kYXRhLmxlYWtSZWYoKSk7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBhZG9wdFJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0
YSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBmcm9tUmF3UG9pbnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gc3Rh
dGljX2Nhc3Q8RGF0YSo+KHJhd1BvaW50ZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gSW50ZXJuYWxseSwgdGhpcyByZXByZXNlbnRzIElu
dmFsaWQgdXNpbmcgYSBwb2ludGVyIHRvIGEgRGF0YSB0aGF0IGhhcyBhbiBlbXB0eSB2ZWN0b3Iu
CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXBhY3QgYnkg
aGF2aW5nIGl0IGludGVybmFsbHkgdXNlIGEgdmVjdG9yIHRoYXQganVzdCBoYXMKKyAgICAvLyB0
aGUgbm9uLXVpZCBwb3J0aW9uIG9mIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBhbmQgdGhlbiBy
ZXF1aXJpbmcgdGhhdCB0aGUgY2FsbGVycyBvZiBhbGwKKyAgICAvLyBvZiB0aGUgQVBJcyBzdXBw
bHkgdGhlIHVpZC4KKyAgICAKKyAgICBjbGFzcyBEYXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPERhdGE+IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YSk7CisgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAg
ICAgIERhdGEoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbj4gdmVjdG9yOworICAgIH07CisgICAgCisgICAgUmVmUHRyPERhdGE+IG1fZGF0YTsK
K307CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5TWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3Mo
CisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK09i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJ
ZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY2hh
aW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKICAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9j
aGFpbkNvdW50KGNoYWluQ291bnQpCiAgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVj
dHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKICAgICAsIG1fc3R1YlJv
dXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBtX2NoYWluLnNl
dCh2bSwgb3duZXIsIGNoYWluKTsKIH0KIAogR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3Mo
KQpAQCAtNzEsNyArNjksNyBAQCBib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNo
QnVmCiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVy
ZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9jaGFpbiAmJiAhSGVh
cDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVT
dGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGlu
ZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtNTMsMTMgKzU0LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICBHZXRCeUlkQWNjZXNz
KCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoMCkK
ICAgICB7CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgIFZNJiwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVj
dHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9IDAsIHVuc2lnbmVkIGNoYWluQ291bnQg
PSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgfkdldEJ5SWRBY2Nlc3MoKTsKICAg
ICAKQEAgLTcyLDggKzcyLDcgQEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAKLSAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9Ci0gICAg
dW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW5Db3VudDsgfQorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7
IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHVi
Um91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtOTEsOSArOTAsOCBAQCBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAg
dW5zaWduZWQgbV9jaGFpbkNvdW50OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3Ry
dWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsgLy8gRklYTUUgd2hhdCBh
Ym91dCBiYXJyaWVycz8KICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgUHV0QnlJZEFjY2VzcyBQdXRC
eUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlv
bjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0
QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQubV9uZXdT
dHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUp
OwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLmNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigKKyAgICAgICAgICAgIHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKICAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIApAQCAtNjQsNiArNjUsOSBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21T
dHJ1Y3R1CiAKIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImIHJl
cGF0Y2hCdWZmZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExp
dmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3Ry
dWN0dXJlLmdldCgpKSkKQEAgLTc0LDE1ICs3OCwxMSBAQCBib29sIFB1dEJ5SWRBY2Nlc3M6OnZp
c2l0V2VhayhSZXBhdGNoQnVmCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldHRl
cjoKICAgICBjYXNlIEN1c3RvbVNldHRlcjoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCht
X29sZFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNp
b24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisj
aW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNvZGUu
aCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCkBA
IC01Myw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAg
ICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAg
ICAgewogICAgIH0KICAgICAKQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEpT
Q2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAor
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAog
ICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAg
ICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJh
bnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9s
ZFN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBj
aGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAg
ICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJv
dXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1LDggKzk1
LDcgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAg
IFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0LDEwICsx
MDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICBy
ZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAg
cmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewotICAgICAg
ICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAgICAgICAg
cmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmVz
dWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0
b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0g
c3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAgIH0KICAg
ICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAg
IHJldHVybiBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBjaGFpbkNv
dW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9t
KCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBj
b25zdAogICAgIHsKQEAgLTE3OCw4ICsxNjQsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5cGUg
bV90eXBlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7Cisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBib29sIHZl
cmJvc2UgPSBmYWxzZTsKKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7Cisg
ICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJp
bnQoIiBhdCAiLCBvZmZzZXQoKSwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgYXR0cmlidXRlcygpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNl
dHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpT
VmFsdWUocHJvdG90eXBlKCkpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRoICIsIGluQ29udGV4dChyZXF1
aXJlZFZhbHVlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51
bGxwdHIpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNP
YmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxv
ZygKKyAgICAgICAgICAgICJEZXRlcm1pbmluZyB2YWxpZGl0eSBvZiAiLCAqdGhpcywgIiB3aXRo
IHN0cnVjdHVyZSAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUpLCAiIGFuZCBiYXNlICIsCisgICAg
ICAgICAgICBKU1ZhbHVlKGJhc2UpLCAiIGFzc3VtaW5nIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50cyBhcmUgc2V0LlxuIik7CisgICAgfQorICAgIAorICAgIGlmICghKnRoaXMpIHsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgdW5z
ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7CisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiSW52YWxpZCBiZWNhdXNlIGFjY2Vzc2VzIGFy
ZSBub3QgY2FjaGVhYmxlLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOiB7CisgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50
T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0
dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJl
Y2F1c2Ugd2UgbmVlZCBvZmZzZXQsIGF0dHJpYnV0ZXMgdG8gYmUgIiwgb2Zmc2V0KCksICIsICIs
IGF0dHJpYnV0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgIiBidXQgdGhleSBhcmUgIiwgY3Vy
cmVudE9mZnNldCwgIiwgIiwgY3VycmVudEF0dHJpYnV0ZXMsICJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgaXQncyBhIGRpY3Rpb25hcnku
XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQoKSk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQg
YmVjYXVzZSB0aGUgcHJvcGVydHkgZXhpc3RzIGF0IG9mZnNldDogIiwgY3VycmVudE9mZnNldCwg
IlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpICE9IHByb3RvdHlw
ZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFM
b2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2UgdGhlIHByb3RvdHlwZSBp
cyAiLCBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCAiIGV2ZW4gdGhvdWdoICIKKyAgICAg
ICAgICAgICAgICAgICAgIml0IHNob3VsZCBoYXZlIGJlZW4gIiwgSlNWYWx1ZShwcm90b3R5cGUo
KSksICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
Y2FzZSBBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIkludmFsaWQgYmVjYXVzZSBpdCdzIGEgZGljdGlvbmFyeS5cbiIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAg
ICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlm
IChjdXJyZW50QXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yKSkgeworICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHdlIGV4cGVjdGVkIG5v
dCB0byBoYXZlIGEgc2V0dGVyLCBidXQgd2UgaGF2ZSBvbmUgYXQgb2Zmc2V0ICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0LCAiIHdpdGggYXR0cmlidXRlcyAiLCBjdXJy
ZW50QXR0cmlidXRlcywgIlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90eXBlKCkp
IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB0aGUgcHJvdG90eXBlIGlzICIs
IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksICIgZXZlbiB0aG91Z2ggIgorICAgICAgICAg
ICAgICAgICAgICAiaXQgc2hvdWxkIGhhdmUgYmVlbiAiLCBKU1ZhbHVlKHByb3RvdHlwZSgpKSwg
IlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJl
KCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhl
CisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1
c2Ugd2UgZG9uJ3QgaGF2ZSBhIGJhc2Ugb3IgdGhlIGJhc2UgaGFzIHRoZSB3cm9uZyBzdHJ1Y3R1
cmU6ICIsCisgICAgICAgICAgICAgICAgICAgIFJhd1BvaW50ZXIoYmFzZSksICJcbiIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByYWN5LCBhbmQgbWF5YmUgbW9y
ZSByaXNreSB0aGFuIHdlIHdhbnQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKKyAgICAgICAgCisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAg
ICAgIEpTVmFsdWUgY3VycmVudFZhbHVlID0gYmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRPZmZzZXQp
OworICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IHJlcXVpcmVkVmFsdWUoKSkgeworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHRoZSB2YWx1ZSBpcyAiLCBjdXJyZW50VmFsdWUs
ICIgYnV0IHdlIHJlcXVpcmUgIiwgcmVxdWlyZWRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAg
ICAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2Fz
ZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNh
biBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwgYW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRv
dyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24gdGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBh
ZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAgLy8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZl
Y3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1wdXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIg
c2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAg
Y2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFs
ZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZhcmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0
cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVzIHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQg
dGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAg
ICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFi
bGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UKKyAgICAgICAgLy8gc2hvdWxkbid0IGhhdmUg
YSBUT0NUT1UgcmFjZSBlaXRoZXIuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCAhPSBp
bnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAg
ICAgICAgc3dpdGNoIChlZmZvcnQpIHsKKyAgICAgICAgY2FzZSBNYWtlTm9DaGFuZ2VzOgorICAg
ICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNl
dChvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5zdXJlV2F0Y2hh
YmlsaXR5OgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVJlcGxh
Y2VtZW50V2F0Y2hwb2ludFNldCgKKyAgICAgICAgICAgICAgICAqSGVhcDo6aGVhcChzdHJ1Y3R1
cmUpLT52bSgpLCBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmICghc2V0IHx8ICFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVy
biBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUs
IGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0
KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0
KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQorICAg
ICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jv
b2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFz
UHJvdG90eXBlKCkgJiYgcHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVl
KCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUo
KS5pc0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFz
Q2VsbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJh
Y2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgp
KQorICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFz
UmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQg
Y29uZGl0aW9uKQoreworICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlOgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBv
dXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVu
Y2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5l
IFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVu
Y2VzOworCitjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5k
IHsKKyAgICAgICAgUHJlc2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VP
ZlNldHRlciwKKyAgICAgICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBv
biB0aGlzIHdpbGwgYmUgYSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0
dXJlIHRyYW5zaXRpb25zLCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBv
biB0aGUgbmV3IHN0cnVjdHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9u
KCkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkK
KyAgICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisg
ICAgUHJvcGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAg
ICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgewor
ICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAg
ICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
dWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAgIHJl
c3VsdC51LnByZXNlbmNlLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJlc2Vu
Y2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAg
Vk0mLCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcHJlc2VuY2VX
aXRob3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAg
ICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90
b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUp
CisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBw
cm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJz
ZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlv
biByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEFic2VuY2VPZlNldHRlcjsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5
cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNldHRlcldpdGhvdXRC
YXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5
Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRp
dGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQudS5lcXVpdmFsZW5jZS52YWx1
ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgICAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2UoCisg
ICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSAmJiBvd25lcikK
KyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJu
IGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAgfQorICAgICAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0g
UHJlc2VuY2U7IH07CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9
CisgICAgCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1f
a2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHJl
c2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJl
dHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBdHRyaWJ1dGVzKCkpOwor
ICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAgICBi
b29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgKG1fa2luZCA9PSBB
YnNlbmNlIHx8IG1fa2luZCA9PSBBYnNlbmNlT2ZTZXR0ZXIpOyB9CisgICAgSlNPYmplY3QqIHBy
b3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUHJvdG90eXBlKCkpOwor
ICAgICAgICByZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0g
RXF1aXZhbGVuY2U7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGhhc1JlcXVpcmVkVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjpkZWNvZGUodS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8VW5pcXVl
ZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5k
KTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVzZW5jZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAgICAgICAgIHJlc3Vs
dCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgICAg
IHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFic2VuY2UucHJvdG90
eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAg
ICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVxdWl2YWxlbmNl
LnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eUNv
bmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91aWQgIT0gb3RoZXIu
bV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tpbmQgIT0g
b3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUu
cHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0CisgICAgICAgICAgICAg
ICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2VuY2UuYXR0cmlidXRl
czsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJzZW5j
ZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgICAgICByZXR1
cm4gdS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNlLnZhbHVlOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBBYnNl
bmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBp
ZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcy4g
SWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0byBy
ZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzCisgICAgLy8gYSBQ
cmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3YW50
IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGluIG90aGVyIGNhc2Vz
IHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRoaXMgd2lsbCBhbHNv
IHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5jZSBh
bmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQKKyAgICAv
LyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcuCisgICAgYm9vbCBp
c0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkgIT0gb3RoZXIudWlk
KCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJl
IGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4KKyAgICBib29s
IGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSos
IEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZh
bGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgp
IHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUg
Y29uZGl0aW9uIGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdpdmVuIG9iamVjdCBh
bmQgc3RydWN0dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlm
IHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlCisgICAg
Ly8gY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29uZGl0aW9uIG9uIGFu
IG9iamVjdCB0aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRpZXMuIElmIHRoZSBv
YmplY3QgaXMgbm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBpbmRpY2F0ZXMgdGhh
dCBjaGVja2luZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVuIHN0cnVjdHVyZSBn
dWFyYW50ZWVzIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9iamVjdCBpcworICAg
IC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBvdGhlciB3YXRjaHBv
aW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBjb25kaXRpb24gaW4g
YWRkaXRpb24gdG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlzU3RpbGxWYWxpZChT
dHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8v
IEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJsZSwgYnV0IGNvdWxk
IGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFwcHJvcHJpYXRlIHdh
dGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50cyBhcmUgZW5hYmxl
ZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24gdGhlIHByb3BlcnR5
IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNwYWNlIGZvcgorICAg
IC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQgbmV2ZXIgZ2V0IHZl
cnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFibGUgd2F0Y2hpbmcs
IHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAg
ZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0
LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2YgYW55IFN0cnVjdHVy
ZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYgdGhlIHByb3BlcnR5
IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1ha2UKKyAgICAgICAg
Ly8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5nIGZyb20gYSBKSVQg
dGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJlZmVyYWJsZSB3aGVu
IGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24gZm9yIHRoZSBmaXJz
dCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2ludCBmaXJlIHRoYXQg
Y2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBhCisgICAgICAgIC8v
IHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGluZyBpbXBsaWVzIHRo
YXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0IHRvIG1ha2UgaXQg
cHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5nIHdhdGNoZWQgbWF5
IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVmZXIgdG8gb25seSBh
c3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJlZW4KKyAgICAgICAg
Ly8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAgICBNYWtlTm9DaGFu
Z2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0byBlbnN1cmUgdGhh
dCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhhcyBubworICAgICAg
ICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVzdCBtZWFucyB0aGF0
IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyByZXBsYWNlbWVudCB3
YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxlZCBhbHJlYWR5LiBE
byBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywgc2luY2UgdGhlIGFj
dCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgICAgIEVu
c3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0
J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBh
IHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBvc3Np
Ymx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNXYXRjaGFibGVB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNP
YmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2Vz
KSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBh
bmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAg
IC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKAor
ICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIsIFdhdGNoYWJpbGl0
eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdS
ZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9mIG91ciBjb25kaXRp
b25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1Jl
cXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxp
dmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRh
dGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBXYXRjaGFiaWxpdHlF
ZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIEtpbmQg
bV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAg
ICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBKU09iamVjdCog
cHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFsZW5jZTsKKyAgICB9
IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0IFByb3BlcnR5Q29u
ZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1l
c3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZh
dWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvcGVydHlDb25k
aXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4g
c3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg3
NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwyMiBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUu
b3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
X291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBpbnN0
cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4g
PSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAgIEFTU0VSVChuZXdT
dHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZv
cm1hdGlvbik7CiAgICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGludGVu
ZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENoYWluID0gYWRvcHRS
ZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBj
aGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bj
b2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291
dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAg
ICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9
CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBpbnRlbmRlZENoYWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVybiBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBvZmZzZXQpOwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsxNjgs
MTQgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJh
bnNpdGlvbi5jaGFpbikgewotICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
IHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAot
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQ
b2ludGVyKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVz
RW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlk
VHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgY2hhaW4uZ2V0KCks
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0K
QEAgLTIxOSwxNSArMjIwLDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclMKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0
ZSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWlu
OwotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAg
ICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBh
Y2Nlc3MuY2hhaW4oKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYWluLT5pc1N0aWxs
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZh
cmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAg
YWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNoYWluLmdldCgp
LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFj
Y2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM1LDcgKzIz
Miw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRT
dGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGFjY2Vzcy5jaGFpbigpLCBhY2Nlc3MuY2hhaW5D
b3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25k
aXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMjUzLDcgKzI1MCw3IEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxF
eGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVz
LmNoYWluKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRT
dGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAg
ICAgICB9IH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2OCwyMiArMzY1LDExIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAotICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbj4gY2hhaW47CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgY2hhaW4g
PSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSkpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4g
aGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KLSAgICAg
ICAgICAgIGlmIChjaGFpbi0+bWF5SW50ZXJjZXB0U3RvcmVUbyh1aWQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAKLSAgICAg
ICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXplZCAo
aS5lLiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJpZXMpCi0gICAgICAgICAgICAvLyB0
aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9uYXJ5IGNhc2Ugd291bGQgb25seSBoYXBwZW4gaWYgdGhp
cyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVuCi0gICAgICAgICAgICAvLyB1c2VkIGluIGFuIG9wdGlt
aXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxseSB0aGUgb25seSByZWFzb24gd2h5
IHdlIHdvdWxkCi0gICAgICAgICAgICAvLyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJlYWxs
eSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBvcHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgotICAg
ICAgICAgICAgLy8gZGljdGlvbmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0
aGF0IHRob3NlIG9iamVjdHMgd2VyZSBuZXZlciB1c2VkIGFzCi0gICAgICAgICAgICAvLyBwcm90
b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJlJ3MgYSBn
b29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKLSAgICAgICAgICAgIC8vIHRoZSBvdGhlciBjaGVja3Mg
YmVsb3cgd2lsbCBmYWlsLgotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpIHx8
ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkpCisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAg
ICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlk
KTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQogICAg
IApAQCAtMzk0LDcgKzM4MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAg
ICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWluLmdl
dCgpLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKICAgICAgICAgaWYg
KCFkaWRBcHBlbmQpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDgg
KzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1f
a2luZCA9IG90aGVyLm1fa2luZDsKICAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3Ry
dWN0dXJlOwogICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAg
bV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5h
dGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3Ro
ZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBp
ZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsK
QEAgLTY0LDI5ICs2MywyNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwK
LSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFyaWFu
dCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CiAgICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9
IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAoc3RydWN0dXJlQ2hhaW4pCi0gICAgICAgIHN0cnVjdHVy
ZUNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAgIHJlc3Vs
dC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBv
ZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZh
cmlhbnQ6OnNldHRlcigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LAotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKIHsKICAgICBQdXRCeUlkVmFyaWFu
dCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKICAgICByZXN1bHQubV9vbGRT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKGNoYWluKSB7Ci0gICAgICAgIGNoYWluLT5n
YXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQubV9h
bHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgfQorICAgIHJl
c3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2FsbExp
bmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzQsMTggKzEzMCw2IEBAIGJvb2wg
UHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0g
U2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQgUHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUo
KSBjb25zdAotewotICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAKLSAgICBpZiAo
IW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpOwotICAgIAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29uc3RhbnRDaGVja3MsIG1f
YWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKLSAgICByZXR1
cm4gc3RydWN0dXJlOwotfQotCiBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVy
Lm1fb2Zmc2V0KQpAQCAtMTU1LDggKzEzOSw4IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVt
cHRUb01lcmdlKGNvbnMKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIHN3aXRjaCAob3RoZXIu
bV9raW5kKSB7CiAgICAgICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJUKG1f
Y29uc3RhbnRDaGVja3MuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2Nv
bnN0YW50Q2hlY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJn
ZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5
Niw2ICsxODAsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zCiAg
ICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwogICAgIEFTU0VSVCghcmVw
bGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwogICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRl
c1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgp
KTsKICAgICAKICAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2Ug
aGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKICAgICAv
LyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxy
ZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0CkBAIC0yMzIsMTUgKzIxNywxMyBAQCB2
b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIG91dC5wcmlu
dCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgp
LCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3
U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250
ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8U2V0
dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAg
ICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIpOwot
ICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAgICAgICAgb3V0LnByaW50KCIsIGFs
dGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250
ZXh0KSk7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwogICAgICAg
ICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKICAgICAgICAgb3V0
LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgUHV0QnlJZFZhcmlhbnRfaAogI2RlZmluZSBQdXRCeUlkVmFyaWFudF9oCiAK
LSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICBQdXRC
eUlkVmFyaWFudCgpCiAgICAgICAgIDogbV9raW5kKE5vdFNldCkKICAgICAgICAgLCBtX25ld1N0
cnVjdHVyZShudWxscHRyKQotICAgICAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQogICAg
ICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgewogICAgIH0KQEAgLTU0LDE2ICs1
MywxNSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQm
KTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7
CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZSgKLSAgICAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgc3RhdGlj
IFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsCi0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWlu
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZh
cmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAotICAgICAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyk7CisgICAg
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+KTsKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQ7IH0KICAgICAKQEAgLTc2LDYgKzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOwogICAgIH0KICAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7CisgICAg
fQorICAgIAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVw
bGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKQEAgLTEwMCwxMCArMTAzLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxz
KCkgY29uc3Q7CiAgICAgCi0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYg
Y29uc3RhbnRDaGVja3MoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRD
aGVja3M7Ci0gICAgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtMTExLDE0ICsxMTEsNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICB9CiAgICAgCi0gICAgSlNPYmpl
Y3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwotICAgIH0KLSAgICAK
LSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OwotICAgIAogICAgIENhbGxM
aW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
a2luZCgpID09IFNldHRlcik7CkBAIC0xMzYsOCArMTI4LDcgQEAgcHJpdmF0ZToKICAgICBLaW5k
IG1fa2luZDsKICAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJl
KiBtX25ld1N0cnVjdHVyZTsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29u
c3RhbnRDaGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBt
X29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywzMyArMzcsNDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojp+U3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgpIHsgfQogCiBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgV2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQ+JiBoZWFkKQogewotICAgIGhlYWQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+KGhvbGRlciwgV1RGOjptb3ZlKGhl
YWQpKTsKKyAgICBoZWFkID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50PihrZXksIGhvbGRlciwgV1RGOjptb3ZlKGhlYWQpKTsKICAgICByZXR1cm4gaGVh
ZC5nZXQoKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJl
SW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0
bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50
cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1v
dmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRy
YXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0g
ICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7
CisgICAgaWYgKCFtX2tleSB8fCAhbV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246
OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkg
Y2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4K
KyAgICAgICAgLy8gVGhhdCB3b3JrcywgYmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVt
b3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBsaXN0LCBhbmQKKyAgICAgICAgLy8gdGhlIHNldCdzIGxp
c3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2lu
Zy4KKyAgICAgICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1
YkluZm8oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9rZXkua2luZCgp
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAvLyBJZiB0aGlzIHdh
cyBhIHByZXNlbmNlIGNvbmRpdGlvbiwgbGV0J3Mgd2F0Y2ggdGhlIHByb3BlcnR5IGZvciByZXBs
YWNlbWVudHMuIFRoaXMgaXMgcHJvZml0YWJsZQorICAgICAgICAvLyBmb3IgdGhlIERGRywgd2hp
Y2ggd2lsbCB3YW50IHRoZSByZXBsYWNlbWVudCBzZXQgdG8gYmUgdmFsaWQgaW4gb3JkZXIgdG8g
ZG8gY29uc3RhbnQgZm9sZGluZy4KKyAgICAgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAobV9rZXku
b2JqZWN0KCkpLT52bSgpOworICAgICAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPnN0
YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgbV9rZXkub2Zmc2V0KCkpOwor
ICAgIH0KKworICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQodGhpcyk7CiB9CiAKIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6fldh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygpCiB7CiB9CiAKLVN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hw
b2ludCgpCitTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6
cHVzaCgqdGhpcywgbV9oZWFkKTsKKyAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludDo6cHVzaChrZXksICp0aGlzLCBtX2hlYWQpOwogfQogCiBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJl
ZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbz4mIGhvbGRlclJlZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCi0gICAgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvKQorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKICAgICBpZiAoIWhvbGRlclJl
ZikKICAgICAgICAgaG9sZGVyUmVmID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbyhjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CkBAIC03Miw3ICs4NSw3IEBAIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAgICAgQVNTRVJUKGhvbGRl
clJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBo
b2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoKTsKKyAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRj
aHBvaW50KGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKIAorI2lu
Y2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5o
IgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTQ2LDE1ICs0NywxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50IDogCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgKLSAgICAgICAgV2F0
Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIpCi0gICAgICAgIDogbV9ob2xkZXIo
aG9sZGVyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAg
ICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBuZXh0KQotICAg
ICAgICA6IG1faG9sZGVyKGhvbGRlcikKKyAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICwg
bV9ob2xkZXIoaG9sZGVyKQogICAgICAgICAsIG1fbmV4dChXVEY6Om1vdmUobmV4dCkpCiAgICAg
ewogICAgIH0KQEAgLTYyLDYgKzU5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoKTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludCogcHVzaCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBo
b2xkZXIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50PiYgaGVhZCk7CiAKQEAgLTY5LDYgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OwogICAgIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbyYgbV9ob2xkZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG1fbmV4dDsKIH07CkBAIC04MywxMSArODIsMTEg
QEAgcHVibGljOgogICAgIAogICAgIH5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKTsK
ICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50
KCk7CisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAgICBzdGF0aWMgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hw
b2ludCgKICAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhv
bGRlclJlZiwKLSAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyAgICAg
ICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5KTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODc0
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwxMiBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVy
ZXM7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCk7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgogICAgIGNhc2UgYWNj
ZXNzX3Vuc2V0OgogICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byBy
ZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5CkBAIC03NSw4ICs3OCwxMCBAQCBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X2RpcmVjdDoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9u
LnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2Vk
KHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhl
YXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKQorICAgICAgICAg
ICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
QEAgLTExMyw3ICsxMTQsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8g
UHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQ
dXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNE
aXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50
ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc2
LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwog
ICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRk
V2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uKCkpCiAgICAgewogICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAgICAg
ICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcyk7CisgICAgICAgICAgICB3YXRjaHBvaW50
cywgY29kZUJsb2NrLCB0aGlzLCBjb25kaXRpb24pOwogICAgIH0KICAgICAKICAgICBpbnQ4X3Qg
YWNjZXNzVHlwZTsKQEAgLTIxNywyMyArMjE5LDEyIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
byB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0
cnVjdHVyZTsKICAgICAgICAgfSBnZXRCeUlkU2VsZjsKICAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByb3RvdHlwZVN0cnVjdHVy
ZTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgIH0gZ2V0QnlJZFByb3RvOwot
ICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50IDogMzE7Ci0gICAg
ICAgICAgICBib29sIGlzRGlyZWN0IDogMTsKLSAgICAgICAgfSBnZXRCeUlkQ2hhaW47Ci0gICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0Owog
ICAgICAgICB9IGdldEJ5SWRMaXN0OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICAgICAgdm9pZCogcmF3
Q29uZGl0aW9uU2V0OwogICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwogICAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RT
dHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NzksNyArMTc3OSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUg
c3VidGxlPwogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tpXS5h
bHRlcm5hdGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0
IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3
ZSdkCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCisg
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNv
bmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNl
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewpAQCAtMjA2
MCwzMCArMjA2MywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1
bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAg
ICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAg
ICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQg
PSBnZXRDYXNlLnNldCgpOwogICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAg
ICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1Zh
bHVlIGJhc2VGb3JMb2FkOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KQotICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlLm1f
dmFsdWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAg
IGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7
Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoZ2V0
Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7CiAg
ICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50
UmVzdWx0KSwKKyAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAog
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlv
bjo6RXF1aXZhbGVuY2UpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRj
aGFibGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFu
c2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENvbmN1
cnJlbnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXkub2Jq
ZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZz
ZXQpOworICAgIHNldC0+YWRkKCZtX3Byb3BlcnR5V2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpmaXJlKGNvbnN0IEZpcmVEZXRh
aWwmIGRldGFpbCkKK3sKKyAgICAvLyBPbmUgb2YgdGhlIHdhdGNocG9pbnRzIGZpcmVkLCBidXQg
dGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1ha2Ugc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlbSBhcmUK
KyAgICAvLyBpbiBhbnkgc2V0IGFueW1vcmUuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgYnkgYWxs
b3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRoZSB3YXRjaHBvaW50cworICAgIC8vIHdoZXJldmVyIGZy
b20gc2NyYXRjaC4KKyAgICBpZiAobV9zdHJ1Y3R1cmVXYXRjaHBvaW50LmlzT25MaXN0KCkpCisg
ICAgICAgIG1fc3RydWN0dXJlV2F0Y2hwb2ludC5yZW1vdmUoKTsKKyAgICBpZiAobV9wcm9wZXJ0
eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAgICAgICAgbV9wcm9wZXJ0eVdhdGNocG9pbnQucmVt
b3ZlKCk7CisgICAgCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9u
OjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkg
eworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJh
d1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIp
OworICAgIH0KKyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50
KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAg
ICBTdHJpbmdGaXJlRGV0YWlsIHN0cmluZ0RldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsK
KyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZzdHJp
bmdEZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVE
ZXRhaWwmIGRldGFpbCkKK3sKKyAgICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VU
T0YoCisgICAgICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9z
dHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFp
bCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQ
cm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBk
ZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAg
ICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fcHJvcGVydHlX
YXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4o
dGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUg
IldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAor
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBt
X2tleTsgfQorICAgIAorICAgIHZvaWQgaW5zdGFsbCgpOworCitwcml2YXRlOgorICAgIGNsYXNz
IFN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgor
ICAgICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsK
KyAgICB9OworICAgIGNsYXNzIFByb3BlcnR5V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFByb3BlcnR5V2F0Y2hwb2ludCgpIHsgfQorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0
YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIGZpcmUoY29uc3QgRmlyZURl
dGFpbCYpOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgU3RydWN0dXJlV2F0Y2hwb2ludCBtX3N0cnVjdHVy
ZVdhdGNocG9pbnQ7CisgICAgUHJvcGVydHlXYXRjaHBvaW50IG1fcHJvcGVydHlXYXRjaHBvaW50
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2Nr
KGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1aXJlc1N0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXku
d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1
cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7Cit9CisKK3ZvaWQgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWls
KQoreworICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJl
V2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVy
KHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9
CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRh
dGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5n
RmlyZURldGFpbCBzdHJpbmdEZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisg
ICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVU
b1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWls
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dF9oCisjZGVmaW5lIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5j
bHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsK
K3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29u
c3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5Owor
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAzLDcgKzIwMywxNCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNr
c0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJl
c3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29uc3Qg
Q2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNl
dChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSog
dmFsdWUpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2Rl
KiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFu
ZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAg
ICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29u
c3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5
T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAgICAvLyBXb3JrcyB3aXRo
IGJvdGggR2V0QnlJZFZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFyaWFu
dC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KKyAgICBOb2RlKiBsb2FkKFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25z
dCBWYXJpYW50VHlwZSYgdmFyaWFudCk7CisgICAgICAgIAogICAgIHZvaWQgaGFuZGxlR2V0QnlJ
ZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUq
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRT
dGF0dXMmKTsKQEAgLTIxMiw3ICsyMTksMzIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVB1
dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5v
ZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCk7
Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
KTsKKyAgICAKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVtaXQgYSBj
aGVjayBmb3IgdGhpcyBjb25kaXRpb24uIFJldHVybnMgZmFsc2UgaWYgdGhlCisgICAgLy8gY29u
ZGl0aW9uIG5vIGxvbmdlciBob2xkcywgYW5kIHRoZXJlZm9yZSBubyByZWFzb25hYmxlIGNoZWNr
IGNhbiBiZSBlbWl0dGVkLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mKTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwcm9tb3RlVG9Db25zdGFudChH
ZXRCeU9mZnNldE1ldGhvZCk7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEgd2F0Y2hw
b2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBJdCBtdXN0IGJlIGEgUHJl
c2VuY2UKKyAgICAvLyBjb25kaXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byBwcm9tb3RlIGEgUHJl
c2VuY2UgY29uZGl0aW9uIHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbi4KKyAgICAvLyBFbWl0
cyBjb2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNvbmRpdGlvbiBndWFyZHMsIGFu
ZCByZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0
dXJucyBudWxsIGlmIHRoZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLgorICAgIEdldEJ5T2Zm
c2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAg
Tm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29u
c3QgR2V0QnlPZmZzZXRNZXRob2QmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2Rl
KiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIE5v
ZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNrKCkgZm9yIGVh
Y2ggY29uZGl0aW9uIGluIHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVpdGhlciBlbWl0cyBjaGVja3Mg
b3IgcmVnaXN0ZXJzCisgICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEgY29tYmluYXRpb24gb2YgdGhl
IHR3bykgdG8gbWFrZSB0aGUgY29uZGl0aW9ucyBob2xkLiBJZiBhbnkgb2YgdGhvc2UKKyAgICAv
LyBjb25kaXRpb25zIGFyZSBubyBsb25nZXIgY2hlY2thYmxlLCByZXR1cm5zIGZhbHNlLgorICAg
IGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICAKKyAg
ICAvLyBDYWxscyBjaGVjaygpIGZvciB0aG9zZSBjb25kaXRpb25zIHRoYXQgYXJlbid0IHRoZSBz
bG90IGJhc2UsIGFuZCBjYWxscyBsb2FkKCkgZm9yIHRoZSBzbG90CisgICAgLy8gYmFzZS4gRG9l
cyBhIGNvbWJpbmF0aW9uIG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBjaGVjayBlbWlz
c2lvbiB0byBndWFyZCB0aGUKKyAgICAvLyBjb25kaXRpb25zLCBhbmQgZW1pdHMgY29kZSB0byBs
b2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzbG90IGJhc2UuIFJldHVybnMgYSBub2RlIGNvbnRhaW5p
bmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgYW55IG9mIHRoZSBj
b25kaXRpb25zIHdlcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAgICBHZXRCeU9mZnNldE1ldGhv
ZCBwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOworICAgIE5vZGUq
IGxvYWQoU3BlY3VsYXRlZFR5cGUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwg
Tm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2so
KTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiArNzM4LDkgQEAgcHJpdmF0ZToK
ICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBv
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBh
cm91bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJv
bSB1c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdh
dGNoIHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtl
IGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlND
b25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAg
ICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKQEAgLTIyNDAsMTUgKzIyNzUsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1O
b2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUg
b3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAgICBpZiAoYmFzZS0+aGFzQ29u
c3RhbnQoKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQp
KSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOwotICAgICAgICAgICAg
cmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
ICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNl
dCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0yMjY0LDYgKzIyOTIsMTgg
QEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIHJldHVybiBn
ZXRCeU9mZnNldDsKIH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIE5vZGVUeXBlIG9wKQoreworICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgpKSB7
CisgICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFBy
b3BlcnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQsIG9mZnNldCkpIHsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gd2Vh
a0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBv
ZmZzZXQsIG9wKTsKK30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0
KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
Tm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMjI4MSwxMCAr
MjMyMSwyMTYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVja3MoY29u
c3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKQorYm9vbCBCeXRlQ29kZVBh
cnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sK
KyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmpl
Y3QoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1Zh
bGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhZGRU
b0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3ZWFrSlNDb25zdGFudChjb25k
aXRpb24ub2JqZWN0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRo
b2QgQnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kIG1l
dGhvZCkKK3sKKyAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9h
ZEZyb21Qcm90b3R5cGUKKyAgICAgICAgJiYgbWV0aG9kLnByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUo
KS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1f
Z3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCks
IG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCksIG1ldGhvZC5vZmZzZXQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXpl
KGNvbnN0YW50KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBtZXRob2Q7Cit9CisKK0dldEJ5
T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJQbGFubmluZyBhIGxvYWQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CisgICAgCisgICAgLy8g
V2UgbWlnaHQgcHJvbW90ZSB0aGlzIHRvIEVxdWl2YWxlbmNlLCBhbmQgYSBsYXRlciBERkcgcGFz
cyBtaWdodCBhbHNvIGRvIHN1Y2ggcHJvbW90aW9uCisgICAgLy8gZXZlbiBpZiB3ZSBmYWlsLCBi
dXQgZm9yIHNpbXBsaWNpdHkgdGhpcyBjYW5ub3QgYmUgYXNrZWQgdG8gbG9hZCBhbiBlcXVpdmFs
ZW5jZSBjb25kaXRpb24uCisgICAgLy8gTm9uZSBvZiB0aGUgY2xpZW50cyBvZiB0aGlzIG1ldGhv
ZCB3aWxsIHJlcXVlc3QgYSBsb2FkIG9mIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbnl3YXks
CisgICAgLy8gYW5kIHN1cHBvcnRpbmcgaXQgd291bGQgY29tcGxpY2F0ZSB0aGUgaGV1cmlzdGlj
cyBiZWxvdy4KKyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5
Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgCisgICAgLy8gSGVyZSdzIHRoZSByYW5raW5nIG9m
IGhvdyB0byBoYW5kbGUgdGhpcywgZnJvbSBtb3N0IHByZWZlcnJlZCB0byBsZWFzdCBwcmVmZXJy
ZWQ6CisgICAgLy8KKyAgICAvLyAxKSBXYXRjaHBvaW50IG9uIGFuIGVxdWl2YWxlbmNlIGNvbmRp
dGlvbiBhbmQgcmV0dXJuIGEgY29uc3RhbnQgbm9kZSBmb3IgdGhlIGxvYWRlZCB2YWx1ZS4KKyAg
ICAvLyAgICBObyBvdGhlciBjb2RlIGlzIGVtaXR0ZWQsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRo
ZSBiYXNlIG9iamVjdCBpcyBuZXZlciByZWdpc3RlcmVkLgorICAgIC8vICAgIEhlbmNlIHRoaXMg
cmVzdWx0cyBpbiB6ZXJvIGNvZGUgYW5kIHdlIHdvbid0IGpldHRpc29uIHRoaXMgY29tcGlsYXRp
b24gaWYgdGhlIG9iamVjdAorICAgIC8vICAgIHRyYW5zaXRpb25zLCBldmVuIGlmIHRoZSBzdHJ1
Y3R1cmUgaXMgd2F0Y2hhYmxlIHJpZ2h0IG5vdy4KKyAgICAvLworICAgIC8vIDIpIE5lZWQgdG8g
ZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgZ29p
bmcgdG8gYmUgd2F0Y2hlZCBieSB0aGUKKyAgICAvLyAgICBERkcgYW55d2F5IChpLmUuIGRmZ1No
b3VsZFdhdGNoKS4gV2F0Y2ggdGhlIHN0cnVjdHVyZSBhbmQgZW1pdCB0aGUgbG9hZC4gRG9uJ3Qg
d2F0Y2ggdGhlCisgICAgLy8gICAgY29uZGl0aW9uLCBzaW5jZSB0aGUgYWN0IG9mIHR1cm5pbmcg
dGhlIGJhc2UgaW50byBhIGNvbnN0YW50IGluIElSIHdpbGwgY2F1c2UgdGhlIERGRyB0bworICAg
IC8vICAgIHdhdGNoIHRoZSBzdHJ1Y3R1cmUgYW55d2F5IGFuZCBkb2luZyBzbyB3b3VsZCBzdWJz
dW1lIHdhdGNoaW5nIHRoZSBjb25kaXRpb24uCisgICAgLy8KKyAgICAvLyAzKSBOZWVkIHRvIGVt
aXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIHdhdGNo
YWJsZSBidXQgbm90IGJ5IHRoZQorICAgIC8vICAgIERGRyAoaS5lLiB0cmFuc2l0aW9uV2F0Y2hw
b2ludFNldElzU3RpbGxWYWxpZCgpIGFuZCAhZGZnU2hvdWxkV2F0Y2hJZlBvc3NpYmxlKCkpLiBX
YXRjaAorICAgIC8vICAgIHRoZSBjb25kaXRpb24sIGFuZCBlbWl0IGEgbG9hZC4KKyAgICAvLwor
ICAgIC8vIDQpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUg
b2YgdGhlIGJhc2UgaXMgbm90IHdhdGNoYWJsZS4gRW1pdCBhCisgICAgLy8gICAgc3RydWN0dXJl
IGNoZWNrLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA1KSBUaGUgY29uZGl0aW9u
IGRvZXMgbm90IGhvbGQuIEdpdmUgdXAgYW5kIHJldHVybiBudWxsLgorICAgIAorICAgIC8vIE1h
a2Ugc3VyZSB3ZSBhZ3JlZSBvbiB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZm9yIHRoZSBwdXJwb3Nl
IG9mIGVtaXR0aW5nIHRoZXNlIHZhcmlvdXMKKyAgICAvLyBjaGVja3MuCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgIAorICAg
IC8vIEZpcnN0LCB0cnkgdG8gcHJvbW90ZSBQcmVzZW5jZSB0byBFcXVpdmFsZW5jZS4gV2UgZG8g
dGhpcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZQorICAgIC8vIGJlY2F1c2UgaXQncyB0aGUg
bW9zdCBwcm9maXRhYmxlLiBBbHNvLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIHByZXNlbmNl
IGlzIHdhdGNoYWJsZSBidXQKKyAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHdhdGNoIGl0IHVubGVz
cyBpdCBiZWNhbWUgYW4gZXF1aXZhbGVuY2UgKHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4K
KyAgICAvLyAoMSksICgyKSwgYW5kICgzKSBhYm92ZSkuCisgICAgaWYgKHN0cnVjdHVyZS0+aXNW
YWxpZE9mZnNldChjb25kaXRpb24ub2Zmc2V0KCkpKSB7CisgICAgICAgIC8vIFRoaXMgbG9hZCBp
cyBmaW5lIGJlY2F1c2Ugb25seSB0aGUgR0MgY2FuIGNhdXNlIGEgZGVsZXRlZCBwcm9wZXJ0eSB0
byBoYXZlIGEgZ2FyYmFnZQorICAgICAgICAvLyB2YWx1ZS4KKyAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+Z2V0RGlyZWN0KGNvbmRpdGlvbi5vZmZzZXQoKSk7Cisg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlQ29uZGl0aW9uID0KKyAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJy
aWVyKAorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5vYmplY3QoKSwgY29uZGl0aW9uLnVpZCgp
LCB2YWx1ZSk7CisgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGVxdWl2YWxlbmNl
Q29uZGl0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZDo6Y29uc3Rh
bnQobV9ncmFwaC5mcmVlemUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBw
b2ludCwgd2UnbGwgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgY29uZGl0aW9uJ3MgYmFzZSBhcyBh
IGNvbnN0YW50IGluIERGRyBJUi4gT25jZQorICAgIC8vIHdlIGRvIHRoaXMsIHRoZSBmcm96ZW4g
dmFsdWUgd2lsbCBoYXZlIGl0cyBvd24gaWRlYSBvZiB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMuIFVz
ZSB0aGF0IGZyb20KKyAgICAvLyBub3cgb24ganVzdCBiZWNhdXNlIGl0J3MgbGVzcyBjb25mdXNp
bmcuCisgICAgRnJvemVuVmFsdWUqIGJhc2UgPSBtX2dyYXBoLmZyZWV6ZShjb25kaXRpb24ub2Jq
ZWN0KCkpOworICAgIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOworICAgIAorICAgIC8v
IENoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSd2ZSByZWdpc3RlcmVkIG1ha2VzIHRoZSBj
b25kaXRpb24gaG9sZC4gSWYgbm90LCBqdXN0IGdpdmUKKyAgICAvLyB1cC4gVGhpcyBpcyBjYXNl
ICg1KSBhYm92ZS4KKyAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHko
c3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7CisgICAgCisg
ICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRjaGVkIGJ5IHRoZSBERkcgYWxyZWFkeSwgdGhl
biBqdXN0IHVzZSB0aGlzIGZhY3QgdG8gZW1pdCB0aGUgbG9hZC4KKyAgICAvLyBUaGlzIGlzIGNh
c2UgKDIpIGFib3ZlLgorICAgIGlmIChzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCisgICAg
ICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Q
cm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7CisgICAgCisgICAgLy8gSWYgd2Ug
Y2FuIHdhdGNoIHRoZSBjb25kaXRpb24gcmlnaHQgbm93LCB0aGVuIHdlIGNhbiBlbWl0IHRoZSBs
b2FkIGFmdGVyIHdhdGNoaW5nIGl0LiBUaGlzCisgICAgLy8gaXMgY2FzZSAoMykgYWJvdmUuCisg
ICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0dXJu
IHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlwZShi
YXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBXZSBjYW4ndCB3YXRjaCBh
bnl0aGluZyBidXQgd2Uga25vdyB0aGF0IHRoZSBjdXJyZW50IHN0cnVjdHVyZSBzYXRpc2ZpZXMg
dGhlIGNvbmRpdGlvbi4gU28sCisgICAgLy8gY2hlY2sgZm9yIHRoYXQgc3RydWN0dXJlIGFuZCB0
aGVuIGVtaXQgdGhlIGxvYWQuCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tTdHJ1Y3R1
cmUsIAorICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSks
CisgICAgICAgIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGJhc2UpKSk7CisgICAgcmV0
dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlw
ZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCwKKyAgICBOb2RlVHlwZSBv
cCkKK3sKKyAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjYXNlIEdldEJ5
T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CisgICAgY2FzZSBHZXRCeU9mZnNldE1l
dGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKKyAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKKyAgICAgICAg
cmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVy
TnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICB9CisgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6TG9hZDoKKyAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9tIHBsYW5M
b2FkKCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uLCBOb2RlVHlwZSBvcCkKK3sKKyAgICBHZXRCeU9mZnNldE1ldGhv
ZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgIHJldHVybiBsb2FkKHByZWRpY3Rp
b24sIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0aW9uLnVpZCgpKSwgbWV0aG9k
LCBvcCk7Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKKyAgICAgICAgaWYg
KCFjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJzZXI6OnBs
YW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7
CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coImNvbmRpdGlvblNldCA9ICIsIGNv
bmRpdGlvblNldCwgIlxuIik7CisgICAgCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0Owor
ICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29uZGl0
aW9uU2V0KSB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAgICBj
YXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFyZXN1bHQpOyAvLyBTaG91bGQgb25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhlc2UuCisg
ICAgICAgICAgICByZXN1bHQgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgICAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICghY2hl
Y2soY29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Qo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUKCEhcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOb2RlKiBCeXRlQ29kZVBh
cnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBOb2RlVHlwZSBvcCkKK3sKKyAgICBH
ZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb25TZXQpOworICAgIHJl
dHVybiBsb2FkKAorICAgICAgICBwcmVkaWN0aW9uLAorICAgICAgICBtX2dyYXBoLmlkZW50aWZp
ZXJzKCkuZW5zdXJlKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLnVpZCgpKSwKKyAg
ICAgICAgbWV0aG9kLCBvcCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRUeXBlPgor
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5
cGUmIHZhcmlhbnQpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXpl
KCk7ICsraSkKLSAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHZlY3Rvcltp
XS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJlKCkpOworICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVj
dHVyZVNldCgpKSksIGJhc2UpOworICAgIAorICAgIFNwZWN1bGF0ZWRUeXBlIGxvYWRQcmVkaWN0
aW9uOworICAgIE5vZGVUeXBlIGxvYWRPcDsKKyAgICBpZiAodmFyaWFudC5jYWxsTGlua1N0YXR1
cygpKSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gU3BlY0NlbGxPdGhlcjsKKyAgICAgICAg
bG9hZE9wID0gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bG9hZFByZWRpY3Rpb24gPSBwcmVkaWN0aW9uOworICAgICAgICBsb2FkT3AgPSBHZXRCeU9mZnNl
dDsKKyAgICB9CisgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWU7CisgICAgaWYgKCF2YXJpYW50
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBsb2FkKGxv
YWRQcmVkaWN0aW9uLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLCBsb2FkT3ApOworICAgIGVsc2Ug
eworICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAg
bG9hZFByZWRpY3Rpb24sIGJhc2UsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJO
dW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICBsb2FkT3ApOworICAgIH0KKwor
ICAgIC8vIE1ha2Ugc3VyZSBiYWNrd2FyZHMgcHJvcGFnYXRpb24ga25vd3MgdGhhdCB3ZSd2ZSB1
c2VkIGJhc2UuCisgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAKKyAgICByZXR1
cm4gbG9hZGVkVmFsdWU7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQo
CkBAIC0yMzA3LDE4ICsyNTUzLDM2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlm
IChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9u
KCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7Ci0gICAgCisgICAgICAgIFZlY3RvcjxNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7CisgICAgICAgIAogICAgICAgICAvLyAxKSBFbWl0IHBy
b3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwgY2hhaW5zLiBUaGlzIGNvdWxkIHNvcnQg
b2YgbWF5YmUgbm90IGJlCiAgICAgICAgIC8vICAgIG9wdGltYWwsIGlmIHRoZXJlIGlzIHNvbWUg
cmFyZWx5IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNoYWluIHRoYXQgcmVxdWlyZXMgYSBsb3QKICAg
ICAgICAgLy8gICAgb2YgY2hlY2tzIGFuZCB0aG9zZSBjaGVja3MgYXJlIG5vdCB3YXRjaHBvaW50
YWJsZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBnZXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykKLSAgICAgICAgICAgIGVtaXRDaGVja3Mo
Z2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkpOwotICAgICAgICAK
KyAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IGdldEJ5SWRTdGF0
dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQuY29uZGl0aW9uU2V0KCku
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKAorICAgICAgICAgICAg
ICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBHZXRCeU9mZnNl
dE1ldGhvZDo6bG9hZCh2YXJpYW50Lm9mZnNldCgpKSkpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBHZXRCeU9mZnNl
dE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZCh2YXJpYW50LmNvbmRpdGlvblNldCgpKTsKKyAgICAg
ICAgICAgIGlmICghbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNl
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoTXVsdGlHZXRCeU9mZnNldENhc2UodmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKSwgbWV0aG9kKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ncmFw
aC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3Rp
Y2VJbmxpbmVkR2V0QnlJZCgpOworICAgIAogICAgICAgICAvLyAyKSBFbWl0IGEgTXVsdGlHZXRC
eU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9t
dWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBnZXRC
eUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPmNhc2VzID0gY2FzZXM7CiAgICAg
ICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksCiAgICAgICAgICAgICBhZGRU
b0dyYXBoKE11bHRpR2V0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBiYXNlKSk7CkBAIC0yMzI4LDMwICsyNTkyLDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5SWQoCiAgICAgQVNTRVJUKGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
KTsKICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZ2V0QnlJZFN0YXR1c1swXTsKICAgICAg
ICAgICAgICAgICAKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQocHJlZGljdGlvbiwgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CisgICAgaWYgKCFsb2FkZWRWYWx1ZSkgewor
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksCisgICAgICAg
ICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
bV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5v
dGljZUlubGluZWRHZXRCeUlkKCk7CiAgICAgCi0gICAgTm9kZSogb3JpZ2luYWxCYXNlID0gYmFz
ZTsKLSAgICAgICAgICAgICAgICAKLSAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNl
KTsKLSAgICAKLSAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7Ci0KLSAg
ICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAgICAgIGJhc2UgPSB3ZWFrSlNDb25z
dGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgCi0gICAgLy8gVW5sZXNzIHdlIHdh
bnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4
Mywgd2UgbmVlZCB0bwotICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBiYXNlIG9mIHRoZSBvcmlnaW5h
bCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGgKLSAgICAvLyBh
bGwgb2YgdGhlIHNwZWN1bGF0aW9ucy4gV2Ugb25seSBpbnNlcnQgdGhlIFBoYW50b20gaWYgdGhl
cmUgaGFkIGJlZW4gYSBDaGVja1N0cnVjdHVyZQotICAgIC8vIG9uIHNvbWV0aGluZyBvdGhlciB0
aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tTdHJ1Y3R1cmUgb24gYmFzZS4KLSAgICBp
ZiAob3JpZ2luYWxCYXNlICE9IGJhc2UpCi0gICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgb3Jp
Z2luYWxCYXNlKTsKLSAgICAKLSAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zm
c2V0KAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVjQ2VsbE90aGVyIDog
cHJlZGljdGlvbiwKLSAgICAgICAgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50
aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgIHZhcmlhbnQuY2FsbExpbmtT
dGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZzZXQpOwotICAgIAog
ICAgIGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CiAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgbG9hZGVkVmFsdWUpOwogICAgICAgICByZXR1
cm47CkBAIC0yMzg4LDcgKzI2MzgsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRC
eUlkKAogICAgIC8vICAgIHNpbmNlIHdlIG9ubHkgcmVhbGx5IGNhcmUgYWJvdXQgJ3RoaXMnIGlu
IHRoaXMgY2FzZS4gQnV0IHdlJ3JlIG5vdCBnb2luZyB0byB0YWtlIHRoYXQKICAgICAvLyAgICBz
aG9ydGN1dC4KICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lz
dGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAg
IAogICAgIGhhbmRsZUNhbGwoCiAgICAgICAgIGRlc3RpbmF0aW9uT3BlcmFuZCwgQ2FsbCwgSW5s
aW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCksCkBA
IC0yNDIyLDE3ICsyNjcyLDIwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQo
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICht
X2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCkt
Pm5vdGljZUlubGluZWRQdXRCeUlkKCk7Ci0gICAgICAgIAogICAgICAgICBpZiAoIWlzRGlyZWN0
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0
dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgaWYg
KHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGVtaXRDaGVja3MocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkp
OworICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhd
LmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigp
KQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJ
ZCgpOworICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPnZhcmlhbnRz
ID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVt
YmVyID0gaWRlbnRpZmllck51bWJlcjsKQEAgLTI0NTQsNyArMjcwNywxMCBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6
OlRyYW5zaXRpb246IHsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7
Ci0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAg
aWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGly
ZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVCh2
YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgCkBAIC0yNTA1LDE5ICsyNzYxLDExIEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsKLSAgICAgICAgTm9kZSogb3JpZ2luYWxCYXNl
ID0gYmFzZTsKLSAgICAgICAgCi0gICAgICAgIGFkZFRvR3JhcGgoCi0gICAgICAgICAgICBDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0
dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgIAotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29u
c3RhbnRDaGVja3MoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVC
YXNlKCkpCi0gICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5h
dGVCYXNlKCkpOwotICAgICAgICAKLSAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVH
ZXRCeU9mZnNldCgKLSAgICAgICAgICAgIFNwZWNDZWxsT3RoZXIsIGJhc2UsIHZhcmlhbnQuYmFz
ZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAg
ICAgICAgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQpOworICAgICAgICBOb2RlKiBsb2FkZWRWYWx1
ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7
CisgICAgICAgIGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE5vZGUqIHNl
dHRlciA9IGFkZFRvR3JhcGgoR2V0U2V0dGVyLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIApAQCAt
MjU0NSw3ICsyNzkzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OwogICAgIAogICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5l
eHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlhdGVOYWtl
ZFNldCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCB2YWx1
ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgIAogICAgICAgICBoYW5kbGVDYWxsKApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAx
ODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw5IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVS
ZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwogICAgICAgICB9CiAg
ICAgfQorICAgIAorICAgIGZvciAoQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRjaHBv
aW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cykKKyAgICAgICAgd2F0Y2hwb2ludC0+
a2V5KCkudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKyNpbmNs
dWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQu
aCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk4LDYgKzEwMCw4IEBAIHB1YmxpYzoKICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOwogICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPj4gd2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgQmFn
PENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gd2F0Y2hwb2ludHM7CisgICAgQmFnPEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsK
KyAgICBCYWc8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBhZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFj
ZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7CiAgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21w
aWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg3NDg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5NCwyMSArMjk0LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92
ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAgICAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29u
c3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRzLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEudmFyaWFudHMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgZ2V0Q2FzZS5zZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGdldENhc2Uuc2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzW2ktLV0gPSBkYXRhLmNhc2VzLmxhc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGRh
dGEudmFyaWFudHMuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FzZXMu
c2l6ZSgpICE9IDEpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIGRhdGEudmFyaWFudHNbMF0sIGRhdGEuaWRl
bnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5C
bG9jaywgbm9kZSwgZGF0YS5jYXNlc1swXS5tZXRob2QoKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
KTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTM3NCw4ICszNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25zdGFudENoZWNrcygpLmlzRW1wdHkoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90
eXBlIGNhc2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4NgogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zOTIsNyArMzkwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRE
YXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAg
ICAgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gc3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50
cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzLmFwcGVuZCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlk
ZW50aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvTXVsdGlHZXRC
eU9mZnNldChkYXRhKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTQzMiw5
ICs0MzUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRz
KCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIGFkZENoZWNrcyhvcmlnaW4sIGluZGV4SW5C
bG9jaywgc3RhdHVzW2ldLmNvbnN0YW50Q2hlY2tzKCkpOworCisgICAgICAgICAgICAgICAgYm9v
bCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6
IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1
cmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNr
U3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgY29u
ZGl0aW9uLm9iamVjdCgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aWYgKHN0YXR1cy5udW1WYXJpYW50cygpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgZW1p
dFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0sIGlk
ZW50aWZpZXJOdW1iZXIpOwpAQCAtNTI5LDQxICs1NTQsNjggQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRHZXRC
eU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEdldEJ5T2Zm
c2V0TWV0aG9kJiBtZXRob2QsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgeworICAg
ICAgICAvLyBXaGVuIHdlIGdldCB0byBoZXJlIHdlIGhhdmUgYWxyZWFkeSBlbWl0dGVkIGFsbCBv
ZiB0aGUgcmVxdWlzaXRlIGNoZWNrcyBmb3IgZXZlcnl0aGluZy4KKyAgICAgICAgLy8gU28sIHdl
IGp1c3QgbmVlZCB0byBlbWl0IHdoYXQgdGhlIG1ldGhvZCBvYmplY3QgdGVsbHMgdXMgdG8gZW1p
dC4KICAgICAgICAgCisgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgICAgIG1fZ3Jh
cGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbWV0aG9kLmNvbnN0YW50KCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkxvYWQ6CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBu
b2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2lu
c2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IG5vZGUtPm9yaWdpbiwgbWV0aG9kLnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRC
eU9mZnNldCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVkZ2UoY2hpbGQs
IEtub3duQ2VsbFVzZSksIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0R2V0QnlPZmZz
ZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVl
JiBiYXNlVmFsdWUsIGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyKQogICAgIHsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5v
cmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAKICAgICAg
ICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0
cnVjdHVyZVNldCgpKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZUZvckxvYWQ7Ci0g
ICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2VGb3JM
b2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGJhc2VGb3JMb2FkID0gYmFzZVZhbHVlLm1fdmFsdWU7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZh
bHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2FkLCB2YXJpYW50
LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgLy8gV2UgYXJl
bid0IHNldCB1cCB0byBoYW5kbGUgcHJvdG90eXBlIHN0dWZmLgorICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKworICAg
ICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShi
YXNlVmFsdWUubV92YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgdmFyaWFudC5vZmZzZXQo
KSkpIHsKICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFw
aC5mcmVlemUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICBO
b2RlKiBjaGlsZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5CbG9jaywg
b3JpZ2luLCB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGlsZEVkZ2Ug
PSBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRHZXRCeU9m
ZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFy
aWFudC5vZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVu
c2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAg
IGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAgICAgICBF
ZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNl
dCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkp
CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG5vZGUtPm9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gKm1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS5vZmZzZXQgPSB2YXJp
YW50Lm9mZnNldCgpOworICAgICAgICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0
YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgCiAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CkBAIC02
NDMsMTUgKzY5NSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnRDaGVjayhpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGFkZENoZWNrcygKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4s
IHVuc2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgY2hlY2tzKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoZWNr
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBjaGVja3NbaV0uY29uc3Rh
bnQoKSwgY2hlY2tzW2ldLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHZv
aWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ewogICAgICAgICBpZiAobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUo
KSkgPT0gU3RydWN0dXJlUmVnaXN0ZXJlZEFuZFdhdGNoZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lv
biAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRv
cjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmll
dywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNB
cnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBv
aW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAg
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAg
ICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2st
PnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7
CkBAIC00NSwxMCArNDYsMjMgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRv
cjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdh
dGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVy
cmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0
YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxs
eSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5
LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOwor
ICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykp
OworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtl
eSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkgeworICAg
IGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBjb21tb24uYWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2sp
LT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbW1v
bi5hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3Rh
bGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRl
c2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZp
ZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMu
YWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0
Y2goKSkKQEAgLTg4LDYgKzEwNyw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlB
ZGQoQ29kZUIKICAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0
YSk7CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRh
KTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwor
ICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRh
dGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0
CkBAIC05NSw3ICsxMTUsMTggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFs
aWQoKQogICAgIHJldHVybiBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5s
aW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVT
dGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7Cisg
ICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1fYWRh
cHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKK30KKwordm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJEZXNpcmVkIHdhdGNocG9pbnRzOlxuIik7
CisgICAgb3V0LnByaW50KCIgICAgV2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9zZXRz
LCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5saW5lIHdhdGNocG9pbnQg
c2V0czogIiwgaW5Db250ZXh0KG1faW5saW5lU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91
dC5wcmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1
ZXMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIs
IGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50
KCIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZl
U3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDkgQEAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1
ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQwLDMzICs0Miw1NiBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBHZW5lcmljU2V0QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayos
IFQgc2V0LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorc3RydWN0IFNldFBvaW50ZXJBZGFwdG9y
IHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21t
b25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2lu
dCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVC
bG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQp
IHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KKyAgICBzdGF0aWMgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIFQgc2V0LCBEdW1wQ29udGV4dCopCisgICAg
eworICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihzZXQpKTsKKyAgICB9CiB9OwogCiBzdHJ1
Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sq
LCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2Rl
QmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhh
c0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwogICAgIH0K
KyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUsIER1bXBDb250ZXh0KikKKyAgICB7CisgICAgICAgIG91dC5w
cmludChSYXdQb2ludGVyKGluZmVycmVkVmFsdWUpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgQXJy
YXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2Rl
QmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9p
ZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAgICAg
c3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQog
ICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdU
Rjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBEdW1wQ29udGV4dCog
Y29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZSh2aWV3
KSwgY29udGV4dCkpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFz
QmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gIWtleS5pc1dhdGNoYWJsZSgpOworICAgIH0KKyAgICBzdGF0aWMg
dm9pZCBkdW1wSW5Db250ZXh0KAorICAgICAgICBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7Cisg
ICAgICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7CiAgICAgfQogfTsKIAot
dGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBH
ZW5lcmljU2V0QWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBX
YXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdh
dGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2ludFNldFR5cGUs
IGJvb2w+IFN0YXRlTWFwOwpAQCAtODcsNyArMTEyLDcgQEAgcHVibGljOgogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8m
IHNldCA6IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwg
Y29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6
OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5
QWRkZWQgPSB0cnVlOwogICAgIH0KQEAgLTEwNyw2ICsxMzIsMTUgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9zZXRzLmNvbnRhaW5zKHNldCk7CiAgICAgfQogCisgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAg
IHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKGNvbnN0IFdhdGNo
cG9pbnRTZXRUeXBlJiBlbnRyeSA6IG1fc2V0cykgeworICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmR1bXBJbkNvbnRleHQob3V0LCBlbnRyeSwgY29u
dGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgSGFzaFNldDxXYXRjaHBv
aW50U2V0VHlwZT4gbV9zZXRzOwogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTEyMiw2ICsx
NTYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAg
ICB2b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0J3Mg
cmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6
OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFn
aWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgorICAgIHZvaWQgYWRkTGF6aWx5
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9vbCBjb25zaWRl
cihTdHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21t
b25EYXRhJik7CkBAIC0xNDQsMTIgKzE4MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAgfQorICAgIGJvb2wgaXNX
YXRjaGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAgfQor
CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25z
dDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAg
ICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAg
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5l
U2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZl
cnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdh
dGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFk
YXB0b3I+IG1fYnVmZmVyVmlld3M7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4g
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTAsNyArNTAsMTQgQEAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp+RGVzaXJlZFdlYWtSZWZl
cgogCiB2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTQ2VsbCogY2VsbCkK
IHsKLSAgICBtX3JlZmVyZW5jZXMuYWRkKGNlbGwpOworICAgIGlmIChjZWxsKQorICAgICAgICBt
X3JlZmVyZW5jZXMuYWRkKGNlbGwpOworfQorCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6
YWRkTGF6aWx5KEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICBhZGRMYXppbHkodmFsdWUuYXNDZWxsKCkpOwogfQogCiBib29sIERlc2lyZWRXZWFrUmVm
ZXJlbmNlczo6Y29udGFpbnMoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAx
ODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJl
bmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
IAogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKU1ZhbHVlOwogY2xh
c3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIApAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6CiAg
ICAgfkRlc2lyZWRXZWFrUmVmZXJlbmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXppbHkoSlNDZWxs
Kik7CisgICAgdm9pZCBhZGRMYXppbHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250YWlucyhKU0Nl
bGwqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODc0ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU3LDggKzI1Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICBpZiAobm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBN
dWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAi
eyIsIGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250
ZXh0KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNl
c1tpXSwgY29udGV4dCkpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNl
dERhdGEoKSkgewogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCk7CkBAIC01MzAsNiArNTMwLDggQEAgdm9pZCBHcmFwaDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBpZiAodmFsdWUtPnBvaW50c1RvSGVh
cCgpKQogICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5Db250ZXh0KCp2YWx1ZSwgJm15
Q29udGV4dCksICJcbiIpOwogICAgIH0KKworICAgIG91dC5wcmludChpbkNvbnRleHQod2F0Y2hw
b2ludHMoKSwgJm15Q29udGV4dCkpOwogICAgIAogICAgIGlmICghbXlDb250ZXh0LmlzRW1wdHko
KSkgewogICAgICAgICBteUNvbnRleHQuZHVtcChvdXQpOwpAQCAtODQ4LDYgKzg1MCwzMCBAQCB2
b2lkIEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCitib29s
IEdyYXBoOjp3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
KQoreworICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7
CisgICAgaWYgKGtleS5oYXNQcm90b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVu
Y2VzLmFkZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgIGlmIChrZXkuaGFzUmVxdWlyZWRW
YWx1ZSgpKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5yZXF1
aXJlZFZhbHVlKCkpOworICAgIAorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5
KTsKKworICAgIGlmIChrZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkK
KyAgICAgICAgbV9zYWZlVG9Mb2FkLmFkZChzdGQ6Om1ha2VfcGFpcihrZXkub2JqZWN0KCksIGtl
eS5vZmZzZXQoKSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjpp
c1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAg
ICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNl
dCkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVf
cHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2
ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTAyMCw4ICsxMDQ2LDEyIEBAIEpTVmFsdWUgR3Jh
cGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0
YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0
dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpCisgICAgaWYgKHN0cnVjdHVy
ZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBJZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbgorICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1m
b2xkIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NzI3MQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KICAg
ICAKICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBzdHJ1Y3R1cmUuc2V0
KCksIG9mZnNldCk7CiB9CkBAIC0xMTY3LDE3ICsxMTk3LDkgQEAgdm9pZCBHcmFwaDo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2
YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50LnN0cnVjdHVy
ZVNldCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6ZSgp
OyBqLS07KQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFJlYWRPbmx5UG9pbnRlcihzZXRbal0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0
IG5lZWQgdG8gbWFyayBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhh
dCB3b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRv
IENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gbWFyayB0aGUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRC
eU9mZnNldCBpZiBhbnkgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRp
ZCB0aGF0LgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0
dXMoKSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYg
Z2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IGdldENhc2Uuc2V0KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQ
b2ludGVyKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSwxNSBAQCBwdWJsaWM6CiAg
ICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVu
dGlmaWVyczsgfQogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVy
biBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRo
ZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEgUHJl
c2VuY2UgY29uZGl0aW9uLAorICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBxdWVy
eSBpZiB0aGUgY29uZGl0aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mga25v
d3MKKyAgICAvLyB3aGF0J3MgZ29pbmcgb24uCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25v
d24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0
IGlzIGZpbmUuIFRoaXMgaXMKKyAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25k
aXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4KKyAgICBib29sIGlzU2FmZVRv
TG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOworICAgIAogICAgIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkBAIC04NDQsNiAr
ODUzLDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5s
aW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRy
PEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIEhhc2hNYXA8
Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5dGVjb2RlS2ls
bHM7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9mZnNldD4+IG1f
c2FmZVRvTG9hZDsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVt
YmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9v
cHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRp
R2V0QnlPZmZzZXREYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwg
IjoiKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAg
b3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6
CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChjb25zdGFudCgpLCBjb250
ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmlu
dChvZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBl
OgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCksICJAIiwgcG9pbnRlckR1bXBJbkNvbnRleHQo
cHJvdG90eXBlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9p
ZCBHZXRCeU9mZnNldE1ldGhvZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0
Q2FzZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSwgIjoi
LCBpbkNvbnRleHQobV9tZXRob2QsIGNvbnRleHQpKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1l
c3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgR2V0QnlPZmZzZXRNZXRob2Q6OktpbmQga2luZCkKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlk
OgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0
YW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2Fk
OgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
R2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQo
IkxvYWRGcm9tUHJvdG90eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKyNk
ZWZpbmUgREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVk
ZSAiU3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgRnJvemVuVmFsdWU7CisKK2NsYXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsKK3B1YmxpYzoK
KyAgICBlbnVtIEtpbmQgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBDb25zdGFudCwKKyAg
ICAgICAgTG9hZCwKKyAgICAgICAgTG9hZEZyb21Qcm90b3R5cGUKKyAgICB9OworICAgIAorICAg
IEdldEJ5T2Zmc2V0TWV0aG9kKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFudChGcm96ZW5W
YWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3Rh
bnQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsK
KyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gTG9hZDsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhv
ZCBsb2FkRnJvbVByb3RvdHlwZShGcm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBMb2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUu
bG9hZC5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkOyB9CisgICAgCisg
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgRnJvemVu
VmFsdWUqIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
Q29uc3RhbnQpOworICAgICAgICByZXR1cm4gdS5jb25zdGFudDsKKyAgICB9CisgICAgCisgICAg
RnJvemVuVmFsdWUqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5wcm90b3R5
cGU7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWQgfHwga2luZCgpID09IExvYWRGcm9tUHJv
dG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Cisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHVu
aW9uIHsKKyAgICAgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50OworICAgICAgICBzdHJ1Y3Qgewor
ICAgICAgICAgICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1fa2lu
ZDsKK307CisKK2NsYXNzIE11bHRpR2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBNdWx0
aUdldEJ5T2Zmc2V0Q2FzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2Qm
IG1ldGhvZCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9k
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzZXQoKSB7IHJldHVybiBt
X3NldDsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
ZXQ7IH0KKyAgICBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRob2Q7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
LCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIFN0cnVjdHVyZVNldCBtX3NldDsKKyAgICBHZXRCeU9mZnNldE1l
dGhvZCBtX21ldGhvZDsKK307CisKK3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CisgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENh
c2UsIDI+IGNhc2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6Okdl
dEJ5T2Zmc2V0TWV0aG9kOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NzQ4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXBv
Y2guaCIKICNpbmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0
QnlPZmZzZXREYXRhLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZH
Tm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwxMSArNjYsNiBA
QCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXI7CiB9OwogCi1zdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgewotICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXI7Ci0gICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsK
LX07Ci0KIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlcjsKICAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlz
aW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsMTAgKzMyOCwxOCBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNl
IEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZz
ZXQ7CisKKyAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVj
dHVyZXNBcmVXYXRjaGVkKSB7CisgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9
IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAg
ICAgICAgICAgICAgIGlmIChncmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAgaWYgKHZhbHVl
LmlzSW5maW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAg
aWYgKCF2YWx1ZVtpXS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTM0MSw0MiArMzQ5LDI4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0
cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7
CiAgICAgICAgIC8vIFdlIGNhbid0IGFsd2F5cyBndWFyYW50ZWUgdGhhdCB0aGUgTXVsdGlHZXRC
eU9mZnNldCBpcyBzYWZlIHRvIGV4ZWN1dGUgaWYgaXQKLSAgICAgICAgLy8gY29udGFpbnMgbG9h
ZHMgZnJvbSBwcm90b3R5cGVzLiBXZSBrbm93IHRoYXQgaXQgd29uJ3QgbG9hZCBmcm9tIHRob3Nl
IHByb3RvdHlwZXMgaWYKLSAgICAgICAgLy8gd2Ugd2F0Y2ggdGhlIG11dGFiaWxpdHkgb2YgdGhl
IHByb3BlcnRpZXMgYmVpbmcgbG9hZGVkLiBTbywgaGVyZSB3ZSB0cnkgdG8KLSAgICAgICAgLy8g
Y29uc3RhbnQtZm9sZCBwcm90b3R5cGUgbG9hZHMsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSBjbGFp
bSB0aGF0IHdlIGNhbm5vdCBob2lzdC4gV2UKLSAgICAgICAgLy8gYWxzbyBrbm93IHRoYXQgYSBs
b2FkIGlzIHNhZmUgdG8gZXhlY3V0ZSBpZiB3ZSBhcmUgd2F0Y2hpbmcgdGhlIHByb3RvdHlwZSdz
Ci0gICAgICAgIC8vIHN0cnVjdHVyZS4KLSAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMpIHsKLSAg
ICAgICAgICAgIGlmICghdmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBJdCdzIG5vdCBhIHByb3RvdHlwZSBsb2FkLgotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJhc2Ug
PSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96
ZW4gPSBncmFwaC5mcmVlemUoYmFzZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuc3RydWN0dXJl
Q2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQKLSAgICAgICAgICAgICAgICAm
JiBmcm96ZW4tPnN0cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpCi0gICAgICAgICAgICAgICAg
JiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkg
ewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgd2F0Y2hpbmcgdGhhdCBpdCdzIHNh
ZmUgdG8gbG9hZCBmcm9tIHRoaXMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQg
PSBncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgIHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQo
KSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAg
Ly8gQ291bGRuJ3QgY29uc3RhbnQtZm9sZCBhIHByb3RvdHlwZSBsb2FkLiBUaGVyZWZvcmUsIHdl
IHNob3VsZG4ndCBob2lzdAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHNhZmV0eSBv
ZiB0aGUgbG9hZCBkZXBlbmRzIG9uIHN0cnVjdHVyZSBjaGVja3Mgb24gdGhlIHByb3RvdHlwZSwK
LSAgICAgICAgICAgICAgICAvLyBhbmQgd2UncmUgdG9vIGNoZWFwIHRvIHZlcmlmeSB0aGF0IGhl
cmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBjb250YWlucyBs
b2FkcyBmcm9tIHByb3RvdHlwZXMuIElmIHRoZSBsb2FkIHJlcXVpcmVzIGEgY2hlY2sgaW4gSVIs
IHdoaWNoIGlzIHJhcmUsIHRoZW4KKyAgICAgICAgLy8gd2UgY3VycmVudGx5IGNsYWltIHRoYXQg
d2UgZG9uJ3Qga25vdyBpZiBpdCdzIHNhZmUgdG8gZXhlY3V0ZSBiZWNhdXNlIGZpbmRpbmcgdGhh
dAorICAgICAgICAvLyBjaGVjayBpbiB0aGUgYWJzdHJhY3Qgc3RhdGUgd291bGQgYmUgaGFyZC4g
SWYgdGhlIGxvYWQgcmVxdWlyZXMgd2F0Y2hwb2ludHMsIHdlIGp1c3QKKyAgICAgICAgLy8gY2hl
Y2sgaWYgd2UncmUgbm90IGluIGEgY2xvYmJlcmVkIHN0YXRlIChpLmUuIGluIGJldHdlZW4gYSBz
aWRlIGVmZmVjdCBhbmQgYW4KKyAgICAgICAgLy8gaW52YWxpZGF0aW9uIHBvaW50KS4KKyAgICAg
ICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9k
IG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZC5r
aW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50
OiAvLyBPSyBiZWNhdXNlIGNvbnN0YW50cyBhcmUgYWx3YXlzIHNhZmUgdG8gZXhlY3V0ZS4KKyAg
ICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6IC8vIE9LIGJlY2F1c2UgdGhl
IE11bHRpR2V0QnlPZmZzZXQgaGFzIGl0cyBvd24gY2hlY2tzIGZvciBsb2FkaW5nIGZyb20gc2Vs
Zi4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRN
ZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgT0sgaWYg
dGhlIHN0YXRlIGlzbid0IGNsb2JiZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2Uu
CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpICE9IFN0
cnVjdHVyZXNBcmVXYXRjaGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaWYgKCFncmFwaC5pc1NhZmVUb0xvYWQobWV0aG9kLnByb3RvdHlwZSgp
LT5jYXN0PEpTT2JqZWN0Kj4oKSwgbWV0aG9kLm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwgZWl0aGVyOgot
ICAgICAgICAgICAgLy8gLSBOb3QgbG9hZCBmcm9tIHRoZSBwcm90b3R5cGUgYmVjYXVzZSBjb25z
dGFudCBmb2xkaW5nIHdpbGwgc3VjY2VlZCBpbiB0aGUKLSAgICAgICAgICAgIC8vICAgYmFja2Vu
ZCwgb3IKLSAgICAgICAgICAgIC8vIC0gRW1pdCBpbnZhbGlkIGNvZGUgdGhhdCBmYWlscyB3YXRj
aHBvaW50IGNoZWNrcy4gVGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlCi0gICAgICAgICAgICAvLyAg
IHByb3BlcnR5IGJlY29tZXMgbXV0YWJsZSBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB3ZSBhbHJl
YWR5IHNldCB0aGUgd2F0Y2hwb2ludAotICAgICAgICAgICAgLy8gICBhYm92ZS4gVGhpcyBjYXNl
IGlzIE9LIHNpbmNlIHRoZSBjb2RlIHdpbGwgZmFpbCB3YXRjaHBvaW50IGNoZWNrcyBhbmQgbmV2
ZXIKLSAgICAgICAgICAgIC8vICAgZ2V0IGluc3RhbGxlZC4KICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4Niw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlcyh2YXJpYW50LnN0cnVjdHVyZVNldCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhp
bmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUn
cy4gRG9uJ3QgbmVlZCB0byB3YXRjaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNh
bGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYg
YW55IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXRE
YXRhKCkuY2FzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZXMo
Z2V0Q2FzZS5zZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NzAsMjQgKzM4NzAsMjQgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAoZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IC8vIFByb3RlY3QgYWdhaW5zdCBjcmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRoIHplcm8gaW5w
dXRzLiBMTFZNIGRvZXNuJ3QgbGlrZSB0aGF0LgogICAgICAgICAgICAgdGVybWluYXRlKEJhZENh
Y2hlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
VmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXplKCkpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS5jYXNlcy5zaXplKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykKICAgICAgICAg
ICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBj
YXNlICIsIGkpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTXVsdGlHZXRCeU9mZnNldCBmYWlsIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY29udGlu
dWF0aW9uIikpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2Vz
OwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEdldEJ5SWRWYXJp
YW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KClbal07Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgpOyBqLS07KSB7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNlLnNldCgpW2pd
OwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAg
ICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJs
b2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CiAgICAgICAgICAgICB9CkBAIC0zODk4LDI5ICszODk4LDM2
IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0
QmxvY2s7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3Vs
dHM7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52
YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIEdldEJ5
T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNp
emUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBi
YXNlU2V0Lm1lcmdlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdDsKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQ7Ci0gICAgICAgICAg
ICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdGFu
dFJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2
YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb25zdGFu
dFJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFs
dWU6OmVuY29kZShjb25zdGFudFJlc3VsdCkpOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUo
bWV0aG9kLmNvbnN0YW50KCktPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6
CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTog
ewogICAgICAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eUJhc2UgPSB3ZWFrUG9pbnRlcih2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zm
c2V0TWV0aG9kOjpMb2FkKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBiYXNl
OwotICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkp
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2Ug
PSB3ZWFrUG9pbnRlcihtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxsKCkpOworICAg
ICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJhc2Us
IG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBs
b2FkUHJvcGVydHkocHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQu
b2Zmc2V0KCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQ
cm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZp
ZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKHJlc3VsdCkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODc0
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KAogICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBh
Y3QpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZp
cmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpCiAgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAg
ICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0
NyArMTMyLDMzIEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgog
fQogCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAogICAg
IE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9
PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2Jq
ZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgICAg
ICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAg
ICBqaXQsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAgICAgICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2ludCk7Ci0gICAg
ICAgICAgICBvay5saW5rKCZqaXQpOwotICAgICAgICB9CisgICAgaWYgKGNvbmRpdGlvbi5pc1dh
dGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgY29u
ZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCisg
ICAgICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CisKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAot
ICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAg
ICAgICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlD
b25kaXRpb25zKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCiAgICAgTWFj
cm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAK
LSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0Nl
bGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5m
bywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBj
aGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQog
fQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1
ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgdGFyZ2V0KQpAQCAtMjk2LDExICsyODIsMTIgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1
c3RvbUZvcihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgRnVuY3Rp
b25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRj
aHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NM
YWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVy
ZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworICAg
IAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2
YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzNyArMzMzLDMxIEBAIHN0YXRpYyBib29s
IGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVy
ZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwog
CiAgICAgaWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChzdHVi
SW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJyU3Ry
dWN0dXJlID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAg
IGlmIChjaGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFp
bi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwg
KytpdCkgewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90
b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChw
cm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwot
ICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1Ykpp
dCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQo
IXByb3RvT2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJl
KTsKKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9u
U2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hH
UFIpOworCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBTdHJ1Y3R1
cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAgICB9CiAgICAgCi0g
ICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2
bSwgb2Zmc2V0KTsKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7
CiAgICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgewor
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdl
IGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byBy
ZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxv
YWRUYXJnZXRGcm9tUHJveHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFz
ZUZvckdldEdQUik7Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0dWJK
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjb25kaXRpb25TZXQuc2xvdEJh
c2VDb25kaXRpb24oKS5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgYmFzZUZv
ckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBGb3IgcHJveHkgb2JqZWN0cywgd2UgbmVlZCB0byBkbyBhbGwgdGhlIFN0cnVjdHVyZSBjaGVj
a3MgYmVmb3JlIG1vdmluZyB0aGUgYmFzZUdQUiBpbnRvCkBAIC02MjcsOSArNjA4LDggQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNlbGwoVgogICAgICAgICBhc09iamVjdChj
ZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwogICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwogICAgIH0KLSAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSk7CiAgICAgCi0gICAgaWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3Bl
cnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMo
KSkKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQog
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIHJldHVybiBBdHRlbXB0VG9DYWNo
ZTsKQEAgLTgyNywyMSArODA3LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWls
ZEdldEJ5SUQKICAgICB9CiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5z
ZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIFN0cnVjdHVy
ZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgCiAgICAg
aWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAg
ICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAog
ICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6
ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFp
bkFjY2VzcygKLSAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2Uo
KSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBl
Q2hhaW4pCisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm90b3R5cGVQcm9wZXJ0eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4
ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworCisgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hh
aW4oZXhlYyk7CisKKyAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zm
c2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQog
ICAgIAogICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0Ojpmcm9tKHN0dWJJbmZvKTsKQEAgLTg1Miw3ICs4MzMsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0g
ICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJ
bmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRG
b3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQs
IG9mZnNldCwgCiAgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53
YXRjaHBvaW50U2V0KCksIAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1
YlJvdXRpbmUpOwpAQCAtODcxLDcgKzg1Miw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygK
ICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBz
dHViUm91dGluZSwgc3RydWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsK
KyAgICAgICAgY29uZGl0aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1
Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMs
MjYgKzk3NCwyOCBAQCBzdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdl
dE9sZFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0
dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0
YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZN
KiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisg
ICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1l
IHBuYW1lKGlkZW50KTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsK
KyAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlz
T2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBu
YW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRs
eShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAg
aWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYg
d2UgZG9uJ3QgaGF2ZQogICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4u
CiAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpCiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFu
ZCB0aGUgc3RydWN0dXJlIGhhcwpAQCAtMTAyMCwxNCArMTAwMywxNCBAQCBzdGF0aWMgU3RydWN0
dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBz
a2lwIHRoaXMhIEltcGxlbWVudCBpdCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CiAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobm9ybWFs
aXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hh
aW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3Rv
dHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgLy8gZW1pdFB1dFRyYW5zaXRpb25TdHViCisgICAgaWYgKHB1dEtp
bmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICp2bSwgZXhlYy0+Y29kZUJs
b2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7
CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91
dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwpAQCAtMTA4MywxNyArMTA2Niw4IEBAIHN0YXRp
YyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAg
ICAgIG9sZFN0cnVjdHVyZSkpOwogICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKLSAgICAgICAgb2xkU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgICAgIAotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAg
ICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5o
ZWFkKCk7ICppdDsgKytpdCkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNo
ZWNrKAotICAgICAgICAgICAgICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUjEpOwotICAgICAgICB9Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7CiAKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCkBAIC0xMjI4LDcgKzEyMDIsNyBA
QCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0
ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAg
aWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQpAQCAtMTI1Niw4ICsxMjMwLDggQEAg
c3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICAgICAgZXhl
Yy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwKICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gb2xkU3RydWN0dXJlOwor
ICAgIAorICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkK
QEAgLTEyODEsMTIgKzEyNTUsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
UHV0QnlJRAogICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hl
YWJsZVB1dCgpKSB7CiAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
Ok5ld1Byb3BlcnR5KSB7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0g
ZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1
cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgICAgICAgICBpZiAoIW9s
ZFN0cnVjdHVyZSkKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAg
ICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoCiAgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldCgKQEAgLTEyOTQsNyArMTI2Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVw
YXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RC
dWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFp
biwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRU
cmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJl
LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0x
MzEyLDIwICsxMjg1LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQKICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewog
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7
Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNv
dW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1
cmUsIHNsb3QuYmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9
PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAg
ICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAg
ICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFz
ZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNl
dCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlz
dCogbGlzdDsKICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0
S2luZCwgc3R1YkluZm8pOwogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1
YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xv
dCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBr
aW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9u
U2V0LAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpLApAQCAtMTMzNiw3ICsxMzExLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlUHV0QnlJRAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVy
KAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAg
ICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDog
UHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90
b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7Cisg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwg
c3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29k
ZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTM4MCwx
NyArMTM1NSwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAg
ICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAotICAgICAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRH
ZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKSAKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0
VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAg
ICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgICAg
IGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0
aW9uKAogICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwKICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAogICAgICAg
ICB9IGVsc2UgewpAQCAtMTQyMywyMSArMTM5NywyNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwg
c2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGls
bE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1
YlJvdXRpbmU7Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAg
ICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNl
KCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFp
bkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNl
dCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAg
ICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owor
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAh
PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0
dXJlLCBzbG90LmJhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwo
KSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9
IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAg
IG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAg
ICAgICAgIAogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBs
aXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAK
ICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhl
Yywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZv
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3Qp
LCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwK
ICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAgICAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0
LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCkBAIC0xNDQ4LDcgKzE0MjYsNyBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxpc3QtPmFkZEFjY2Vz
cyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQ
dXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAg
ICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0
ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7CkBAIC0xNDg3LDExICsxNDY1LDE3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKLSAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90QmFzZSA9IHdhc0Zv
dW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVfdCBjb3VudCA9ICFm
b3VuZFNsb3RCYXNlIHx8IGZvdW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAgICAgICBub3JtYWxp
emVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgZm91bmRTbG90
QmFzZSwgaWRlbnQsIG9mZnNldElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291bnQgPT0gSW52YWxp
ZFByb3RvdHlwZUNoYWluKQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKKyAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAh
PSBiYXNlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVu
dC5pbXBsKCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZGl0aW9uU2V0
ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwo
KSk7CisgICAgfQorICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CkBAIC0xNTE2LDcgKzE1MDAsNiBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0
cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZTsKICAgICAKICAgICB7CkBAIC0xNTQ3LDE4ICsxNTMwLDggQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgaWYgKHNsb3Qud2F0Y2hw
b2ludFNldCgpKQogICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCktPmFkZChzdHViSW5m
by5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0
cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0
ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVj
dChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAg
U3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvdHlwZS0+c3RydWN0dXJlKCk7Ci0gICAg
ICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJv
dG90eXBlLCBwcm90b1N0cnVjdHVyZSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHVi
Sml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAg
ICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJl
c1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZv
ckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykp
OwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQorICAg
ICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgICAgIGNvbmRpdGlv
blNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMs
IHNjcmF0Y2hHUFIpOwogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBzdHVi
Sml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJl
dmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVk
U3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCi0KLSNpbmNs
dWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlQ2hhaW4uaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgewotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIDog
bV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUocHJvdG90eXBl
KQotewotICAgIEFTU0VSVChtX3Byb3RvdHlwZS5pc051bGwoKSB8fCBtX3Byb3RvdHlwZS5pc09i
amVjdCgpKTsKLSAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUpLT5zdHJ1Y3R1
cmUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZVN0cnVjdHVy
ZSgpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY3VycmVudCk7Ci19Ci0KLUludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBoZWFkKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0KQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFs
T2JqZWN0KSkKLXsKLSAgICBpZiAobV9wcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGFzT2JqZWN0KG1fcHJvdG90eXBlKS0+
c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVT
dHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlKQot
ICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1f
cHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0g
ICAgbV92ZWN0b3IuYXBwZW5kKHByb3RvdHlwZVN0cnVjdHVyZSk7Ci19Ci0KLUludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQotICAgIDogbV9nbG9iYWxP
YmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQt
PnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgY2hhaW4tPmhlYWQoKVtpXTsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQo
Y2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46Oklu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVh
ZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCkKLSAgICA6IG1fZ2xvYmFs
T2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFk
LT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4t
PmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46On5JbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKCkKLXsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpp
c1N0aWxsVmFsaWQoKSBjb25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1f
cHJvdG90eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAoYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSktPnN0cnVjdHVy
ZSgpICE9IG1fdmVjdG9yW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBj
dXJyZW50UHJvdG90eXBlID0gbV92ZWN0b3JbaV0tPnN0b3JlZFByb3RvdHlwZSgpOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXRj
aGVzKFN0cnVjdHVyZUNoYWluKiBjaGFpbikgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmVjdG9yW2ld
ICE9IGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGlmIChjaGFpbi0+aGVhZCgpW21fdmVjdG9yLnNpemUoKV0pCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjptYXlJbnRlcmNlcHRTdG9yZVRvKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAg
aWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3JtYWxpemVkKCkKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0KGkpLT50YWtlc1Ns
b3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSlNPYmplY3QqIEludGVuZGVkU3RydWN0
dXJlQ2hhaW46OnRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fdmVj
dG9yLmlzRW1wdHkoKSk7Ci0gICAgaWYgKG1fdmVjdG9yLnNpemUoKSA9PSAxKQotICAgICAgICBy
ZXR1cm4gYXNPYmplY3QobV9wcm90b3R5cGUpOwotICAgIHJldHVybiBhc09iamVjdChtX3ZlY3Rv
clttX3ZlY3Rvci5zaXplKCkgLSAyXS0+c3RvcmVkUHJvdG90eXBlKCkpOwotfQotCi1ib29sIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW46Om9wZXJhdG9yPT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbiYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0ID09IG90aGVy
Lm1fZ2xvYmFsT2JqZWN0Ci0gICAgICAgICYmIG1fcHJvdG90eXBlID09IG90aGVyLm1fcHJvdG90
eXBlCi0gICAgICAgICYmIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOwotfQotCi12b2lkIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OmdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiB2ZWN0b3IpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSBjdXJyZW50UHJvdG90eXBlID0g
bV9wcm90b3R5cGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7
Ci0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gYXNPYmplY3QoY3VycmVudFByb3Rv
dHlwZSk7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGF0KGkpOwotICAg
ICAgICB2ZWN0b3IuYXBwZW5kKENvbnN0YW50U3RydWN0dXJlQ2hlY2soY3VycmVudE9iamVjdCwg
Y3VycmVudFN0cnVjdHVyZSkpOwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0gY3VycmVudFN0
cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19Ci0K
LXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmbV9nbG9i
YWxPYmplY3QpOwotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmbV9wcm90b3R5
cGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fdmVjdG9yW2ldKTsKLX0KLQot
dm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIDApOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0
dXJlQ2hhaW46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KAotICAgICAgICAiKGdsb2JhbCA9ICIsIFJh
d1BvaW50ZXIobV9nbG9iYWxPYmplY3QpLCAiLCBoZWFkID0gIiwKLSAgICAgICAgaW5Db250ZXh0
KG1fcHJvdG90eXBlLCBjb250ZXh0KSwgIiwgdmVjdG9yID0gWyIpOwotICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXBJbkNvbnRleHQobV92ZWN0
b3JbaV0sIGNvbnRleHQpKTsKLSAgICBvdXQucHJpbnQoIl0pIik7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faAotI2Rl
ZmluZSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLQotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0
dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgSlNH
bG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFZNOwotc3RydWN0IER1
bXBDb250ZXh0OwotCi1jbGFzcyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluIDogcHVibGljIFJlZkNv
dW50ZWQ8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gewotcHVibGljOgotICAgIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKik7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVy
ZSk7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pOwotICAgIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCk7Ci0gICAgfkludGVuZGVkU3RydWN0dXJlQ2hh
aW4oKTsKLSAgICAKLSAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgbWF0
Y2hlcyhTdHJ1Y3R1cmVDaGFpbiopIGNvbnN0OwotICAgIGJvb2wgbWF5SW50ZXJjZXB0U3RvcmVU
byhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICBib29sIGlzTm9ybWFsaXplZCgpOwotICAg
IAotICAgIGJvb2wgdGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKTsKLSAgICAK
LSAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9Ci0g
ICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0K
LSAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Jb
aW5kZXhdOyB9Ci0gICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgSlNPYmplY3QqIHRlcm1pbmFsUHJvdG90
eXBlKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3IubGFzdCgpOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZ2F0aGVyQ2hlY2tzKENv
bnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNv
bnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7
Ci0gICAgSlNWYWx1ZSBtX3Byb3RvdHlwZTsKLSAgICBWZWN0b3I8U3RydWN0dXJlKj4gbV92ZWN0
b3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEludGVuZGVkU3RydWN0
dXJlQ2hhaW5faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNDggKzE5NCw2IEBAIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBqc0FkZChDYWxsRnJhbWUqIGMKIAogI2RlZmluZSBJbnZhbGlkUHJvdG90
eXBlQ2hhaW4gKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCiAKLWlubGluZSBz
aXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIHNsb3RPZmZzZXQpCi17Ci0g
ICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwotICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAg
ICAgIAotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkK
LSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUHJvdG90eXBlQ2hhaW47Ci0KLSAgICAgICAgY29u
c3QgVHlwZUluZm8mIHR5cGVJbmZvID0gc3RydWN0dXJlLT50eXBlSW5mbygpOwotICAgICAgICBp
ZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5l
d0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgcmV0dXJuIElu
dmFsaWRQcm90b3R5cGVDaGFpbjsKLSAgICAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIHYgPSBz
dHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpOwotCi0gICAgICAgIC8vIElm
IHdlIGRpZG4ndCBmaW5kIHNsb3RCYXNlIGluIHRoZSBiYXNlJ3MgcHJvdG90eXBlIGNoYWluLCB0
aGVuIHRoZSBiYXNlCi0gICAgICAgIC8vIG11c3QgYmUgYSBwcm94eSBmb3IgYW5vdGhlciBvYmpl
Y3QuCi0KLSAgICAgICAgaWYgKHYuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmICghc2xvdEJh
c2UpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFBy
b3RvdHlwZUNoYWluOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNDZWxsKiBjZWxsID0gdi5hc0Nl
bGwoKTsKLSAgICAgICAgc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAg
Ly8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwgaXQncyBhIGdv
b2QgYmV0IHRoYXQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgZGlj
dGlvbmFyeS4KLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAg
ICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGFzT2JqZWN0
KGNlbGwpKTsKLSAgICAgICAgICAgIGlmIChzbG90QmFzZSA9PSBjZWxsKQotICAgICAgICAgICAg
ICAgIHNsb3RPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lKTsgCi0gICAg
ICAgIH0KLSAgICAgICAgKytjb3VudDsKLQotICAgICAgICBpZiAoc2xvdEJhc2UgPT0gY2VsbCkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIGNvdW50Owot
fQotCiBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUt
PnZtKCk7CkBAIC0yNTgsMjMgKzIxNiw2IEBAIGlubGluZSBzaXplX3Qgbm9ybWFsaXplUHJvdG90
eXBlQ2hhaW4oQ2EKICAgICB9CiB9CiAKLWlubGluZSBib29sIGlzUHJvdG90eXBlQ2hhaW5Ob3Jt
YWxpemVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQotewotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUg
diA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IGlmICh2LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgc3RydWN0dXJlID0gdi5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IE9wZXJhdGlvbnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEyLDcgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIGVsc2UKICAgICAgICAg
bWF4VHJhbnNpdGlvbkxlbmd0aCA9IHNfbWF4VHJhbnNpdGlvbkxlbmd0aDsKICAgICBpZiAoc3Ry
dWN0dXJlLT50cmFuc2l0aW9uQ291bnQoKSA+IG1heFRyYW5zaXRpb25MZW5ndGgpIHsKLSAgICAg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CiAgICAgICAgIG9mZnNldCA9IHRy
YW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0
dXJuIHRyYW5zaXRpb247CkBAIC00ODksMTEgKzQ4OSwxMSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YXR0cmlidXRlQ2hhbmdlVHJhCiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0KIAotU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rp
b25hcnlLaW5kIGtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJl
KiBkZWZlcnJlZCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSk7CiAgICAgCi0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBz
dHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0
dXJlLCBkZWZlcnJlZCk7CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3Ry
dWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwpA
QCAtNTA3LDkgKzUwNyw5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFu
c2kKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRv
Q2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKLSAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCk7CisgICAgcmV0dXJu
IHRvRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgQ2FjaGVkRGljdGlvbmFyeUtp
bmQsIGRlZmVycmVkKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVE
aWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNzYx
LDYgKzc2MSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6YWxsb2NhdGVSYXJlRGF0YShWTSYgdm0pCiBX
YXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBv
aW50U2V0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIEFTU0VSVCghaXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisKKyAgICAvLyBJbiBzb21lIHBsYWNlcyBpdCdzIGNv
bnZlbmllbnQgdG8gY2FsbCB0aGlzIHdpdGggYW4gaW52YWxpZCBvZmZzZXQuIFNvLCB3ZSBkbyB0
aGUgY2hlY2sgaGVyZS4KKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAgICAgICBh
bGxvY2F0ZVJhcmVEYXRhKHZtKTsKQEAgLTc4MSwxMSArNzg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6
OnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvcgogewogICAgIEFTU0VSVCghaXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSk7CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZ2V0KHZtLCBw
cm9wZXJ0eU5hbWUpOwotICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIG9mZnNldCk7CisgICAgc3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KHZtLCBnZXQodm0sIHByb3BlcnR5TmFtZSkpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6ZGlkQ2Fj
aGVQcm9wZXJ0eVJlcGxhY2VtZW50KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpAQCAt
MTExNyw2ICsxMTE3LDE3IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGMKICAgICAKICAgICBpZiAobV9wcm90b3R5cGUuZ2V0KCkuaXNDZWxsKCkpCiAgICAgICAgIG91
dC5wcmludCgiLCBQcm90bzoiLCBSYXdQb2ludGVyKG1fcHJvdG90eXBlLmdldCgpLmFzQ2VsbCgp
KSk7CisKKyAgICBzd2l0Y2ggKGRpY3Rpb25hcnlLaW5kKCkpIHsKKyAgICBjYXNlIE5vbmVEaWN0
aW9uYXJ5S2luZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWREaWN0aW9uYXJ5S2lu
ZDoKKyAgICAgICAgb3V0LnByaW50KCIsIERpY3Rpb25hcnkiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kOgorICAgICAgICBvdXQucHJpbnQoIiwgVW5j
YWNoZWFibGVEaWN0aW9uYXJ5Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBv
dXQucHJpbnQoIl0iKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEyLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlPZmZzZXQmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJl
KiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGF0dHJpYnV0
ZUNoYW5nZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHRv
Q2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJs
ZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFN0cnVjdHVyZSogc2VhbFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9u
KFZNJiwgU3RydWN0dXJlKik7CkBAIC0xOTQsNyArMTk0LDE5IEBAIHB1YmxpYzoKICAgICBib29s
IGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURp
Y3Rpb25hcnlLaW5kOyB9CiAgICAgYm9vbCBpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIGNvbnN0
IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgPT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZDsgfQog
ICAKLSAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB7IHJldHVybiBkaWN0
aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQgJiYgIXR5cGVJbmZvKCkucHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nKCk7IH0KKyAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5j
YWNoZWREaWN0aW9uYXJ5S2luZAorICAgICAgICAgICAgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nKCkKKyAgICAgICAgICAgICYmICEodHlwZUluZm8oKS5oYXNJbXB1cmVH
ZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVz
V2F0Y2hwb2ludHMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpCisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpCisgICAgICAgICAgICAmJiB0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3Bl
cnR5U2xvdCgpCisgICAgICAgICAgICAmJiB0eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5Rmly
ZXNXYXRjaHBvaW50cygpOworICAgIH0KIAogICAgIC8vIFdlIHVzZSBTbG93UGF0aCBpbiBHZXRC
eUlkU3RhdHVzIGZvciBzdHJ1Y3R1cmVzIHRoYXQgbWF5IGdldCBuZXcgaW1wdXJlIHByb3BlcnRp
ZXMgbGF0ZXIgdG8gcHJldmVudAogICAgIC8vIERGRyBmcm9tIGlubGluaW5nIHByb3BlcnR5IGFj
Y2Vzc2VzIHNpbmNlIHN0cnVjdHVyZXMgZG9uJ3QgdHJhbnNpdGlvbiB3aGVuIGEgbmV3IGltcHVy
ZSBwcm9wZXJ0eSBhcHBlYXJzLgpAQCAtMjAyLDcgKzIxNCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiB0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpOwog
ICAgIH0KLQorICAgIAogICAgIC8vIFR5cGUgYWNjZXNzb3JzLgogICAgIFR5cGVJbmZvIHR5cGVJ
bmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7
IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9v
bCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQpAQCAt
NTI4LDcgKzU0MCw3IEBAIHByaXZhdGU6CiAgICAgLy8gdG8gdW5sb2NrIGl0LgogICAgIHZvaWQg
ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oVmVjdG9yPFN0cnVjdHVyZSos
IDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiwgUHJvcGVydHlUYWJsZSomKTsKICAgICAKLSAg
ICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJl
KiwgRGljdGlvbmFyeUtpbmQpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRy
YW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAKICAgICBQcm9wZXJ0eU9m
ZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIFBy
b3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzYsNiArNTM2LDcgQEAgcHVibGljOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsKIAogICAgIHZvaWQg
cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYsIFdh
dGNocG9pbnQqKTsKKyAgICAKICAgICAvLyBGSVhNRTogVXNlIEF0b21pY1N0cmluZyBvbmNlIGl0
IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlmaWVyLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
YWRkSW1wdXJlUHJvcGVydHkoY29uc3QgU3RyaW5nJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4tcHJv
dG8tY2hhbmdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRlZmlu
ZWQtYWNjZXNzLWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2UuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNCBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciBwID0ge307CisgICAg
dmFyIG8gPSB7fTsKKyAgICBvLl9fcHJvdG9fXyA9IHA7CisgICAgdmFyIHJlc3VsdDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCA9IG8uZjsKKyAg
ICAgICAgaWYgKGkgPT0gNTApCisgICAgICAgICAgICBwLmYgPSA0MjsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworcHJpbnQoZm9vKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hhbmdlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVk
LWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNoYW5n
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACitmdW5jdGlvbiBmb28obykgewor
ICAgIHJldHVybiBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBwID0ge307Cit2YXIg
byA9IE9iamVjdC5jcmVhdGUocCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgaW4gbG9vcDogIiArIHJlc3VsdDsKK30K
KworcC5mID0gNDI7Cit2YXIgcmVzdWx0ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPT0gNDIpCisg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE4NzU2NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE4IEBACisyMDE1LTA3LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHIHNob3VsZCBoYXZlIGFkYXB0aXZlIHN0cnVjdHVyZSB3YXRj
aHBvaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ2OTI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGEgbWljcm9iZW5jaG1hcmsgdGhhdCBpbGx1c3RyYXRlcyB0aGUgbmVlZCBmb3IgdGhpcyBm
ZWF0dXJlLiBUaGlzIGJlbmNobWFyayBnZXRzIDU4eCBmYXN0ZXIgd2l0aAorICAgICAgICB0aGlz
IGNoYW5nZS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11
dGF0aW5nLXByb3RvdHlwZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNjZXNzLXdpdGgt
bXV0YXRpbmctcHJvdG90eXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisKIDIwMTUtMDct
MjkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhl
IHNwYW5uZXIgcGxhY2Vob2xkZXIgZnJvbSBtX3NwYW5uZXJNYXAgd2hlbiB0aGUgcGxhY2Vob2xk
ZXIgb2JqZWN0CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mt
d2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlw
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3By
b3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdp
dGgtbXV0YXRpbmctcHJvdG90eXBlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlw
ZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5
cGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBl
LWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRl
c3RzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNj
ZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5n
LXByb3RvdHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBm
b28obykgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
OyArK2kpCisgICAgICAgIHJlc3VsdCArPSBvLmY7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
bm9JbmxpbmUoZm9vKTsKKwordmFyIHAgPSB7Zjo0Mn07Cit2YXIgbyA9IE9iamVjdC5jcmVhdGUo
cCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHBbImkiICsgaV0g
PSBpOworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAqIDEw
MCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvdW5kZWZpbmVkLXByb3BlcnR5
LWFjY2Vzcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy91bmRlZmluZWQtcHJvcGVydHktYWNjZXNzLmpzCShyZXZpc2lvbiAxODc0ODgpCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy91bmRlZmluZWQtcHJvcGVydHktYWNj
ZXNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw3ICsxMSw3IEBAIGZ1bmN0aW9uIGZvbygpIHsK
IH0KIHJlc3VsdCA9IGZvbygpOwogaWYgKHJlc3VsdCAhPSB1bmRlZmluZWQpCi0gICAgdGhyb3cg
IkJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0
OiAiICsgcmVzdWx0KTsKIAogLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGEgY2FjaGVkIHByb3Bl
cnR5IGxvb2t1cCBtaXNzIGRvZXNuJ3QgY29udGludWUgdG8gZmlyZSB3aGVuIHRoZSBwcm9wZXJ0
eSBzdWRkZW5seSBhcHBlYXJzIG9uIHRoZSBvYmplY3QuCiAKQEAgLTI2LDcgKzI2LDcgQEAgZnVu
Y3Rpb24gYmFyKCkgewogfQogdmFyIHJlc3VsdCA9IGJhcigpOwogaWYgKHJlc3VsdCAhPSAxKQot
ICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJvcigi
QmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiBzb21lR2xvYmFsID0gdW5kZWZpbmVkOwogCiAvLyBU
aGlzIHRlc3QgY2hlY2tzIHRoYXQgYSBjYWNoZWQgcHJvcGVydHkgbG9va3VwIG1pc3MgZG9lc24n
dCBjb250aW51ZSB0byBmaXJlIHdoZW4gdGhlIHByb3BlcnR5IHN1ZGRlbmx5IGFwcGVhcnMgb24g
dGhlIG9iamVjdCdzIHByb3RvdHlwZS4KQEAgLTQ0LDUgKzQ0LDUgQEAgZnVuY3Rpb24gYmF6KCkg
ewogfQogdmFyIHJlc3VsdCA9IGJheigpOwogaWYgKHJlc3VsdCAhPSAyKQotICAgIHRocm93ICJC
YWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDog
IiArIHJlc3VsdCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257851</attachid>
            <date>2015-07-30 14:07:56 -0700</date>
            <delta_ts>2015-07-30 23:03:03 -0700</delta_ts>
            <desc>passing JSC tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>302778</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2OSBA
QAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3Mu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpD
b21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9Db21wbGV4
R2V0U3RhdHVzLmg6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OkNvbXBsZXhHZXRT
dGF0dXMpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjp0YWtlc1Nsb3dQYXRoKToK
KyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6a2luZCk6CisgICAgICAgIChKU0M6OkNv
bXBsZXhHZXRTdGF0dXM6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6
OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmF0dHJpYnV0
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpzcGVjaWZpY1Zh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6Y2hhaW4pOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlh
bnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6R2V0
QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFu
dDo6YmFzZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yISk6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkVmFyaWFudDo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpjYWxsTGlua1N0YXR1
cyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojpjb25zdGFudENoZWNrcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNo
YWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0QmFycmllcik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRl
cik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdp
dGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmVx
dWl2YWxlbmNlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Om9wZXJh
dG9yISk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpvYmplY3QpOgor
ICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6Y29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dWlkKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVy
dHlDb25kaXRpb246Omhhc09mZnNldCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aGFzQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjph
dHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc1By
b3RvdHlwZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcm90b3R5
cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzUmVxdWlyZWRW
YWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpyZXF1aXJlZFZh
bHVlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc2gpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc0NvbXBhdGlibGVXaXRo
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OndhdGNoaW5nUmVxdWly
ZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoOjplcXVhbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvck9iamVjdCk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JDb25kaXRpb25LaW5kKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om51bWJlck9mQ29uZGl0aW9uc1dp
dGhLaW5kKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omhhc09u
ZVNsb3RCYXNlQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Om1lcmdlZFdpdGgpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KToKKyAgICAgICAgKEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Om5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQpOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxMaXZlKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyk6CisgICAgICAgIChKU0M6OmdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcyk6CisgICAgICAgIChKU0M6OmdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KToKKyAgICAgICAg
KiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9uRW1wdHkpOgor
ICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aXNWYWxpZCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojppc0VtcHR5KToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmVuZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpyZWxlYXNlUmF3UG9pbnRlcik6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIpOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6RGF0YTo6RGF0YSk6CisgICAgICAgICog
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5
SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+
R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnZpc2l0V2Vhayk6
CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOgorICAgICAgICAo
SlNDOjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJ
ZEFjY2Vzczo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y29uZGl0
aW9uU2V0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpjaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkdldEJ5SWRBY2Nlc3M6OmNoYWluQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2Rl
L1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
Ojpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjp2
aXNpdFdlYWspOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaDoK
KyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6UHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNj
ZXNzOjpzZXR0ZXIpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpuZXdTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpjb25kaXRpb25TZXQpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjpzdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRB
Y2Nlc3M6OmNoYWluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6Y2hh
aW5Db3VudCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJl
cXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlD
b25kaXRpb246OmlzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
Ojppc1dhdGNoYWJsZVdoZW5WYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
Ojppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJvcGVydHlDb25kaXRpb24pOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcik6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjplcXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp1aWQpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b246Om9mZnNldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpoYXNBdHRyaWJ1
dGVzKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmF0dHJpYnV0ZXMpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzUHJvdG90eXBlKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246OnByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjpoYXNSZXF1aXJlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OnJlcXVpcmVkVmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6
aGFzaCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzQ29tcGF0aWJsZVdpdGgpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246Ondh
dGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbkhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OnNldHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjptYWtl
c0NhbGxzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldp
dGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6OmtpbmQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9mZnNl
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpjYWxsTGlua1N0YXR1cyk6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojpjb25zdGFudENoZWNrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6flN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpwdXNoKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvOjp+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAg
KEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KToKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVu
Y2VBbmRBZGRXYXRjaHBvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQpOgorICAgICAgICAoSlND
OjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmNvZGVCbG9jayk6CisgICAgICAgIChK
U0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6c3R1YkluZm8pOgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0
V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBsYWNlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNldFNlZW4pOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aW5z
dGFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50OjpmaXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omtl
eSk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlBy
b3BlcnR5V2F0Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKiBkZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5z
dGFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50OjprZXkpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVj
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50
ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjplbWl0Q2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKToKKyAg
ICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
OjplbWl0R2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1Bo
YXNlOjphZGRCYXNlQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1Bo
YXNlOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjphZGRDaGVja3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVy
Vmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVk
VmFsdWVBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNo
cG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRX
YXRjaHBvaW50czo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hw
b2ludHM6OmNvbnNpZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6
OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphcmVT
dGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTZXRQb2ludGVyQWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZH
OjpTZXRQb2ludGVyQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpTZXRQb2ludGVyQWRhcHRvcjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5mZXJyZWRWYWx1ZUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6CisgICAgICAgIChK
U0M6OkRGRzo6SW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpERkc6OkFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjpoYXNCZWVuSW52YWxp
ZGF0ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFw
dG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6
CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVk
KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5D
b250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hl
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY1NldEFkYXB0b3I6OmFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY1NldEFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRl
ZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXppbHkpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6Y29udGFpbnMpOgorICAg
ICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaDoKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjp3YXRjaENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzU2Fm
ZVRvTG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxpdmVuZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5o
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppZGVudGlmaWVycyk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OndhdGNocG9pbnRzKToKKyAgICAgICAgKiBkZmcvREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhv
ZDo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNlOjpkdW1wSW5D
b250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcCk6
CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1l
dGhvZDo6R2V0QnlPZmZzZXRNZXRob2QpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0
TWV0aG9kOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6
OmxvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVBy
b3RvdHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6Om9wZXJhdG9y
ISk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OmtpbmQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpwcm90b3R5cGUpOgorICAgICAgICAoSlND
OjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok11
bHRpR2V0QnlPZmZzZXRDYXNlOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6TXVs
dGlHZXRCeU9mZnNldENhc2U6Om1ldGhvZCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2U6OnJ1bik6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRCeU9mZnNldCk6CisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZXBhdGNoQnlJZFNlbGZBY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMpOgorICAgICAgICAoSlNDOjpyZXBs
YWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUJ5SWRTdHViKToKKyAgICAgICAg
KEpTQzo6YWN0aW9uRm9yQ2VsbCk6CisgICAgICAgIChKU0M6OnRyeUJ1aWxkR2V0QnlJRExpc3Qp
OgorICAgICAgICAoSlNDOjplbWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjplbWl0
UHV0VHJhbnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5UmVwYXRj
aEluKToKKyAgICAgICAgKEpTQzo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpu
b3JtYWxpemVQcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluRm9yQ2hhaW5BY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppc1Byb3RvdHlw
ZUNoYWluTm9ybWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2lu
dFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9y
UmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5
UmVwbGFjZW1lbnQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICog
cnVudGltZS9WTS5oOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1v
ZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVj
ay1uZXcuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNz
LWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2UuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hhbmdlLmpzOiBBZGRlZC4KKwog
MjAxNS0wNy0yOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE4NzU1MC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTAgKzk3LDEzIEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcAog
ICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAogICAgIGJ5dGVjb2RlL01l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uY3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
Y3BwCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwCiAgICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKICAg
ICBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCisgICAgYnl0ZWNvZGUvUHJvcGVydHlD
b25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKICAgICBieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAKICAgICBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcApA
QCAtMTI4LDYgKzEzMSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBkZmcv
REZHQWJzdHJhY3RIZWFwLmNwcAogICAgIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAorICAgIGRm
Zy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCisgICAgZGZn
L0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKICAgICBkZmcvREZHQXJndW1lbnRz
RWxpbWluYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAog
ICAgIGRmZy9ERkdBcml0aE1vZGUuY3BwCkBAIC0xOTYsNiArMjAxLDcgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHAKICAgICBkZmcvREZH
TWluaWZpZWROb2RlLmNwcAogICAgIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAorICAg
IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAKICAgICBkZmcvREZHTmFpdmVEb21pbmF0
b3JzLmNwcAogICAgIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAgZGZnL0RGR05vZGUuY3Bw
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4
NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9v
bHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZl
bG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3Vy
YXRpb25zIj4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdTdWZmaXh8
V2luMzIiPgpAQCAtMzM3LDEwICszMzcsMTMgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXEp1bXBUYWJsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXE9wY29kZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFZhcmlhbnQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUmVkdWNlV2hpdGVzcGFj
ZS5jcHAiIC8+CkBAIC0zNjUsNiArMzY4LDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRlYnVnZ2VyXERlYnVnZ2VyU2NvcGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0Fic3RyYWN0SGVhcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQWJzdHJhY3RWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQXJpdGhNb2RlLmNwcCIgLz4KQEAgLTQzMyw2ICs0MzgsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05haXZlRG9taW5hdG9ycy5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmF0dXJhbExvb3BzLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlLmNwcCIgLz4KQEAgLTEw
MDEsMTEgKzEwMDcsMTQgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxMTEludENhbGxMaW5rSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGNvZGUu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wZXJhbmRzLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQ
cmVjaXNlSnVtcFRhcmdldHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFByb3BlcnR5Q29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxQdXRCeUlkU3RhdHVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxQdXRCeUlkVmFyaWFudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHV0S2luZC5oIiAvPgpAQCAtMTA0MSw2ICsxMDUwLDggQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHQWRqYWNlbmN5TGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0FsbG9jYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0FuYWx5c2lzLmgiIC8+CkBAIC0xMTMzLDYgKzExNDQsNyBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYWl2ZURvbWluYXRvcnMuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEw
Nyw2ICsxMDcsOCBAQAogCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNF
MDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1
RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYxNzI1RkYxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzI1
RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICovOyB9OworCQkwRjE4
RDNDRjFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NE
MUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICov
OyB9OworCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjE4RDNDRTFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUExODlE
ODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovOyB9OwogCQkwRjE5
MENBRDE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUIxODlEODJGNjAw
MEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFERDg0QTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjkzLDggKzI5NSw2IEBACiAJ
CTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZG
IC8qIERGR1ZhbGlkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYzQjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlB
MTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYz
RDBCQkMxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkExOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovOyB9OwotCQkwRjNEMEJC
RDE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkIxOTRBNDE0MzAwRkM5
Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZH
UHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmlu
Zy5jcHAgKi87IH07CiAJCTBGM0UwMUFCMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ4MTQ2MENC
QjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNv
dmVyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC01ODgsNiArNTg4LDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVE
NDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5j
cHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVE
MEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFBRjAwQzgw
RTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNGRjFCNjE4
QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcCAqLzsgfTsKKwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAv
KiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyog
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3Bw
ICovOyB9OworCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNF
NDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2MDBDODBF
MUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4QjY2MDBD
ODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNv
bmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0RkI0RUIw
MDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRGQjRGMDAw
OTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3Jz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
ODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlD
OTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5NCw2ICs3MDIsOCBAQAogCQkw
RkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5NkIgLyog
REZHRWRnZS5jcHAgKi87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmNwcCAqLzsgfTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhl
Y3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjRCNTIyMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGMkNE
NUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2MUE0Rjgw
MDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBGRjJDRDVD
MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRGODAwNDk1
NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERp
c2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4RUJENTgw
MDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4
NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlGRiAvKiB1
ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovOyB9OwpA
QCAtMTM4OSw4ICsxMzk5LDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRh
eENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NCQzZGRDAw
MTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMxOEM1NTNG
RTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8qIFNwaWxs
UmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsg
fTsKLQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1M0Y4
MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3MzhCODAw
OURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyogREZHRmFp
bGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5o
ICovOyB9OwogCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZFMTc5
NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg1Nyw2ICsxODY1
LDggQEAKIAkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29t
bW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblNs
b3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFCNDg3MTlB
MDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdNaW5pZmll
ZEdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0QxQjU1QTZF
MDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25S
ZWFzb24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAvKiBQ
cm9maWxlckpldHRpc29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFByb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVySmV0dGlz
b25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkxOEE5NDVC
RTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNDSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA0Miw4ICsy
MDUyLDYgQEAKIAkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcv
REZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjQxOUEx
MUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNEMEJCQjE5
NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1By
ZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyog
REZHUHJlUG9zdE51bWJlcmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdQcmVQb3N0TnVtYmVyaW5nLmg7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyog
VmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJl
Y292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzQ4LDYgKzIzNTYsMTQg
QEAKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJp
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5j
cHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8q
IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNF
NDAwMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA0MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDcxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1
MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2tJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUNGMTU0RkI0RUIwMDk4
M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0RvbWluYXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyog
REZHRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb21p
bmF0b3JzLmg7IHBhdGggPSBkZmcvREZHRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjQ0OSw2ICsyNDY1LDggQEAKIAkJMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUz
IC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBwYXRoID0gZGZnL0RGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0
RjcxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enou
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJF
NTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNl
dERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwOyBwYXRoID0gZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4
IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHBhdGggPSBkZmcvREZHTXVsdGlHZXRC
eU9mZnNldERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MkYxNThF
QkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBEaXNhc3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZG
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBVRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4
NkRpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzM0
MTU4RUJEOTQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuYzsgbmFtZSA9IHVkaXM4Nl9kZWNvZGUuYzsgcGF0aCA9IGRpc2Fzc2VtYmxlci91ZGlzODYv
dWRpczg2X2RlY29kZS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzE2OSw4ICsz
MTg3LDYgQEAKIAkJQTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1hcERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y4MTc5NzI2Mjkw
MDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXpl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGYWlsZWRGaW5h
bGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZEMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRG
aW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmFpbGVkRmlu
YWxpemVyLmg7IHBhdGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3OEE5NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmluYWxpemVyLmNw
cDsgcGF0aCA9IGRmZy9ERkdGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNDUwMSw4ICs0NTE3LDYgQEAKIAkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyog
SW50OEFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJy
YXkuaCAqLywKIAkJCQlBN0E4QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICov
LAotCQkJCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmNwcCAqLywKLQkJCQlBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5oICovLAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1
bmN0aW9uLmNwcCAqLywKIAkJCQlCQzExNjY3QTBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxG
dW5jdGlvbi5oICovLAogCQkJCUExMkJCRkYzMUIwNDRBOTgwMDY2NEI2OSAvKiBJbnRsT2JqZWN0
LmNwcCAqLywKQEAgLTQ4ODksNiArNDkwMywxMCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZC
QTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkz
MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2
RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGRDNFM0ZG
MUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQuY3BwICovLAorCQkJCTBGRDNFNDAwMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCAqLywKKwkJCQkwRjE4RDNDRDFCNTVB
NkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLywKKwkJ
CQkwRjE4RDNDRTFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmggKi8sCiAJCQkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxp
c3QuaCAqLywKIAkJCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxsb2NhdG9yLmgg
Ki8sCiAJCQkJQTczNzgxMDkxNzk5RUEyRTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggKi8sCkBA
IC01MDQ4LDYgKzUwNjYsOCBAQAogCQkJCTBGMkJEQzNFMTUyMjgwMTcwMENEODkxMCAvKiBERkdN
aW5pZmllZE5vZGUuaCAqLywKIAkJCQkwRjhGMTQzMTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92
SGludFJlbW92YWxQaGFzZS5jcHAgKi8sCiAJCQkJMEY4RjE0MzIxQURGMDkwMTAwRUQ3OTJDIC8q
IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCAqLywKKwkJCQkwRkYyQ0Q1OTFCNjFBNEY4MDA0OTU1
QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwICovLAorCQkJCTBGRjJDRDVBMUI2MUE0
RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oICovLAogCQkJCTBGQzNDQ0ZB
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMuY3BwICovLAogCQkJCTBGQzND
Q0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMuaCAqLywKIAkJCQlBNzM3
ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLywKQEAgLTUzMTks
OCArNTMzOSw2IEBACiAJCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmgg
Ki8sCiAJCQkJMEY2RkM3NEUxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3Bw
ICovLAogCQkJCTBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmgg
Ki8sCi0JCQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2suY3BwICovLAotCQkJCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmggKi8sCiAJCQkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3Jt
YXQuaCAqLywKIAkJCQkwRkM3MTJEQzE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcCAqLywKIAkJCQkwRkM3MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCkBAIC01MzUzLDYgKzUzNzEsMTAgQEAKIAkJ
CQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLywKKwkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovLAorCQkJCTBGRDNFNDA0MUI2MThCNjYw
MEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAorCQkJCTBGRDNFNDA1MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCisJCQkJ
MEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgg
Ki8sCiAJCQkJOTY5QTA3OTQwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJ
OTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oICovLAogCQkJCTBGMkJEQzJCMTUx
RkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLApAQCAtNTM2NCw2ICs1Mzg2LDggQEAKIAkJ
CQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICov
LAogCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3Bw
ICovLAogCQkJCTBGOTgyMDVFMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMu
aCAqLywKKwkJCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24u
Y3BwICovLAorCQkJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlv
bi5oICovLAogCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNw
cCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICov
LAogCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8s
CkBAIC01ODc0LDYgKzU4OTgsNyBAQAogCQkJCUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBE
RkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzY1MTU5
MUExQ0UwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3Jt
YXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8q
IERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0
IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjEyNiw2ICs2MTUxLDcgQEAKIAkJCQlB
NTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVy
cyAqLywKIAkJCQlBNTMyNDM4ODE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIg
LyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
MkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNw
ZWN0b3JQcm90b2NvbE9iamVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlE
RDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAt
NjEzNSw3ICs2MTYxLDYgQEAKIAkJCQlBN0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZB
cnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAv
KiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBF
NCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3
QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYxNDgsNiArNjE3Myw3IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYw
IC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBF
RDIyRDcwMDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVC
MTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAv
KiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIg
LyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1
QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjM2
Miw3ICs2Mzg4LDYgQEAKIAkJCQlCQzE4QzQzQzBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0aE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9y
eVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4
OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RjNEMEJCRDE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0MwMDhDRTcxODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTY0NDUsOSArNjQ3MCwxMSBA
QAogCQkJCTJBQUQ5NjRBMTg1Njk0MTcwMDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2Nv
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1
Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUy
ODAgLyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MEExQjYxOEI2
NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNDBBNDg1MUE5MDUxQUYw
MEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcw
NkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjUyNCw2ICs2NTUxLDcgQEAKIAkJCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgw
M0YgLyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGRTE4QTQxNkJB
RUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0VCMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENB
N0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZE
MzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovLApAQCAtNzMxNSw2ICs3MzQzLDcgQEAKIAkJCQkwRkQ4QTMxOTE3RDUxRjIy
MDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1Jl
cG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFF
IC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzNDQ0ZGMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRUEwQTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3OEE5NzgwMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03MzI1LDYgKzczNTQsNyBAQAogCQkJCTBGQ0VGQURGMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRjJDRDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJERjE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTJB
MTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Mzc2
LDYgKzc0MDYsNyBAQAogCQkJCUE1Q0VFRTE0MTg3RjNCQUQwMEU1NUM5OSAvKiBJbnNwZWN0b3JB
Z2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyog
SW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGNjE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZEM0U0MDExQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTkzQ0Y3QzE4NDAzNjAzMDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkFGNzM4MkMxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVy
ZUlEVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODExODlCMTkxQTAwNjMzMjMx
IC8qIEluc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczODYsNyAr
NzQxNyw2IEBACiAJCQkJQTUzMjQzOEIxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3Rv
Y29sT2JqZWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MTE4ODA5REQ1MDA2OEE0
NkQgLyogSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTND
RjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVy
bmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ3RDQwRUQyMTI4MjAwQjg5
NjE5IC8qIEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwMTEzRDRCMUE4REIw
OTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03
NDAzLDYgKzc0MzMsNyBAQAogCQkJCUJDREQ1MUVCMEZCOERGNzQwMDRBOEJEQyAvKiBKSVRPcGNv
ZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MTIzNkU1MTE5NUYzM0MwMEJEMjE3NCAvKiBK
SVRPcGNvZGVzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RTg0NUExOTAzMEJFRjAw
NTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkQzRTQwOTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyNEU1NEMxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZDQzg1QzQwRUU3QTg5NDAwMjg4NjgyIC8qIEpJ
VFByb3BlcnR5QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzFFOEU0MTEyRTcyRUYw
MEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NzQ1OCw3ICs3NDg5LDYgQEAKIAkJCQlBNTAzRkExQjE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAw
MDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyODA4NzUxMDdFQzEzRTAwMTNFN0IyIC8qIEpTTG9jay5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVENzA5QjE2REU5OUY0MDBGQ0E2QkMgLyog
SlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODc0MTE3Q0JFOEVCMDBD
M0U2NDMgLyogSlNNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc0REVGOTUxODJEOTkxNDAw
NTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjUxLDYgKzc2
ODEsNyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNo
YWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBT
dHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwQjFCNjE4QjY2
MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNzAxM0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4
RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjAsNiArNzY5
MSw3IEBACiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9s
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8q
IFRlbXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE4RDNDRjFCNTVBNkUw
MDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2Vu
ZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0Yg
LyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg3NDg4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0MCw3ICszNDAsNiBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlk
Q2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0
cnVjdHVyZSA9IDA7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9
IDA7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSAwOwogICAgICAgICAgICAg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewpAQCAtMzcwLDExICszNjksNiBAQCB2
b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAg
ZHVtcFN0cnVjdHVyZShvdXQsICJwcm90b3R5cGVTdHJ1Y3QiLCBiYXNlU3RydWN0dXJlLCBpZGVu
dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjaGFpbikg
ewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICAgICAgZHVt
cENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsIGxp
c3QgPSAlcDogWyIsIGxpc3QpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewpAQCAtMzgyLDkgKzM3Niw5IEBAIHZvaWQgQ29kZUJs
b2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludGYoIiwgIik7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIigiKTsKICAg
ICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJiYXNlIiwgbGlzdC0+YXQoaSku
c3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QtPmF0KGkp
LmNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0LT5hdChpKS5jb25kaXRp
b25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYo
IiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBsaXN0LT5hdChp
KS5jaGFpbigpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQobGlz
dC0+YXQoaSkuY29uZGl0aW9uU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTYs
MTAgKzQ1MCw4IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cygKICAg
ICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLCBpZGVudCk7CiAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIsICIpOwogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAibmV4dCIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLCBp
ZGVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBj
aGFpbiwgaWRlbnQpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3R1
YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpCisgICAgICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiLCAiLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJh
d1BvaW50ZXIoc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF9saXN0OiB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlzdCA9IFsiKTsKQEAgLTQ4
MywxMCArNDc1LDggQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKAog
ICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2IiwgYWNjZXNz
Lm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5l
eHQiLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhY2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0
LCBhY2Nlc3MuY2hhaW4oKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCBhY2Nlc3MuY29u
ZGl0aW9uU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dC5wcmludCgidW5rbm93biIpOwogICAgICAgICAgICAgICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODc0ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3YXRj
aHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsK
IAogICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJv
ZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAgIGlm
IChpc09uTGlzdCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhH
ZXRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6
OmNvbXB1dGVGb3IoCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhl
YWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICB1bnNpZ25lZCBjaGFpbkNv
dW50LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVy
ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0
IHdlIG5ldmVyIHNlZSBhIHN0cnVjdHVyZSB0aGF0CiAgICAgLy8gaGFzSW1wdXJlR2V0T3duUHJv
cGVydHlTbG90KCkgYnV0IGZvciB3aGljaCB3ZSBkb24ndApAQCAtNDAsMzIgKzM5LDM0IEBAIENv
bXBsZXhHZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHUKICAgICAvLyB0aGF0LCB5ZXQu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTgxMAog
ICAgIAorICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNWYWxpZCgpKTsKKyAgICAKICAgICBpZiAo
aGVhZFN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAg
ICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKICAgICBDb21wbGV4R2V0U3RhdHVz
IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gSW5saW5lYWJsZTsKICAgICAKLSAgICBpZiAo
Y2hhaW4gJiYgY2hhaW5Db3VudCkgewotICAgICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVm
KG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywg
aGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWluQ291bnQpKTsKKyAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OwogICAgICAgICAKLSAgICAgICAgaWYgKCFyZXN1bHQubV9jaGFpbi0+aXNTdGlsbFZhbGlk
KCkpCisgICAgICAgIGlmICghcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVW
YWxpZGl0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHNraXAoKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgp
Ci0gICAgICAgICAgICB8fCByZXN1bHQubV9jaGFpbi0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1w
dXJlUHJvcGVydHkoKSkKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlNsb3RCYXNlcyA9Cisg
ICAgICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQubnVtYmVyT2ZDb25kaXRpb25zV2l0aEtp
bmQoUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bnVtYmVyT2ZTbG90QmFzZXMgPD0gMSk7CisgICAgICAgIGlmICghbnVtYmVyT2ZTbG90QmFzZXMp
IHsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IG1pc3Nlcy4gVGhh
dCdzIGEgYnVtbWVyLgorICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKICAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQ
YXRoKCk7CisgICAgICAgIH0KKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYmFzZSA9
IHJlc3VsdC5tX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpOworICAgICAgICBBU1NF
UlQoYmFzZS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsKICAgICAgICAg
Ci0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gcmVzdWx0Lm1fY2hhaW4tPnRlcm1p
bmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IHJl
c3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlRfVU5VU0VEKGN1
cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1f
YXR0cmlidXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVh
ZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7Ci0g
ICAgfQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0gZWxz
ZQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkKTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkK
ICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3NDg4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gK
ICNkZWZpbmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3RhdHVz
KCkKICAgICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChpbnZh
bGlkT2Zmc2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAgICAg
fQogICAgIApAQCAtOTcsMjEgKzk2LDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3Rh
dGljIENvbXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CisgICAgICAgIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0gICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAg
ICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzOwot
ICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0
aW9uU2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3Bw
CShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBDb25zdGFudFN0cnVj
dHVyZUNoZWNrOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihDaGVjayBpZiAiLCBp
bkNvbnRleHQoSlNWYWx1ZShtX2NvbnN0YW50KSwgY29udGV4dCksICIgaGFzIHN0cnVjdHVyZSAi
LAotICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIp
Iik7Ci19Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQotU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYg
dmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rv
ci5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHZlY3RvcltpXS5jb25zdGFudCgpID09IGNv
bnN0YW50KQotICAgICAgICAgICAgcmV0dXJuIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgYXJlQ29tcGF0aWJsZShjb25zdCBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBhLCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yJiBiKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IGEuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgIFN0cnVjdHVyZSogb3RoZXJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IoYiwgYVtpXS5j
b25zdGFudCgpKTsKLSAgICAgICAgaWYgKCFvdGhlclN0cnVjdHVyZSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoYVtpXS5zdHJ1Y3R1cmUoKSAhPSBvdGhlclN0cnVjdHVyZSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNvdXJj
ZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KQotewotICAgIGZvciAodW5z
aWduZWQgaSA9IHNvdXJjZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUZv
cih0YXJnZXQsIHNvdXJjZVtpXS5jb25zdGFudCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB0YXJnZXQuYXBwZW5kKHNvdXJjZVtpXSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50
U3RydWN0dXJlQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLSNkZWZp
bmUgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KLSNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgot
I2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIENvbnN0YW50U3RydWN0dXJlQ2hlY2sgewotcHVibGljOgotICAgIENvbnN0
YW50U3RydWN0dXJlQ2hlY2soKQotICAgICAgICA6IG1fY29uc3RhbnQobnVsbHB0cikKLSAgICAg
ICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIGNvbnN0YW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
LSAgICAgICAgOiBtX2NvbnN0YW50KGNvbnN0YW50KQotICAgICAgICAsIG1fc3RydWN0dXJlKHN0
cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghIW1fY29uc3RhbnQgPT0gISFtX3N0cnVj
dHVyZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IW1fY29uc3RhbnQ7IH0KLSAgICAKLSAgICBKU0NlbGwqIGNvbnN0YW50KCkgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudDsgfQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmU7IH0KLSAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0NlbGwqIG1fY29uc3RhbnQ7Ci0gICAgU3RydWN0
dXJlKiBtX3N0cnVjdHVyZTsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPENvbnN0YW50U3RydWN0dXJl
Q2hlY2ssIDI+IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3I7Ci0KLVN0cnVjdHVyZSogc3Ry
dWN0dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvciwgSlND
ZWxsKiBjb25zdGFudCk7Ci1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVja1ZlY3RvciYsIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsKLXZv
aWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNvdXJjZSwg
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KTsKLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNp
b24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OSw4ICsxNjksNyBAQCBHZXRCeUlk
U3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGxpc3QtPmF0KGxpc3RJbmRleCkuc3RydWN0dXJlKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBs
ZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywg
c3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0gICAgICAgICAgICAgICAg
bGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbkNvdW50KCksIHVpZCk7CisgICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOwogICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkg
ewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMjA2
LDggKzIwNSw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdldEJ5
SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1
Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWlu
KCksCi0gICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOworICAg
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0YXR1
cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25kaXRp
b25TZXQoKSwgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwyMyArMzQsMTkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAot
ICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNl
dCkKLSAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQorICAgICwgbV9jb25kaXRpb25TZXQo
Y29uZGl0aW9uU2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9jYWxsTGlua1N0
YXR1cyhXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKQogewogICAgIGlmICghc3RydWN0dXJlU2V0
LnNpemUoKSkgewogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpOwotICAg
ICAgICBBU1NFUlQoIWNoYWluKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGNoYWluICYmIGNoYWlu
LT5zaXplKCkpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFsUHJv
dG90eXBlKCk7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MobV9jb25zdGFudENoZWNrcyk7
CisgICAgICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKICAgICB9CiB9Ci0KKyAg
ICAgICAgICAgICAgICAgICAgIAogR2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlkVmFyaWFudCgpIHsg
fQogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlhbnQm
IG90aGVyKQpAQCAtNjIsOCArNTgsNyBAQCBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQo
Y29uc3QgR2V0CiBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25z
dCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQgPSBvdGhlci5t
X3N0cnVjdHVyZVNldDsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFudENo
ZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7CisgICAg
bV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29mZnNldCA9IG90
aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBt
X2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzIsMjggKzY3LDE5IEBAIEdldEJ5SWRWYXJpYW50JiBH
ZXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVN0cnVjdHVy
ZVNldCBHZXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKTsKLSAgICAKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBt
X2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgcmV0
dXJuIHN0cnVjdHVyZTsKLX0KLQogYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQogewotICAgIGlmIChtX2FsdGVybmF0ZUJhc2Ug
IT0gb3RoZXIubV9hbHRlcm5hdGVCYXNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghYXJlQ29tcGF0aWJsZShtX2NvbnN0YW50Q2hlY2tzLCBv
dGhlci5tX2NvbnN0YW50Q2hlY2tzKSkKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBtZXJnZWRDb25kaXRpb25TZXQgPQorICAgICAgICBtX2NvbmRpdGlvblNldC5tZXJnZWRX
aXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5p
c1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgbWVyZ2VJbnRvKG90aGVyLm1fY29u
c3RhbnRDaGVja3MsIG1fY29uc3RhbnRDaGVja3MpOworICAgIG1fY29uZGl0aW9uU2V0ID0gbWVy
Z2VkQ29uZGl0aW9uU2V0OwogICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0
dXJlU2V0KTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMiwxMCArOTgsNyBAQCB2b2lk
IEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgfQogICAgIAogICAgIG91
dC5wcmludCgKLSAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQp
LCAiLCAiLAotICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3Ms
IGNvbnRleHQpLCAiXSIpOwotICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIG91dC5w
cmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVC
YXNlKSwgY29udGV4dCkpOworICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwg
Y29udGV4dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCkpOwogICAg
IG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2FsbExpbmtT
dGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw5ICsyNyw4IEBACiAjZGVmaW5l
IEdldEJ5SWRWYXJpYW50X2gKIAogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVk
ZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZVNldC5oIgogCkBAIC00Myw3ICs0Miw3IEBAIGNsYXNzIEdldEJ5SWRWYXJpYW50
IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gaW52YWxpZE9mZnNldCwKLSAgICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4gPSBudWxscHRyLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0gbnVsbHB0cik7CiAgICAgCiAgICAg
fkdldEJ5SWRWYXJpYW50KCk7CkBAIC01NSw5ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAg
ICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9
Ci0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3Mo
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3QqIGFsdGVy
bmF0ZUJhc2UoKSBjb25zdCB7IHJldHVybiBtX2FsdGVybmF0ZUJhc2U7IH0KLSAgICBTdHJ1Y3R1
cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OworCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIGEg
Y29uZGl0aW9uIHNldCBtZWFucyB0aGF0IHRoaXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlu
a1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICAK
QEAgLTcwLDggKzcwLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgR2V0QnlJZFN0YXR1
czsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBtX2Fs
dGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25T
ZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
aWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgiPCIsIGluQ29udGV4dChKU1ZhbHVl
KG1fb2JqZWN0KSwgY29udGV4dCksICI6ICIsIGluQ29udGV4dChtX2NvbmRpdGlvbiwgY29udGV4
dCksICI+Iik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVx
dWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1
Y3R1cmUsIG1fb2JqZWN0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNT
dGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChtX29iamVjdC0+c3RydWN0dXJlKCkp
OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFs
aWRpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0
aW9uLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICghKnRo
aXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJlRW5z
dXJlc1ZhbGlkaXR5KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFi
aWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dh
dGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgbV9vYmpl
Y3QsIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgUHJvcGVydHlDb25kaXRp
b246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZWZmb3J0
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZv
cnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dhdGNoYWJsZShz
dHJ1Y3R1cmUsIG1fb2JqZWN0LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjppc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0
IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZWZm
b3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBj
b25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpOworfQorCit2b2lkIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJl
ZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIHRyYWNrZWQuY2hlY2sobV9vYmplY3QpOworICAgIG1fY29uZGl0aW9u
LnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJv
cGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisKK2NsYXNzIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAg
ICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSB0b2tlbikKKyAg
ICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgICAgICAsIG1fY29uZGl0aW9uKHRva2VuKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oSlNPYmplY3Qq
IG9iamVjdCwgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKKyAgICAgICAgOiBt
X29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9jb25kaXRpb24oY29uZGl0aW9uKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNl
V2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAg
ICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0cmli
dXRlcyk7IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAg
ICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIp
OworICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgb2Zm
c2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVj
dCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
b2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNv
bmRpdGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3Qq
IG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVp
ZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCog
b2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1
bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3Bl
cnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlw
ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNP
YmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNl
dHRlcldpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VXaXRob3V0QmFy
cmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQu
bV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmll
cih1aWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAg
ICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5j
ZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29uZGl0aW9uOyB9OworICAgIAorICAg
IEpTT2JqZWN0KiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIFByb3Bl
cnR5Q29uZGl0aW9uIGNvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uOyB9Cisg
ICAgCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIGNv
bmRpdGlvbigpLmtpbmQoKTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7
IHJldHVybiBjb25kaXRpb24oKS51aWQoKTsgfQorICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gY29uZGl0aW9uKCkuaGFzT2Zmc2V0KCk7IH0KKyAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5vZmZzZXQoKTsgfQorICAgIHVuc2ln
bmVkIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNBdHRyaWJ1
dGVzKCk7IH0KKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gY29uZGl0
aW9uKCkuYXR0cmlidXRlcygpOyB9CisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7IHJl
dHVybiBjb25kaXRpb24oKS5oYXNQcm90b3R5cGUoKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5
cGUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5wcm90b3R5cGUoKTsgfQorICAgIGJvb2wg
aGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1JlcXVpcmVk
VmFsdWUoKTsgfQorICAgIEpTVmFsdWUgcmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGNv
bmRpdGlvbigpLnJlcXVpcmVkVmFsdWUoKTsgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEpTT2JqZWN0Kj46Omhhc2gobV9vYmplY3QpICsg
bV9jb25kaXRpb24uaGFzaCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0CisgICAgICAgICAgICAmJiBtX2NvbmRp
dGlvbiA9PSBvdGhlci5tX2NvbmRpdGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0
ICYmIG1fY29uZGl0aW9uLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAor
ICAgIC8vIFR3byBjb25kaXRpb25zIGFyZSBjb21wYXRpYmxlIGlmIHRoZXkgYXJlIGlkZW50aWNh
bCBvciBpZiB0aGV5IHNwZWFrIG9mIGRpZmZlcmVudCB1aWRzIG9yCisgICAgLy8gZGlmZmVyZW50
IG9iamVjdHMuIElmIGZhbHNlIGlzIHJldHVybmVkLCB5b3UgaGF2ZSB0byBkZWNpZGUgaG93IHRv
IHJlc29sdmUgdGhlIGNvbmZsaWN0IC0KKyAgICAvLyBmb3IgZXhhbXBsZSBpZiB0aGVyZSBpcyBh
IFByZXNlbmNlIGFuZCBhbiBFcXVpdmFsZW5jZSB0aGVuIGluIHNvbWUgY2FzZXMgeW91J2xsIHdh
bnQgdGhlCisgICAgLy8gbW9yZSBnZW5lcmFsIG9mIHRoZSB0d28gd2hpbGUgaW4gb3RoZXIgY2Fz
ZXMgeW91J2xsIHdhbnQgdGhlIG1vcmUgc3BlY2lmaWMgb2YgdGhlIHR3by4gVGhpcworICAgIC8v
IHdpbGwgYWxzbyByZXR1cm4gZmFsc2UgZm9yIGNvbnRyYWRpY3Rpb25zLCBsaWtlIFByZXNlbmNl
IGFuZCBBYnNlbmNlIG9uIHRoZSBzYW1lCisgICAgLy8gb2JqZWN0L3VpZC4gQnkgY29udmVudGlv
biwgaW52YWxpZCBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcuCisg
ICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlk
KCkgIT0gb3RoZXIudWlkKCkgfHwgb2JqZWN0KCkgIT0gb3RoZXIub2JqZWN0KCk7CisgICAgfQor
ICAgIAorICAgIC8vIFRoZXNlIHZhbGlkaXR5LWNoZWNraW5nIG1ldGhvZHMgY2FuIG9wdGlvbmFs
bHkgdGFrZSBhIFN0cnV0dXJlKiBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlCisgICAgLy8gU3RydWN0
dXJlKiBmcm9tIHRoZSBvYmplY3QuIElmIHlvdSdyZSBpbiB0aGUgY29uY3VycmVudCBKSVQsIHRo
ZW4geW91IG11c3QgdXNlIHRoZSBmb3JtcworICAgIC8vIHRoYXQgdGFrZSBhbiBleHBsaWNpdCBT
dHJ1Y3R1cmUqIGJlY2F1c2UgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZvciB0
aGUgc2FtZQorICAgIC8vIHN0cnVjdHVyZSB0aGF0IHlvdSB2YWxpZGF0ZWQgKGkuZS4gYXZvaWQg
YSBUT0NUT1UgcmFjZSkuCisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1
Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLiBWYWxp
ZGl0eQorICAgIC8vIGRvZXMgbm90IHJlcXVpcmUgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdC4K
KyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1Zh
bGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAKKyAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2lu
dCB0byBlbnN1cmUgdmFsaWRpdHkgZXZlbiBpZgorICAgIC8vIGlzU3RpbGxWYWxpZEFjY29yZGlu
Z1RvU3RydWN0dXJlKCkgcmV0dXJuZWQgdHJ1ZS4KKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCB2YWxp
ZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisKKyAgICAvLyBD
aGVja3MgaWYgdGhlIGNvbmRpdGlvbiBzdGlsbCBob2xkcy4gTWF5IGNvbnNlcnZhdGl2ZWx5IHJl
dHVybiBmYWxzZSwgaWYgdGhlIG9iamVjdCBhbmQKKyAgICAvLyBzdHJ1Y3R1cmUgYWxvbmUgZG9u
J3QgZ3VhcmFudGVlIHRoZSBjb25kaXRpb24uIE5vdGUgdGhhdCB0aGlzIG1heSByZXR1cm4gdHJ1
ZSBpZiB0aGUKKyAgICAvLyBjb25kaXRpb24gc3RpbGwgcmVxdWlyZXMgc29tZSB3YXRjaHBvaW50
cyBvbiB0aGUgb2JqZWN0IGluIGFkZGl0aW9uIHRvIGNoZWNraW5nIHRoZQorICAgIC8vIHN0cnVj
dHVyZS4gSWYgeW91IHdhbnQgdG8gY2hlY2sgaWYgdGhlIGNvbmRpdGlvbiBob2xkcyBieSB1c2lu
ZyB0aGUgc3RydWN0dXJlIGFsb25lLAorICAgIC8vIHVzZSBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRp
dHkoKS4KKyAgICBib29sIGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29s
IGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIAorICAgIC8vIFNob3J0aGFuZCBmb3IgY29uZGl0
aW9uKCkuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSkuCisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFs
aWRpdHkoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2
YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlv
bgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZSBhbmQgcG9zc2libHkgYW4gaW1w
dXJlIHByb3BlcnR5IHdhdGNocG9pbnQuCisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBTdHJ1Y3R1cmUqLAorICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1h
a2VOb0NoYW5nZXMpIGNvbnN0OworICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0
eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKworICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNl
IHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0
aGUgc3RydWN0dXJlLgorICAgIGJvb2wgaXNXYXRjaGFibGUoCisgICAgICAgIFN0cnVjdHVyZSos
CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0
eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZSgK
KyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5
Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5n
UmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gY29uZGl0aW9uKCkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KCk7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2Vt
ZW50V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uZGl0aW9uKCku
d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpOworICAgIH0KKyAgICAKKyAg
ICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdHMgaW52b2x2ZWQgaW4gdGhpcyBhcmUgc3Rp
bGwgbGl2ZS4KKyAgICBib29sIGlzU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB2
YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBKU09iamVjdCogbV9vYmplY3Q7CisgICAgUHJvcGVydHlDb25kaXRpb24gbV9j
b25kaXRpb247Cit9OworCitzdHJ1Y3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgor
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmZvck9iamVjdChKU09iamVjdCogb2JqZWN0KSBjb25zdAoreworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7Cisg
ICAgICAgIGlmIChjb25kaXRpb24ub2JqZWN0KCkgPT0gb2JqZWN0KQorICAgICAgICAgICAgcmV0
dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
KCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0Ojpmb3JDb25kaXRpb25LaW5kKAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQp
IGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkKKyAg
ICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbigpOworfQorCit1bnNpZ25lZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6bnVtYmVyT2ZDb25kaXRpb25zV2l0aEtpbmQoUHJvcGVydHlDb25kaXRpb246OktpbmQga2lu
ZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChj
b25kaXRpb24ua2luZCgpID09IGtpbmQpCisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
aGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBudW1iZXJPZkNv
bmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpID09IDE7Cit9CisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90
QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0
aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAgIH0K
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFvdGhlci5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVy
dHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAgICAg
cmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3RoZXIpIHsKKyAgICAg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3RpbmdDb25kaXRpb24g
OiAqdGhpcykgeworICAgICAgICAgICAgaWYgKG5ld0NvbmRpdGlvbiA9PSBleGlzdGluZ0NvbmRp
dGlvbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghbmV3Q29u
ZGl0aW9uLmlzQ29tcGF0aWJsZVdpdGgoZXhpc3RpbmdDb25kaXRpb24pKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpbnZhbGlkKCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5ld0NvbmRp
dGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbm9uRW1wdHkocmVzdWx0KTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZh
bGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vu
c3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAorewor
ICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9y
IChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAg
ICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6
Om5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGZvciAoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlm
IChjb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxMaXZlKCkgY29uc3QKK3sK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhp
cykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAg
ICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG91dC5wcmludCgiWyIpOworICAgIGlmIChtX2RhdGEpCisgICAgICAgIG91dC5wcmludChs
aXN0RHVtcEluQ29udGV4dChtX2RhdGEtPnZlY3RvciwgY29udGV4dCkpOworICAgIG91dC5wcmlu
dCgiXSIpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwor
fQorCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRp
dGlvbjo6S2luZCBjb25kaXRpb25LaW5kKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
b2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbktpbmQpIHsK
KyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob2Zmc2V0ID09
IGludmFsaWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b24oKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSh2
bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICBj
YXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOiB7CisgICAgICAgIHJldHVybiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0
LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpKTsKKyAg
ICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOiB7CisgICAg
ICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKAorICAg
ICAgICAgICAgdm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3Rv
cmVkUHJvdG90eXBlT2JqZWN0KCkpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlD
b25kaXRpb24oKTsKKyAgICB9Cit9CisKK2VudW0gQ29uY3VycmVuY3kgeworICAgIE1haW5UaHJl
YWQsCisgICAgQ29uY3VycmVudAorfTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVy
YXRlQ29uZGl0aW9ucygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtp
bmQsCisgICAgQ29uY3VycmVuY3kgY29uY3VycmVuY3kgPSBNYWluVGhyZWFkKQoreworICAgIEFT
U0VSVCghIXByb3RvdHlwZSA9PSAoa2luZCA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2Up
KTsKKyAgICAKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IGNvbmRpdGlvbnM7
CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2coIkNvbnNpZGVyaW5nIHN0cnVjdHVyZTogIiwgcG9pbnRlckR1bXAoc3RydWN0dXJl
KSwgIlxuIik7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpIHsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkl0J3Mg
YSBwcm94eSwgc28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmpl
Y3QpOworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAg
ICBpZiAoIXByb3RvdHlwZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJSZWFjaGVkIGVuZCB1cCBwcm90b3R5cGUgY2hhaW4gYXMg
ZXhwZWN0ZWQsIGRvbmUuXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlVu
ZXhwZWN0ZWRseSByZWFjaGVkIGVuZCBvZiBwcm90b3R5cGUgY2hhaW4sIHNvIGludmFsaWQuXG4i
KTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxp
ZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgICAgICBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVj
dHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBw
cm90b3R5cGUgcmVwZWF0ZWRseSwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQgc2hvdWxkIG5vdCBi
ZQorICAgICAgICAvLyB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KKyAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBN
YWluVGhyZWFkKQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlT
dHJ1Y3R1cmUodm0sIG9iamVjdCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2Fubm90IGZsYXR0
ZW4gZGljdGlvbmFyeSB3aGVuIG5vdCBvbiBtYWluIHRocmVhZCwgc28gaW52YWxpZC5cbiIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxp
ZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgUHJv
cGVydHlDb25kaXRpb246OktpbmQgdGhpc0NvbmRpdGlvbktpbmQ7CisgICAgICAgIGlmIChraW5k
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSAmJiBvYmplY3QgIT0gcHJvdG90eXBlKQor
ICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5j
ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc0NvbmRpdGlvbktpbmQgPSBraW5kOwor
ICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbmV3Q29uZGl0aW9uID0K
KyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIHRo
aXNDb25kaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFuZXdDb25kaXRpb24gfHwgIW5ld0NvbmRp
dGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRh
dGFMb2coCisgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIGNvbmRpdGlvbiBv
ciBjb25kaXRpb24gY2Fubm90IGJlIGVuc3VyZWQgYnkgc3RydWN0dXJlLCBzbyBpbnZhbGlkOiAi
LAorICAgICAgICAgICAgICAgICAgICBuZXdDb25kaXRpb24sICJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKG5ld0Nv
bmRpdGlvbik7CisgICAgICAgIAorICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkgewor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVhY2hl
ZCBkZXNpcmVkIHByb3RvdHlwZSwgZG9uZS5cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdC4KKyAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogeworICAg
ICAgICB1bnNpZ25lZCBwcmVzZW5jZUNvdW50ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogY29uZGl0aW9ucykgeworICAgICAgICAg
ICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5
Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgICAgICBwcmVzZW5jZUNvdW50Kys7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9u
OjpBYnNlbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByZXNlbmNlQ291bnQgPT0g
MSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlvbnMpCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IGtpbmQpOworICAg
IH0gfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJldHVybmluZyBjb25k
aXRpb25zOiAiLCBsaXN0RHVtcChjb25kaXRpb25zKSwgIlxuIik7CisgICAgcmV0dXJuIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpub25FbXB0eShjb25kaXRpb25zKTsKK30KKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBv
d25lciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBudWxscHRy
LCB1aWQsCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlKTsKK30KKworT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJu
IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIG93bmVyLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsIHVpZCwKKyAgICAgICAgUHJvcGVy
dHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcik7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
K3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgb3duZXIsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLCB1aWQs
CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7Cit9CisKK09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0Nv
bmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBy
ZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgbnVsbHB0ciwgZ2xvYmFsT2Jq
ZWN0LCBoZWFkU3RydWN0dXJlLCBudWxscHRyLCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlT2ZTZXR0ZXIsCisgICAgICAgIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gK
KyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworLy8gQW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0
byByZXByZXNlbnQgdGhlIHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVl
ZCB0byBiZSBtZXQgZm9yIHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2Fu
IGhhdmUgdGhlIGZvbGxvd2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5
OiBUaGVyZSBhcmUgbm8gc3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisv
LyBJbnZhbGlkOiBUaGUgaGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6
IFRoZXJlIGFyZSBzb21lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUg
dmFsaWQuCisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0
UmVmKG5ldyBEYXRhKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9y
PE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZl
Y3Rvci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQoKTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAg
ICAgICByZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRhLT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Rh
dGE7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdpbigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0KKyAg
ICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVj
dCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQ
cm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNv
bmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICBi
b29sIGhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gSWYgdGhp
cyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1
YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNvbmRpdGlvbiBvbiB0aGUgcHJvdG90eXBl
IGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAor
ICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FT
U0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFByZXNlbmNlCisgICAgLy8gaW4gdGhlIHNl
dCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2VuY2UuCisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0
IHRvIGNyZWF0ZSBhIG5ldyBjb25kaXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0
aGUgb3RoZXIgb25lLiBUaGlzIHdpbGwKKyAgICAvLyBmYWlsIGlmIGFueSBvZiB0aGUgY29uZGl0
aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlci4gV2hlbiBpZiBmYWlscywgaXQg
cmV0dXJucworICAgIC8vIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBtZXJnZWRXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29u
c3Q7CisgICAgCisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdDsKKyAg
ICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIEhlbHBlcnMgZm9y
IHVzaW5nIHRoaXMgaW4gYSB1bmlvbi4KKyAgICB2b2lkKiByZWxlYXNlUmF3UG9pbnRlcigpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkp
OworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgYWRvcHRSYXdQ
b2ludGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0
aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZnJvbVJhd1BvaW50ZXIo
dm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihy
YXdQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIC8vIEludGVybmFsbHksIHRoaXMgcmVwcmVzZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9p
bnRlciB0byBhIERhdGEgdGhhdCBoYXMgYW4gZW1wdHkgdmVjdG9yLgorICAgIAorICAgIC8vIEZJ
WE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IGhhdmluZyBpdCBpbnRlcm5h
bGx5IHVzZSBhIHZlY3RvciB0aGF0IGp1c3QgaGFzCisgICAgLy8gdGhlIG5vbi11aWQgcG9ydGlv
biBvZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgYW5kIHRoZW4gcmVxdWlyaW5nIHRoYXQgdGhl
IGNhbGxlcnMgb2YgYWxsCisgICAgLy8gb2YgdGhlIEFQSXMgc3VwcGx5IHRoZSB1aWQuCisgICAg
CisgICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7Cisg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsK
KyAgICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1
cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90
eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NywxNCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRB
Y2Nlc3MoCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNoYWluQ291bnQpCisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQpCiAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fY2hhaW5Db3VudChjaGFpbkNv
dW50KQogICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2Nv
bmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5l
KQogewotICAgIGlmIChjaGFpbikKLSAgICAgICAgbV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFp
bik7CiB9CiAKIEdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKQEAgLTcxLDcgKzY5LDcg
QEAgYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZgogewogICAgIGlmICht
X3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hh
aW4uZ2V0KCkpKQorICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2VhayhyZXBh
dGNoQnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShy
ZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRl
ICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTUzLDEzICs1
NCwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90
eXBlKEludmFsaWQpCi0gICAgICAgICwgbV9jaGFpbkNvdW50KDApCiAgICAgewogICAgIH0KICAg
ICAKICAgICBHZXRCeUlkQWNjZXNzKAogICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBT
dHJ1Y3R1cmVDaGFpbiogPSAwLCB1bnNpZ25lZCBjaGFpbkNvdW50ID0gMCk7CisgICAgICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0KCkpOwogICAgIAogICAgIH5HZXRCeUlkQWNjZXNzKCk7CiAgICAgCkBAIC03Miw4ICs3Miw3
IEBAIHB1YmxpYzoKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9CiAgICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWlu
KCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbi5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYWluQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX2NoYWluQ291bnQ7IH0KKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRp
b25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAog
ICAgIHsKQEAgLTkxLDkgKzkwLDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJs
b2NrOwogICAgIAogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fY2hhaW5D
b3VudDsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLSAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgbV9jb25kaXRpb25TZXQ7IC8vIEZJWE1FIHdoYXQgYWJvdXQgYmFycmllcnM/CiAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01MSw3ICs1MSw4IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0
cnVjdHUKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnBy
ZXZpb3VzU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9t
KHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0
Lm1fY2hhaW4uY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7Cisg
ICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjphZG9wdFJhd1BvaW50ZXIoCisgICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCk7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1
YkluZm8uc3R1YlJvdXRpbmU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTY0LDYgKzY1
LDkgQEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogCiBib29sIFB1
dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKSBjb25z
dAogeworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgUmVwbGFj
ZToKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCkBA
IC03NCwxNSArNzgsMTEgQEAgYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRjaEJ1
ZgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KG1fbmV3U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgY2FzZSBDdXN0
b21TZXR0ZXI6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9jaGFpbiAmJiAh
SGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHV0
S2luZC5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgpAQCAtNTMsNyArNTQsNiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgUHV0QnlJZEFjY2VzcygpCiAgICAgICAgIDogbV90eXBlKEludmFs
aWQpCi0gICAgICAgICwgbV9jaGFpbkNvdW50KFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAgICAg
CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAg
ICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKKyAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICAgICAgUGFzc1JlZlB0
cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewogICAgICAgICBQdXRCeUlkQWNj
ZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CiAgICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOwogICAg
ICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsK
LSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworICAgICAgICBy
ZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJlc3VsdC5tX2N1
c3RvbVNldHRlciA9IDA7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRp
bmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05NSw4ICs5NSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWlu
LAotICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LAorICAgICAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKQEAgLTEwNCwxMCArMTAzLDcgQEAgcHVibGljOgog
ICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0
dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBh
Y2Nlc3NUeXBlOwotICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgICAgIHJlc3VsdC5tX2No
YWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKLSAgICAgICAgICAgIHJlc3VsdC5tX2NoYWluQ291
bnQgPSBjaGFpbkNvdW50OwotICAgICAgICB9CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNl
dCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gY3VzdG9t
U2V0dGVyOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ2LDE3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX25ld1N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJl
Q2hhaW4qIGNoYWluKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24o
KSB8fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbi5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgcmV0
dXJuIG1fY2hhaW5Db3VudDsKLSAgICB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAg
ICAgCiAgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkBAIC0x
NzgsOCArMTY0LDcgQEAgcHJpdmF0ZToKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKICAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+
IG1fY2hhaW47Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OworICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jIG1fY3VzdG9tU2V0dGVyOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHVi
Um91dGluZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVy
dHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNvbmRpdGlvbi5o
IgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2Vz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisK
K3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAg
ICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG91dC5wcmludChtX2tpbmQsICIgb2YgIiwgbV91aWQpOworICAgIHN3aXRjaCAobV9raW5k
KSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCIgYXQgIiwgb2Zmc2V0
KCksICIgd2l0aCBhdHRyaWJ1dGVzICIsIGF0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgIG91
dC5wcmludCgiIHdpdGggcHJvdG90eXBlICIsIGluQ29udGV4dChKU1ZhbHVlKHByb3RvdHlwZSgp
KSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAg
ICAgICAgb3V0LnByaW50KCIgd2l0aCAiLCBpbkNvbnRleHQocmVxdWlyZWRWYWx1ZSgpLCBjb250
ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworYm9v
bCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlKSBjb25z
dAoreworICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAi
RGV0ZXJtaW5pbmcgdmFsaWRpdHkgb2YgIiwgKnRoaXMsICIgd2l0aCBzdHJ1Y3R1cmUgIiwgcG9p
bnRlckR1bXAoc3RydWN0dXJlKSwgIiBhbmQgYmFzZSAiLAorICAgICAgICAgICAgSlNWYWx1ZShi
YXNlKSwgIiBhc3N1bWluZyBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludHMgYXJlIHNldC5cbiIp
OworICAgIH0KKyAgICAKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiSW52YWxpZCBiZWNhdXNlIHVuc2V0LlxuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSBhY2Nlc3NlcyBhcmUgbm90IGNhY2hlYWJsZS5c
biIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0
cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlm
IChjdXJyZW50T2Zmc2V0ICE9IG9mZnNldCgpIHx8IGN1cnJlbnRBdHRyaWJ1dGVzICE9IGF0dHJp
YnV0ZXMoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHdlIG5lZWQgb2Zm
c2V0LCBhdHRyaWJ1dGVzIHRvIGJlICIsIG9mZnNldCgpLCAiLCAiLCBhdHRyaWJ1dGVzKCksCisg
ICAgICAgICAgICAgICAgICAgICIgYnV0IHRoZXkgYXJlICIsIGN1cnJlbnRPZmZzZXQsICIsICIs
IGN1cnJlbnRBdHRyaWJ1dGVzLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgQWJzZW5jZTogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0
YUxvZygiSW52YWxpZCBiZWNhdXNlIGl0J3MgYSBkaWN0aW9uYXJ5LlxuIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJy
ZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpOworICAgICAgICBp
ZiAoY3VycmVudE9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgdGhlIHByb3Bl
cnR5IGV4aXN0cyBhdCBvZmZzZXQ6ICIsIGN1cnJlbnRPZmZzZXQsICJcbiIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0
dXJlLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSAhPSBwcm90b3R5cGUoKSkgeworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
ICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHRoZSBwcm90b3R5cGUgaXMgIiwgc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSwgIiBldmVuIHRob3VnaCAiCisgICAgICAgICAgICAgICAgICAgICJp
dCBzaG91bGQgaGF2ZSBiZWVuICIsIEpTVmFsdWUocHJvdG90eXBlKCkpLCAiXG4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGNhc2UgQWJzZW5jZU9mU2V0
dGVyOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1
c2UgaXQncyBhIGRpY3Rpb25hcnkuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVudE9m
ZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudEF0dHJpYnV0
ZXMgJiAoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAg
ICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB3ZSBleHBlY3RlZCBub3QgdG8gaGF2ZSBhIHNldHRl
ciwgYnV0IHdlIGhhdmUgb25lIGF0IG9mZnNldCAiLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudE9mZnNldCwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgY3VycmVudEF0dHJpYnV0ZXMsICJc
biIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PnN0b3JlZFByb3RvdHlwZU9iamVjdCgpICE9IHByb3RvdHlwZSgpKSB7CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAg
ICAgICJJbnZhbGlkIGJlY2F1c2UgdGhlIHByb3RvdHlwZSBpcyAiLCBzdHJ1Y3R1cmUtPnN0b3Jl
ZFByb3RvdHlwZSgpLCAiIGV2ZW4gdGhvdWdoICIKKyAgICAgICAgICAgICAgICAgICAgIml0IHNo
b3VsZCBoYXZlIGJlZW4gIiwgSlNWYWx1ZShwcm90b3R5cGUoKSksICJcbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRXF1aXZhbGVuY2U6
IHsKKyAgICAgICAgaWYgKCFiYXNlIHx8IGJhc2UtPnN0cnVjdHVyZSgpICE9IHN0cnVjdHVyZSkg
eworICAgICAgICAgICAgLy8gQ29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBzaW5jZSB3ZSBj
YW5ub3QgdmVyaWZ5IHRoaXMgb25lIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgICAgLy8g
b2JqZWN0LgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKAorICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUg
YSBiYXNlIG9yIHRoZSBiYXNlIGhhcyB0aGUgd3Jvbmcgc3RydWN0dXJlOiAiLAorICAgICAgICAg
ICAgICAgICAgICBSYXdQb2ludGVyKGJhc2UpLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgc29tZXdoYXQgcmFjeSwgYW5kIG1heWJlIG1vcmUgcmlza3kgdGhhbiB3ZSB3
YW50LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0NjQxCisgICAgICAgIAorICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkpOworICAgICAgICBKU1ZhbHVlIGN1cnJl
bnRWYWx1ZSA9IGJhc2UtPmdldERpcmVjdChjdXJyZW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKGN1
cnJlbnRWYWx1ZSAhPSByZXF1aXJlZFZhbHVlKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkludmFs
aWQgYmVjYXVzZSB0aGUgdmFsdWUgaXMgIiwgY3VycmVudFZhbHVlLCAiIGJ1dCB3ZSByZXF1aXJl
ICIsIHJlcXVpcmVkVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgIlxuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFByb3BlcnR5Q29uZGl0
aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAg
Y2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIHJldHVybiBzdHJ1
Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjpp
c1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlKSBjb25zdAor
eworICAgIGlmICghaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
c3RydWN0dXJlLCBiYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3VycmVu
dGx5IHdlIGFzc3VtZSB0aGF0IGFuIGltcHVyZSBwcm9wZXJ0eSBjYW4gY2F1c2UgYSBwcm9wZXJ0
eSB0byBhcHBlYXIsIGFuZCBjYW4gYWxzbworICAgIC8vICJzaGFkb3ciIGFuIGV4aXN0aW5nIEpT
IHByb3BlcnR5IG9uIHRoZSBzYW1lIG9iamVjdC4gSGVuY2UgaXQgYWZmZWN0cyBib3RoIHByZXNl
bmNlIGFuZAorICAgIC8vIGFic2VuY2UuIEl0IGRvZXNuJ3QgYWZmZWN0IEFic2VuY2VPZlNldHRl
ciBiZWNhdXNlIGltcHVyZSBwcm9wZXJ0aWVzIGFyZW4ndCBldmVyIHNldHRlcnMuCisgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToKKyAg
ICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLmhh
c0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hh
YmxlV2hlblZhbGlkKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXRjaGFiaWxpdHlFZmZv
cnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgRXF1aXZhbGVuY2U6IHsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCkp
OworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IHdoZW4gc29tZSB2YXJpYW50IG9mIGlzVmFsaWQgcmV0dXJuZWQgdHJ1ZSwgd2hpY2gKKyAgICAg
ICAgLy8gaW1wbGllcyB0aGF0IHdlIGFscmVhZHkgY29uZmlybWVkIHRoYXQgdGhlIHN0cnVjdHVy
ZSBrbm93cyBvZiB0aGUgcHJvcGVydHkuIFdlIHNob3VsZAorICAgICAgICAvLyBhbHNvIGhhdmUg
dmVyaWZpZWQgdGhhdCB0aGUgU3RydWN0dXJlIGlzIGEgY2FjaGVhYmxlIGRpY3Rpb25hcnksIHdo
aWNoIG1lYW5zIHdlCisgICAgICAgIC8vIHNob3VsZG4ndCBoYXZlIGEgVE9DVE9VIHJhY2UgZWl0
aGVyLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7Cisg
ICAgICAgIAorICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgICAgIHN3aXRjaCAoZWZm
b3J0KSB7CisgICAgICAgIGNhc2UgTWFrZU5vQ2hhbmdlczoKKyAgICAgICAgICAgIHNldCA9IHN0
cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuc3VyZVdhdGNoYWJpbGl0eToKKyAgICAgICAg
ICAgIHNldCA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRT
ZXQoCisgICAgICAgICAgICAgICAgKkhlYXA6OmhlYXAoc3RydWN0dXJlKS0+dm0oKSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
IXNldCB8fCAhc2V0LT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSwgV2F0Y2hh
YmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkQXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlLCBiYXNlKQorICAgICAgICAm
JiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJv
cGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U09iamVjdCogYmFzZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSwgYmFzZSkKKyAgICAgICAgJiYgaXNXYXRjaGFi
bGVXaGVuVmFsaWQoc3RydWN0dXJlLCBlZmZvcnQpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0
aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpICYmIHBy
b3RvdHlwZSgpICYmICFIZWFwOjppc01hcmtlZChwcm90b3R5cGUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBpZiAoaGFzUmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJl
cXVpcmVkVmFsdWUoKQorICAgICAgICAmJiByZXF1aXJlZFZhbHVlKCkuaXNDZWxsKCkKKyAgICAg
ICAgJiYgIUhlYXA6OmlzTWFya2VkKHJlcXVpcmVkVmFsdWUoKS5hc0NlbGwoKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9wZXJ0
eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0
cmFja2VkKSBjb25zdAoreworICAgIGlmIChoYXNQcm90b3R5cGUoKSkKKyAgICAgICAgdHJhY2tl
ZC5jaGVjayhwcm90b3R5cGUoKSk7CisgICAgCisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKSkK
KyAgICAgICAgdHJhY2tlZC5jaGVjayhyZXF1aXJlZFZhbHVlKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sKKyAg
ICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmludCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0
LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVy
dHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkVx
dWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJv
cGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgUHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBQcm9wZXJ0eUNvbmRpdGlv
bl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgUHJv
cGVydHlDb25kaXRpb24geworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIFByZXNl
bmNlLAorICAgICAgICBBYnNlbmNlLAorICAgICAgICBBYnNlbmNlT2ZTZXR0ZXIsCisgICAgICAg
IEVxdWl2YWxlbmNlIC8vIEFuIGFkYXB0aXZlIHdhdGNocG9pbnQgb24gdGhpcyB3aWxsIGJlIGEg
cGFpciBvZiB3YXRjaHBvaW50cywgYW5kIHdoZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9ucywg
d2Ugd2lsbCBzZXQgdGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1Y3R1
cmUuCisgICAgfTsKKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV91
aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tpbmQoUHJlc2VuY2UpCisgICAgeworICAgICAgICBt
ZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0
aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3VpZChudWxs
cHRyKQorICAgICAgICAsIG1fa2luZChBYnNlbmNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ1
LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRp
b24gcHJlc2VuY2VXaXRob3V0QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IFByZXNlbmNlOworICAgICAgICByZXN1bHQudS5wcmVzZW5jZS5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJpYnV0ZXMgPSBh
dHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlk
LCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpT
T2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IEFic2VuY2U7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBl
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVy
dHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
aWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAg
ICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhv
dXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAg
ICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBYnNlbmNlT2ZT
ZXR0ZXI7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7
CisgICAgICAgIHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3Rv
dHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFs
ZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAg
ICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFcXVpdmFs
ZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuZXF1aXZhbGVuY2UudmFsdWUgPSBKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkgJiYgb3duZXIpCisgICAgICAgICAgICB2bS5o
ZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhv
dXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAg
IAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wg
aGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7
IH07CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldDsKKyAg
ICB9CisgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBt
X2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIHUu
cHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5cGUo
KSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQg
PT0gQWJzZW5jZU9mU2V0dGVyKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHUu
YWJzZW5jZS5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9Cisg
ICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCho
YXNSZXF1aXJlZFZhbHVlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuZXF1
aXZhbGVuY2UudmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhh
c2gobV91aWQpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXN1bHQg
Kz0gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5jZS5h
dHRyaWJ1dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAg
ICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQ
dHJIYXNoPEpTT2JqZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBFbmNvZGVkSlNWYWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldCA9
PSBvdGhlci51LnByZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2VuY2Uu
YXR0cmlidXRlcyA9PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNhc2Ug
QWJzZW5jZToKKyAgICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXR1
cm4gdS5hYnNlbmNlLnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOworICAg
ICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2Uu
dmFsdWUgPT0gb3RoZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9CisgICAg
CisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRp
Y2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMuIElmCisgICAgLy8gZmFsc2Ug
aXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxp
Y3QgLSBmb3IgZXhhbXBsZSBpZiB0aGVyZSBpcworICAgIC8vIGEgUHJlc2VuY2UgYW5kIGFuIEVx
dWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBnZW5lcmFs
IG9mIHRoZSB0d28KKyAgICAvLyB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUg
bW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UKKyAg
ICAvLyBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhl
IHNhbWUgdWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlkCisgICAgLy8gY29uZGl0aW9ucyBhcmVu
J3QgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChj
b25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
ISp0aGlzIHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuICp0aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpOworICAgIH0KKyAgICAK
KyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUg
cHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9
IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFu
IGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisg
ICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgor
ICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1
cmUqKSBjb25zdDsKKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBpcyBzdGls
bCB2YWxpZCByaWdodCBub3cgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIHN0cnVjdHVyZS4KKyAg
ICAvLyBNYXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZCBz
dHJ1Y3R1cmUgYWxvbmUgZG9uJ3QgZ3VhcmFudGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbi4gVGhp
cyBoYXBwZW5zIGZvciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3QgdGhhdCBtYXkg
aGF2ZSBpbXB1cmUKKyAgICAvLyBwcm9wZXJ0aWVzLiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBzdXBw
bGllZCwgdGhlbiBhICJ0cnVlIiByZXR1cm4gaW5kaWNhdGVzIHRoYXQgY2hlY2tpbmcgaWYKKyAg
ICAvLyBhbiBvYmplY3QgaGFzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgZ3VhcmFudGVlcyB0aGUgY29u
ZGl0aW9uIHN0aWxsIGhvbGRzLiBJZiBhbiBvYmplY3QgaXMKKyAgICAvLyBzdXBwbGllZCwgdGhl
biB5b3UgbWF5IG5lZWQgdG8gdXNlIHNvbWUgb3RoZXIgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVj
dCB0byBndWFyYW50ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uIGluIGFkZGl0aW9uIHRvIHRoZSBz
dHJ1Y3R1cmUgY2hlY2suCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNPYmpl
Y3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2VzLCB0
aGUgY29uZGl0aW9uIGlzIG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNoYWJs
ZSBieSBlbmFibGluZyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3IgZXhh
bXBsZSwgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNvbWUK
KyAgICAvLyBhY2Nlc3MgaXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVjdHVy
ZS4gVGhpcyBpcyBtYWlubHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5IHBy
b3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBpdCdz
IGFsd2F5cyBzYWZlIHRvCisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0IHRo
aXMgaXMgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmlsaXR5
RWZmb3J0IHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhhdCB3
ZSBkb24ndCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAgLy8g
b2JqZWN0LCBhbmQgaW1wbGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0byBi
ZSB3YXRjaGFibGUgdGhlbiB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJsZS4g
VGhpcyBpcyBtYW5kYXRvcnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBpcyBh
bHNvIHNvbWV3aGF0CisgICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGluZyB3
aGV0aGVyIHRvIHdhdGNoIGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgorICAg
ICAgICAvLyBub3QgZnJvbSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBzZWUg
aWYgd2Ugc2hvdWxkIGFkYXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5vdCBi
ZWluZyBpbml0aWFsaXplZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRvbid0
IGtub3cgZW5vdWdoCisgICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8gd2F0
Y2ggLS0gYXMgaW4sIHRoZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAgICAg
ICAvLyBzdGFiaWxpemVkIHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBjb25k
aXRpb24gd2lsbCBob2xkIGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhvbGQg
Zm9yIGEgd2hpbGUgYWxyZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAgCisg
ICAgICAgIC8vIERvIHdoYXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5IGNh
biBiZSB3YXRjaGVkLCBpZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNlcnZh
YmxlIGVmZmVjdC4gRm9yIG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3VyZSB0
aGF0IGEgcHJvcGVydHkKKyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBlbmFi
bGVkIGlmIGl0IGhhZG4ndCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlzCisg
ICAgICAgIC8vIGZyb20gSklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcgd2F0
Y2hwb2ludHMgaXMgbm90IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxpdHkK
KyAgICB9OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFu
ZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAg
Ly8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJv
cGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVs
bHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9y
Y2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJl
KiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9D
aGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50bHks
IHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAgcmV0
dXJuICEhKnRoaXM7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50
V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBtX2tp
bmQgPT0gRXF1aXZhbGVuY2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNT
dGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25z
dCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaXNXYXRj
aGFibGVXaGVuVmFsaWQoU3RydWN0dXJlKiwgV2F0Y2hhYmlsaXR5RWZmb3J0KSBjb25zdDsKKwor
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKKyAgICBLaW5kIG1fa2luZDsKKyAgICB1bmlv
biB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7
CisgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB9IHByZXNlbmNlOwor
ICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZTsKKyAgICAg
ICAgfSBhYnNlbmNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRW5jb2RlZEpTVmFs
dWUgdmFsdWU7CisgICAgICAgIH0gZXF1aXZhbGVuY2U7CisgICAgfSB1OworfTsKKworc3RydWN0
IFByb3BlcnR5Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
UHJvcGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRp
YyBib29sIGVxdWFsKAorICAgICAgICBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29uc3Qg
UHJvcGVydHlDb25kaXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAg
IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6UHJvcGVydHlDb25kaXRpb246Oktp
bmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlw
ZWRlZiBKU0M6OlByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRz
PEpTQzo6UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6UHJv
cGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBQ
cm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC05MCwxOSArOTAsMjIgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRnJvbQogICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6
Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkpOwog
ICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gaW5zdHJ1Y3Rpb25bNl0udS5zdHJ1
Y3R1cmUuZ2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gaW5zdHJ1Y3Rpb25bN10u
dS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKLSAgICBBU1NFUlQobmV3U3RydWN0dXJlKTsKLSAgICBB
U1NFUlQoY2hhaW4pOwogICAgIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAot
ICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBpbnRlbmRlZENoYWluOwotICAgIGlm
IChjaGFpbikKLSAgICAgICAgaW50ZW5kZWRDaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKTsKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKGluc3RydWN0aW9u
WzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsKQorICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0
T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSkpIHsKKyAg
ICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICAqcHJvZmlsZWRC
bG9jay0+dm0oKSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlk
KTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgfQogICAgIAotICAgIHJldHVy
biBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgaW50
ZW5kZWRDaGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRy
YW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsK
IH0KIAogUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgU3R1YkluZm9NYXAmIG1hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTE2NSwxNiArMTY4LDE0IEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gCiAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47
Ci0gICAgICAgICAgICBpZiAoc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pIHsK
LSAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHViSW5mby0+dS5wdXRC
eUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcigKKyAgICAgICAg
ICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwor
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0
KCksCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0
dXJlLmdldCgpLAotICAgICAgICAgICAgICAgIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAg
ICAgICAgICAgIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkBAIC0yMTksMTUgKzIyMCwx
MSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAg
ICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgICAg
ICBpZiAoYWNjZXNzLmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9w
dFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgICAg
IHByb2ZpbGVkQmxvY2ssIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLmNoYWluKCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNv
bmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVy
ZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZh
cmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1
cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJl
KCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTIzNSw3ICsyMzIsNyBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdl
dFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywg
c3RydWN0dXJlLCBhY2Nlc3MuY2hhaW4oKSwgYWNjZXNzLmNoYWluQ291bnQoKSwgdWlkKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3Rh
dHVzLmtpbmQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hv
dWxkU2tpcDoKQEAgLTI1Myw3ICsyNTAsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJv
ZmlsZWRCbG9jaywgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJ
ZFZhcmlhbnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29t
cGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBj
b21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
V1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0zNjgsMjIgKzM2NSwxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygp
LmlzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICAKLSAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWlu
OworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAg
ICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKTsKLSAgICAgICAg
Ci0gICAgICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBzZXR0ZXJzIG9yIHJl
YWQtb25seSBwcm9wZXJ0aWVzLCB0aGVuIGdpdmUgdXAuCi0gICAgICAgICAgICBpZiAoY2hhaW4t
Pm1heUludGVyY2VwdFN0b3JlVG8odWlkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGUg
cHJvdG90eXBlIGNoYWluIGhhc24ndCBiZWVuIG5vcm1hbGl6ZWQgKGkuZS4gdGhlcmUgYXJlIHBy
b3hpZXMgb3IgZGljdGlvbmFyaWVzKQotICAgICAgICAgICAgLy8gdGhlbiBnaXZlIHVwLiBUaGUg
ZGljdGlvbmFyeSBjYXNlIHdvdWxkIG9ubHkgaGFwcGVuIGlmIHRoaXMgc3RydWN0dXJlIGhhcyBu
b3QgYmVlbgotICAgICAgICAgICAgLy8gdXNlZCBpbiBhbiBvcHRpbWl6ZWQgcHV0X2J5X2lkIHRy
YW5zaXRpb24uIEFuZCByZWFsbHkgdGhlIG9ubHkgcmVhc29uIHdoeSB3ZSB3b3VsZAotICAgICAg
ICAgICAgLy8gYmFpbCBoZXJlIGlzIHRoYXQgSSBkb24ndCByZWFsbHkgZmVlbCBsaWtlIGhhdmlu
ZyB0aGUgb3B0aW1pemluZyBKSVQgZ28gYW5kIGZsYXR0ZW4KLSAgICAgICAgICAgIC8vIGRpY3Rp
b25hcmllcyBpZiB3ZSBoYXZlIGV2aWRlbmNlIHRvIHN1Z2dlc3QgdGhhdCB0aG9zZSBvYmplY3Rz
IHdlcmUgbmV2ZXIgdXNlZCBhcwotICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBpbiBhIGNhY2hl
YWJsZSBwcm90b3R5cGUgYWNjZXNzIC0gaS5lLiB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCBz
b21lIG9mCi0gICAgICAgICAgICAvLyB0aGUgb3RoZXIgY2hlY2tzIGJlbG93IHdpbGwgZmFpbC4K
LSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSB8fCAhY2hhaW4tPmlzTm9ybWFs
aXplZCgpKQorICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgIGdsb2JhbE9i
amVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIH0KICAgICAKQEAgLTM5NCw3ICszODAs
NyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIEFT
U0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVu
ZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRy
YW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KSk7Cisg
ICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRp
b24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
Y3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw4ICs0Myw3IEBAIFB1dEJ5SWRW
YXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX2tpbmQgPSBvdGhlci5tX2tp
bmQ7CiAgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKICAgICBtX25l
d1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwotICAgIG1fY29uc3RhbnRDaGVja3Mg
PSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1f
YWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0
OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExp
bmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENh
bGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC02NCwyOSArNjMsMjYg
QEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoYwogCiBQdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJl
c3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9s
ZFN0cnVjdHVyZTsKICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0g
ICAgaWYgKHN0cnVjdHVyZUNoYWluKQotICAgICAgICBzdHJ1Y3R1cmVDaGFpbi0+Z2F0aGVyQ2hl
Y2tzKHJlc3VsdC5tX2NvbnN0YW50Q2hlY2tzKTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQg
PSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwK
LSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXMpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJl
c3VsdC5tX2tpbmQgPSBTZXR0ZXI7CiAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIGlmIChjaGFpbikgewotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3Vs
dC5tX2NvbnN0YW50Q2hlY2tzKTsKLSAgICAgICAgcmVzdWx0Lm1fYWx0ZXJuYXRlQmFzZSA9IGNo
YWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgIH0KKyAgICByZXN1bHQubV9jb25kaXRpb25T
ZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJl
c3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtMTM0LDE4ICsxMzAsNiBAQCBib29sIFB1dEJ5SWRWYXJpYW50Ojpt
YWtlc0NhbGxzKCkgY29uc3QKICAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKIH0KIAotU3Ry
dWN0dXJlU2V0IFB1dEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJlKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2FsdGVybmF0ZUJhc2Up
Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJhc2UpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKLX0K
LQogYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKQogewogICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKQEAgLTE1
NSw4ICsxMzksOCBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAg
ICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewogICAgICAg
ICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50Q2hlY2tzLmlz
RW1wdHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb25zdGFudENoZWNrcy5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xOTYsNiArMTgwLDcgQEAgYm9v
bCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIEFTU0VSVChtX29mZnNl
dCA9PSByZXBsYWNlLm1fb2Zmc2V0KTsKICAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0
dXJlcygpKTsKICAgICBBU1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAg
IEFTU0VSVChyZXBsYWNlLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgCiAgICAgLy8g
VGhpcyBzb3J0IG9mIG1lcmdpbmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxv
bmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZpZWxkIHdoaWNoCiAgICAgLy8gdHJhbnNpdGlvbnMgdG8g
c3RydWN0dXJlIFMgd2hpbGUgdGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJl
IFMuIFRoaXMgZG9lc24ndApAQCAtMjMyLDE1ICsyMTcsMTMgQEAgdm9pZCBQdXRCeUlkVmFyaWFu
dDo6ZHVtcEluQ29udGV4dChQcmludAogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAi
PFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4g
IiwKICAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250
ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNr
cygpLCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAg
ICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9m
ZnNldCgpLCAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVy
OgogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0
KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBsaXN0RHVtcEluQ29u
dGV4dChjb25zdGFudENoZWNrcygpLCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgaWYgKG1fYWx0
ZXJuYXRlQmFzZSkKLSAgICAgICAgICAgIG91dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwg
aW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwgY29udGV4dCkpOworICAgICAgICAg
ICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKICAgICAgICAgb3V0
LnByaW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKICAgICAgICAgb3V0LnByaW50KCIsIGNh
bGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CiAgICAgICAgIG91dC5wcmludCgiPiIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFB1dEJ5
SWRWYXJpYW50X2gKICNkZWZpbmUgUHV0QnlJZFZhcmlhbnRfaAogCi0jaW5jbHVkZSAiSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQu
aCIKIApAQCAtNDYsNyArNDYsNiBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoKQogICAg
ICAgICA6IG1fa2luZChOb3RTZXQpCiAgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikK
LSAgICAgICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKICAgICAgICAgLCBtX29mZnNldChp
bnZhbGlkT2Zmc2V0KQogICAgIHsKICAgICB9CkBAIC01NCwxNiArNTMsMTUgQEAgcHVibGljOgog
ICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgUHV0QnlJZFZh
cmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogCi0gICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHJlcGxhY2UoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBy
ZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBz
dGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKICAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25z
dCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9w
ZXJ0eU9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwKLSAgICAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpOworICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CiAg
ICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkBAIC03
Niw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKICAg
ICB9CiAgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09
IFNldHRlcik7CkBAIC0xMDAsMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2Nh
dGVzU3RvcmFnZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAot
ICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQoKSBjb25zdAogICAgIHsKQEAgLTExMSwxNCArMTExLDYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQ7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAg
ICAgcmV0dXJuIG1fYWx0ZXJuYXRlQmFzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0
IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsKLSAgICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExp
bmtTdGF0dXMoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIp
OwpAQCAtMTM2LDggKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3Ry
dWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7
Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAg
IEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMzMgKzM3LDQ2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6flN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQoKSB7IH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6cHVzaCgKKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYga2V5LAogICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYg
aG9sZGVyLAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50PiYgaGVhZCkKIHsKLSAgICBoZWFkID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50Pihob2xkZXIsIFdURjo6bW92ZShoZWFkKSk7CisgICAgaGVhZCA9
IHN0ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4oa2V5LCBo
b2xkZXIsIFdURjo6bW92ZShoZWFkKSk7CiAgICAgcmV0dXJuIGhlYWQuZ2V0KCk7CiB9CiAKIHZv
aWQgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZp
cmVEZXRhaWwmKQogewotICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBk
ZW1pc2U6IHN0dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCi0gICAgLy8gVGhhdCB3
b3JrcywgYmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBz
ZXQncyBsaXN0LCBhbmQKLSAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9yIGZpcmlu
ZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgotICAgIG1faG9sZGVyLmNvZGVC
bG9jaygpLT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgIGlmICghbV9rZXkg
fHwgIW1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxp
dHkpKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1p
c2U6IHN0dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCisgICAgICAgIC8vIFRoYXQg
d29ya3MsIGJlY2F1c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUg
c2V0J3MgbGlzdCwgYW5kCisgICAgICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3Ig
ZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCisgICAgICAgIG1faG9s
ZGVyLmNvZGVCbG9jaygpLT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBwcmVzZW5jZSBjb25k
aXRpb24sIGxldCdzIHdhdGNoIHRoZSBwcm9wZXJ0eSBmb3IgcmVwbGFjZW1lbnRzLiBUaGlzIGlz
IHByb2ZpdGFibGUKKyAgICAgICAgLy8gZm9yIHRoZSBERkcsIHdoaWNoIHdpbGwgd2FudCB0aGUg
cmVwbGFjZW1lbnQgc2V0IHRvIGJlIHZhbGlkIGluIG9yZGVyIHRvIGRvIGNvbnN0YW50IGZvbGRp
bmcuCisgICAgICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKG1fa2V5Lm9iamVjdCgpKS0+dm0oKTsK
KyAgICAgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5zdGFydFdhdGNoaW5nUHJvcGVy
dHlGb3JSZXBsYWNlbWVudHModm0sIG1fa2V5Lm9mZnNldCgpKTsKKyAgICB9CisKKyAgICBtX2tl
eS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwog
fQogCiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm8oKQogewogfQogCi1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjph
ZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAg
cmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVh
ZCk7CisgICAgcmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5
LCAqdGhpcywgbV9oZWFkKTsKIH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCog
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRj
aHBvaW50KAogICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xk
ZXJSZWYsIENvZGVCbG9jayogY29kZUJsb2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbykKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXkpCiB7CiAgICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRl
clJlZiA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJs
b2NrLCBzdHViSW5mbykpOwpAQCAtNzIsNyArODUsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50KiBXYXRjaHBvCiAgICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8g
PT0gc3R1YkluZm8pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRj
aHBvaW50KCk7CisgICAgcmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
aAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYs
NyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUg
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShK
SVQpCkBAIC00NiwxNSArNDcsMTEgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCA6IAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbyYgaG9sZGVyKQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlciho
b2xkZXIpCisgICAgICAgIDogbV9rZXkoa2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikK
ICAgICAgICAgLCBtX25leHQoV1RGOjptb3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02Miw2
ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50KCk7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQqIHB1c2goCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAg
ICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4mIGhlYWQpOwog
CkBAIC02OSw2ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVy
bmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm8mIG1faG9sZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50PiBtX25leHQ7CiB9OwpAQCAtODMsMTEgKzgyLDExIEBAIHB1YmxpYzoKICAgICAK
ICAgICB+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJl
ZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAg
IENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKik7CisgICAgICAgIENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAg
ICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
azsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1f
c3R1YkluZm87IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDgsOSArNDgsMTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVy
ZWYoKQogICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwor
ICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAg
ICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2Nh
dGVkIG1lbW9yeQpAQCAtNzUsOCArNzgsMTAgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlz
aXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1h
bDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVy
ZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0
aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1
dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01h
cmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZy
b21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29u
ZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCkBAIC0xMTMsNyArMTE0LDcg
QEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIC8vIFB1dEJ5SWQqCiAKLSAgICB2
b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVy
ZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24o
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
LCBib29sIGlzRGlyZWN0KQogICAgIHsKICAgICAgICAgaWYgKGlzRGlyZWN0KQogICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7CkBAIC0x
MjIsNyArMTIzLDcgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgICAgICB1LnB1
dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3Vz
U3RydWN0dXJlKTsKICAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5z
ZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0LnJlbGVhc2VSYXdQb2ludGVyKCk7CiAgICAgfQogCiAg
ICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1
cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCkBAIC0xNzUsMTAgKzE3NiwxMSBAQCBzdHJ1Y3QgU3Ry
dWN0dXJlU3R1YkluZm8gewogICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICB9CiAgICAgICAgIAot
ICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRk
V2F0Y2hwb2ludCgKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5z
dXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBj
b2RlQmxvY2ssIHRoaXMpOworICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhp
cywgY29uZGl0aW9uKTsKICAgICB9CiAgICAgCiAgICAgaW50OF90IGFjY2Vzc1R5cGU7CkBAIC0y
MTcsMjMgKzIxOSwxMiBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAg
IH0gZ2V0QnlJZFNlbGY7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiBwcm90b3R5cGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBi
b29sIGlzRGlyZWN0OwotICAgICAgICB9IGdldEJ5SWRQcm90bzsKLSAgICAgICAgc3RydWN0IHsK
LSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0
dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47
Ci0gICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA6IDMxOwotICAgICAgICAgICAgYm9vbCBpc0Rp
cmVjdCA6IDE7Ci0gICAgICAgIH0gZ2V0QnlJZENoYWluOwotICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBnZXRCeUlk
TGlzdDsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3Ry
dWN0dXJlPiBwcmV2aW91c1N0cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlPiBzdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZUNoYWluPiBjaGFpbjsKKyAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKICAg
ICAgICAgfSBwdXRCeUlkVHJhbnNpdGlvbjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAg
IFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzc5LDcgKzE3NzksMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8KICAgICAgICAg
ICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFzdGF0dXNbaV0uYWx0ZXJuYXRlQmFzZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0aGluZyB3b24ndCBnaXZlIHVzIGEgdmFyaWFu
dCB0aGF0IGludm9sdmVzIHByb3RvdHlwZXMuIElmIGl0IGRpZCwgd2UnZAorICAgICAgICAgICAg
ICAgICAgICAvLyBoYXZlIG1vcmUgd29yayB0byBkbyBoZXJlLgorICAgICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBjb25zdGFudFJlc3VsdCA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdl
dENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKQEAgLTIwNjAsMzAgKzIwNjMsMjIgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFj
dFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RydWN0dXJl
U2V0IGJhc2VTZXQ7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgU3RydWN0dXJl
U2V0IHNldCA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCk7CisgICAgICAgIGZvciAoY29uc3QgTXVs
dGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
LmNhc2VzKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gZ2V0Q2FzZS5zZXQoKTsK
ICAgICAgICAgICAgIHNldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVy
Z2Uoc2V0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsK
LSAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAg
ICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZS5tX3ZhbHVlOwotICAgICAgICAg
ICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC50cnlH
ZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCwgdmFy
aWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgaWYg
KCFjb25zdGFudFJlc3VsdCkgeworICAgICAgICAgICAgaWYgKGdldENhc2UubWV0aG9kKCkua2lu
ZCgpICE9IEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudCkgewogICAgICAgICAgICAgICAgIHJl
c3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7
CiAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLAot
ICAgICAgICAgICAgICAgICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCisgICAgICAg
ICAgICAgICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKICAgICAgICAgICAgICAgICBt
X3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIHJlc3VsdC5tZXJn
ZSh0aGlzUmVzdWx0KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6
OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQorICAg
IDogbV9rZXkoa2V5KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsK
K30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omluc3Rh
bGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAor
ICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQo
Jm1fc3RydWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkobV9rZXkudWlk
KCkpOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUo
KS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICBzZXQtPmFk
ZCgmbV9wcm9wZXJ0eVdhdGNocG9pbnQpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludDo6ZmlyZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7Cisg
ICAgLy8gT25lIG9mIHRoZSB3YXRjaHBvaW50cyBmaXJlZCwgYnV0IHRoZSBvdGhlciBvbmUgZGlk
bid0LiBNYWtlIHN1cmUgdGhhdCBuZWl0aGVyIG9mIHRoZW0gYXJlCisgICAgLy8gaW4gYW55IHNl
dCBhbnltb3JlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGJ5IGFsbG93aW5nIHVzIHRvIHJlaW5z
dGFsbCB0aGUgd2F0Y2hwb2ludHMKKyAgICAvLyB3aGVyZXZlciBmcm9tIHNjcmF0Y2guCisgICAg
aWYgKG1fc3RydWN0dXJlV2F0Y2hwb2ludC5pc09uTGlzdCgpKQorICAgICAgICBtX3N0cnVjdHVy
ZVdhdGNocG9pbnQucmVtb3ZlKCk7CisgICAgaWYgKG1fcHJvcGVydHlXYXRjaHBvaW50LmlzT25M
aXN0KCkpCisgICAgICAgIG1fcHJvcGVydHlXYXRjaHBvaW50LnJlbW92ZSgpOworICAgIAorICAg
IGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmls
aXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxv
ZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAi
ICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisg
ICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAi
LCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFp
bCBzdHJpbmdEZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisgICAgbV9jb2Rl
QmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmls
ZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWlsKTsKK30KKwor
dm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7
CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAgICAgICBBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fc3RydWN0dXJlV2F0Y2hwb2lu
dCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KiBw
YXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0g
bXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit2b2lkIEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50
OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIHB0
cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAgQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3Byb3BlcnR5V2F0Y2hwb2ludCk7CisgICAg
CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KiBwYXJlbnQgPQor
ICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gbXlPZmZzZXQp
OworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXks
CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAg
ICB2b2lkIGluc3RhbGwoKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBTdHJ1Y3R1cmVXYXRjaHBv
aW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RydWN0dXJl
V2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZp
cmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICBjbGFz
cyBQcm9wZXJ0eVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgor
ICAgICAgICBQcm9wZXJ0eVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwor
ICAgIH07CisgICAgCisgICAgdm9pZCBmaXJlKGNvbnN0IEZpcmVEZXRhaWwmKTsKKyAgICAKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnQgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50OworICAg
IFByb3BlcnR5V2F0Y2hwb2ludCBtX3Byb3BlcnR5V2F0Y2hwb2ludDsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoa2V5LndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgha2V5LndhdGNoaW5nUmVxdWlyZXNS
ZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50OjppbnN0YWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJs
ZSgpKTsKKyAgICAKKyAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRp
b25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAobV9r
ZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsK
KyAgICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
IChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAg
ICAgICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiAoIiwgbV9r
ZXksICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgfQorICAgIAorICAgIFN0cmlu
Z1ByaW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFkYXB0YXRpb24gb2YgIiwgbV9rZXks
ICIgZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0cmluZ0ZpcmVEZXRhaWwgc3RyaW5n
RGV0YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5q
ZXR0aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hw
b2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJnN0cmluZ0RldGFpbCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5LAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
OyB9CisgICAgCisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsMTQg
QEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJv
b2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRl
cm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcyk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2Rl
KiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3Ry
dWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5v
ZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9w
ZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0
QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdl
dEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwg
Tm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUg
PSBHZXRCeU9mZnNldCk7CisgICAgCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5SWRWYXJp
YW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmFyaWFudFR5cGU+CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmIHZh
cmlhbnQpOworICAgICAgICAKICAgICB2b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBk
ZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CkBAIC0yMTIs
NyArMjE5LDMyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAogICAgICAgICBO
b2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3Qg
UHV0QnlJZFN0YXR1cyYsCiAgICAgICAgIGJvb2wgaXNEaXJlY3QpOwotICAgIHZvaWQgZW1pdENo
ZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7CisgICAgCisgICAgLy8g
RWl0aGVyIHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29u
ZGl0aW9uLiBSZXR1cm5zIGZhbHNlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBubyBsb25nZXIg
aG9sZHMsIGFuZCB0aGVyZWZvcmUgbm8gcmVhc29uYWJsZSBjaGVjayBjYW4gYmUgZW1pdHRlZC4K
KyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCisg
ICAgR2V0QnlPZmZzZXRNZXRob2QgcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Qp
OworICAgIAorICAgIC8vIEVpdGhlciByZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1pdCBhIGNo
ZWNrIGZvciB0aGlzIGNvbmRpdGlvbi4gSXQgbXVzdCBiZSBhIFByZXNlbmNlCisgICAgLy8gY29u
ZGl0aW9uLiBJdCB3aWxsIGF0dGVtcHQgdG8gcHJvbW90ZSBhIFByZXNlbmNlIGNvbmRpdGlvbiB0
byBhbiBFcXVpdmFsZW5jZSBjb25kaXRpb24uCisgICAgLy8gRW1pdHMgY29kZSBmb3IgdGhlIGxv
YWRlZCB2YWx1ZSB0aGF0IHRoZSBjb25kaXRpb24gZ3VhcmRzLCBhbmQgcmV0dXJucyBhIG5vZGUg
Y29udGFpbmluZworICAgIC8vIHRoZSBsb2FkZWQgdmFsdWUuIFJldHVybnMgbnVsbCBpZiB0aGUg
Y29uZGl0aW9uIG5vIGxvbmdlciBob2xkcy4KKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwbGFuTG9h
ZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIE5vZGUqIGxvYWQoU3BlY3Vs
YXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0
aG9kJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVk
VHlwZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBOb2RlVHlwZSA9IEdldEJ5T2Zm
c2V0KTsKKyAgICAKKyAgICAvLyBDYWxscyBjaGVjaygpIGZvciBlYWNoIGNvbmRpdGlvbiBpbiB0
aGUgc2V0OiB0aGF0IGlzLCBpdCBlaXRoZXIgZW1pdHMgY2hlY2tzIG9yIHJlZ2lzdGVycworICAg
IC8vIHdhdGNocG9pbnRzIChvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28pIHRvIG1ha2UgdGhl
IGNvbmRpdGlvbnMgaG9sZC4gSWYgYW55IG9mIHRob3NlCisgICAgLy8gY29uZGl0aW9ucyBhcmUg
bm8gbG9uZ2VyIGNoZWNrYWJsZSwgcmV0dXJucyBmYWxzZS4KKyAgICBib29sIGNoZWNrKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jik7CisgICAgCisgICAgLy8gQ2FsbHMgY2hlY2so
KSBmb3IgdGhvc2UgY29uZGl0aW9ucyB0aGF0IGFyZW4ndCB0aGUgc2xvdCBiYXNlLCBhbmQgY2Fs
bHMgbG9hZCgpIGZvciB0aGUgc2xvdAorICAgIC8vIGJhc2UuIERvZXMgYSBjb21iaW5hdGlvbiBv
ZiB3YXRjaHBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgY2hlY2sgZW1pc3Npb24gdG8gZ3VhcmQgdGhl
CisgICAgLy8gY29uZGl0aW9ucywgYW5kIGVtaXRzIGNvZGUgdG8gbG9hZCB0aGUgdmFsdWUgZnJv
bSB0aGUgc2xvdCBiYXNlLiBSZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxv
YWRlZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyB3ZXJlIG5v
IGxvbmdlciBjaGVja2FibGUuCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcGxhbkxvYWQoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRU
eXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIE5vZGVUeXBlID0gR2V0QnlP
ZmZzZXQpOwogCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVh
ckNhY2hlcygpOwpAQCAtNzA2LDYgKzczOCw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSog
Y2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0ZSB0
byBlbWl0UHJvcGVydHlDaGVjaywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3VycmVu
dGx5LAorICAgICAgICAvLyB0aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFByb3Bl
cnR5Q2hlY2soKSBzaW5jZSB3ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKKyAgICAgICAg
Ly8gb2JqZWN0J3Mgc3RydWN0dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nvc250
YW50LgogICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0KTsK
ICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVj
dE5vZGU7CkBAIC0yMjQwLDE1ICsyMjc1LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q29uc3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJh
c2UsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5v
ZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgTm9kZVR5cGUgb3ApCiB7Ci0gICAgaWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHko
YmFzZS0+YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkgewotICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25z
dGFudChjb25zdGFudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgTm9kZSogcHJvcGVy
dHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UgPSBiYXNlOwpAQCAtMjI2NCw2ICsyMjkyLDE4IEBAIE5vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9CiAK
K05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlw
ZSBvcCkKK3sKKyAgICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoSlNW
YWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pT
VmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQpKSB7CisgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0
YW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZz
ZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0LCBvcCk7Cit9CisK
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQogewog
ICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKQEAgLTIyODEsMTAgKzIzMjEsMjE2IEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCit7CisgICAgaWYgKG1fZ3JhcGgu
d2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgp
OworICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAg
Q2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpKSwKKyAgICAgICAgd2Vha0pTQ29uc3RhbnQoY29uZGl0aW9uLm9iamVjdCgpKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2Vy
Ojpwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QpCit7CisgICAgaWYg
KG1ldGhvZC5raW5kKCkgPT0gR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlCisg
ICAgICAgICYmIG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPmRmZ1Nob3VsZFdhdGNo
KCkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0
YW50UHJvcGVydHkobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLCBtZXRob2QucHJvdG90eXBl
KCktPnN0cnVjdHVyZSgpLCBtZXRob2Qub2Zmc2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpjb25zdGFudChtX2dyYXBoLmZyZWV6ZShjb25zdGFudCkpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gbWV0aG9kOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRl
Q29kZVBhcnNlcjo6cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbikKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUGxhbm5pbmcgYSBs
b2FkOiAiLCBjb25kaXRpb24sICJcbiIpOworICAgIAorICAgIC8vIFdlIG1pZ2h0IHByb21vdGUg
dGhpcyB0byBFcXVpdmFsZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBz
dWNoIHByb21vdGlvbgorICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5
IHRoaXMgY2Fubm90IGJlIGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgor
ICAgIC8vIE5vbmUgb2YgdGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEg
bG9hZCBvZiBhbiBFcXVpdmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBw
b3J0aW5nIGl0IHdvdWxkIGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVM
RUFTRV9BU1NFUlQoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2Vu
Y2UpOworICAgIAorICAgIC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRo
aXMsIGZyb20gbW9zdCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAg
Ly8gMSkgV2F0Y2hwb2ludCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBh
IGNvbnN0YW50IG5vZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIg
Y29kZSBpcyBlbWl0dGVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMg
bmV2ZXIgcmVnaXN0ZXJlZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBj
b2RlIGFuZCB3ZSB3b24ndCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QK
KyAgICAvLyAgICB0cmFuc2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJs
ZSByaWdodCBub3cuCisgICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQg
dGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQg
YnkgdGhlCisgICAgLy8gICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNo
IHRoZSBzdHJ1Y3R1cmUgYW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8v
ICAgIGNvbmRpdGlvbiwgc2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBj
b25zdGFudCBpbiBJUiB3aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUg
c3RydWN0dXJlIGFueXdheSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUg
Y29uZGl0aW9uLgorICAgIC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRo
ZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0
aGUKKyAgICAvLyAgICBERkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFs
aWQoKSBhbmQgIWRmZ1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0
aGUgY29uZGl0aW9uLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRv
IGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5v
dCB3YXRjaGFibGUuIEVtaXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQg
YSBsb2FkLgorICAgIC8vCisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBH
aXZlIHVwIGFuZCByZXR1cm4gbnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWdyZWUg
b24gd2hhdCB0aGUgc3RydWN0dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGluZyB0aGVz
ZSB2YXJpb3VzCisgICAgLy8gY2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29u
ZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRv
IHByb21vdGUgUHJlc2VuY2UgdG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5n
IGFueXRoaW5nIGVsc2UKKyAgICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4g
QWxzbywgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0
CisgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVx
dWl2YWxlbmNlIChzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAoMiks
IGFuZCAoMykgYWJvdmUpLgorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQoY29uZGl0
aW9uLm9mZnNldCgpKSkgeworICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNhdXNlIG9u
bHkgdGhlIEdDIGNhbiBjYXVzZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdhcmJhZ2UK
KyAgICAgICAgLy8gdmFsdWUuCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRpb24ub2Jq
ZWN0KCktPmdldERpcmVjdChjb25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAg
ICAgICBjb25kaXRpb24ub2JqZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOworICAgICAg
ICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAg
ICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXpl
KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ2xsIGhhdmUg
dG8gbWF0ZXJpYWxpemUgdGhlIGNvbmRpdGlvbidzIGJhc2UgYXMgYSBjb25zdGFudCBpbiBERkcg
SVIuIE9uY2UKKyAgICAvLyB3ZSBkbyB0aGlzLCB0aGUgZnJvemVuIHZhbHVlIHdpbGwgaGF2ZSBp
dHMgb3duIGlkZWEgb2Ygd2hhdCB0aGUgc3RydWN0dXJlIGlzLiBVc2UgdGhhdCBmcm9tCisgICAg
Ly8gbm93IG9uIGp1c3QgYmVjYXVzZSBpdCdzIGxlc3MgY29uZnVzaW5nLgorICAgIEZyb3plblZh
bHVlKiBiYXNlID0gbV9ncmFwaC5mcmVlemUoY29uZGl0aW9uLm9iamVjdCgpKTsKKyAgICBzdHJ1
Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiB0aGUgc3Ry
dWN0dXJlIHRoYXQgd2UndmUgcmVnaXN0ZXJlZCBtYWtlcyB0aGUgY29uZGl0aW9uIGhvbGQuIElm
IG5vdCwganVzdCBnaXZlCisgICAgLy8gdXAuIFRoaXMgaXMgY2FzZSAoNSkgYWJvdmUuCisgICAg
aWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAg
ICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgIAorICAgIC8vIElmIHRoZSBzdHJ1
Y3R1cmUgaXMgd2F0Y2hlZCBieSB0aGUgREZHIGFscmVhZHksIHRoZW4ganVzdCB1c2UgdGhpcyBm
YWN0IHRvIGVtaXQgdGhlIGxvYWQuCisgICAgLy8gVGhpcyBpcyBjYXNlICgyKSBhYm92ZS4KKyAg
ICBpZiAoc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICByZXR1cm4gcHJvbW90
ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNv
bmRpdGlvbi5vZmZzZXQoKSkpOworICAgIAorICAgIC8vIElmIHdlIGNhbiB3YXRjaCB0aGUgY29u
ZGl0aW9uIHJpZ2h0IG5vdywgdGhlbiB3ZSBjYW4gZW1pdCB0aGUgbG9hZCBhZnRlciB3YXRjaGlu
ZyBpdC4gVGhpcworICAgIC8vIGlzIGNhc2UgKDMpIGFib3ZlLgorICAgIGlmIChtX2dyYXBoLndh
dGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFu
dChHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9m
ZnNldCgpKSk7CisgICAgCisgICAgLy8gV2UgY2FuJ3Qgd2F0Y2ggYW55dGhpbmcgYnV0IHdlIGtu
b3cgdGhhdCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgc2F0aXNmaWVzIHRoZSBjb25kaXRpb24uIFNv
LAorICAgIC8vIGNoZWNrIGZvciB0aGF0IHN0cnVjdHVyZSBhbmQgdGhlbiBlbWl0IHRoZSBsb2Fk
LgorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLCAKKyAgICAgICAgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhiYXNlKSkpOworICAgIHJldHVybiBwcm9tb3RlVG9Db25z
dGFudChHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9u
Lm9mZnNldCgpKSk7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IEdl
dEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2QsCisgICAgTm9kZVR5cGUgb3ApCit7CisgICAgc3dpdGNo
IChtZXRob2Qua2luZCgpKSB7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29u
c3RhbnQ6CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRo
b2QuY29uc3RhbnQoKSkpOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJv
dG90eXBlOiB7CisgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8obWV0aG9kLnByb3RvdHlwZSgpKSk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRC
eU9mZnNldChwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9m
ZnNldCgpLCBvcCk7CisgICAgfQorICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6Cisg
ICAgICAgIC8vIFdpbGwgbmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biwgTm9kZVR5cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxv
YWQoY29uZGl0aW9uKTsKKyAgICByZXR1cm4gbG9hZChwcmVkaWN0aW9uLCBtX2dyYXBoLmlkZW50
aWZpZXJzKCkuZW5zdXJlKGNvbmRpdGlvbi51aWQoKSksIG1ldGhvZCwgb3ApOworfQorCitib29s
IEJ5dGVDb2RlUGFyc2VyOjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
Y29uZGl0aW9uIDogY29uZGl0aW9uU2V0KSB7CisgICAgICAgIGlmICghY2hlY2soY29uZGl0aW9u
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBkYXRhTG9nKCJjb25kaXRpb25TZXQgPSAiLCBjb25kaXRpb25TZXQsICJcbiIp
OworICAgIAorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlvblNldCkgeworICAgICAg
ICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsgLy8g
U2hvdWxkIG9ubHkgc2VlIGV4YWN0bHkgb25lIG9mIHRoZXNlLgorICAgICAgICAgICAgcmVzdWx0
ID0gcGxhbkxvYWQoY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIWNoZWNrKGNvbmRpdGlvbikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghIXJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgTm9kZVR5cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2Qg
bWV0aG9kID0gcGxhbkxvYWQoY29uZGl0aW9uU2V0KTsKKyAgICByZXR1cm4gbG9hZCgKKyAgICAg
ICAgcHJlZGljdGlvbiwKKyAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS51aWQoKSksCisgICAgICAgIG1ldGhvZCwgb3Ap
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KK05vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJiB2YXJpYW50KQogewot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVj
dG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNl
KTsKKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBsb2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlw
ZSBsb2FkT3A7CisgICAgaWYgKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgeworICAgICAgICBs
b2FkUHJlZGljdGlvbiA9IFNwZWNDZWxsT3RoZXI7CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRl
clNldHRlckJ5T2Zmc2V0OworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0g
cHJlZGljdGlvbjsKKyAgICAgICAgbG9hZE9wID0gR2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAor
ICAgIE5vZGUqIGxvYWRlZFZhbHVlOworICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5p
c0VtcHR5KCkpCisgICAgICAgIGxvYWRlZFZhbHVlID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFy
aWFudC5jb25kaXRpb25TZXQoKSwgbG9hZE9wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVk
VmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBi
YXNlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9m
ZnNldCgpLAorICAgICAgICAgICAgbG9hZE9wKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUg
YmFja3dhcmRzIHByb3BhZ2F0aW9uIGtub3dzIHRoYXQgd2UndmUgdXNlZCBiYXNlLgorICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgCisgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwog
fQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjMwNywxOCArMjU1
MywzNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxh
dGlvbigpKQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVk
R2V0QnlJZCgpOwotICAgIAorICAgICAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+
IGNhc2VzOworICAgICAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJl
IGNoZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQog
ICAgICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBj
YXNlIGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNo
ZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZv
ciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2
YXJpYW50SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFy
aWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCisgICAgICAgIGZvciAoY29u
c3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsK
KyAgICAgICAgICAgIGlmICh2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgTXVsdGlHZXRC
eU9mZnNldENhc2UoCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNl
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFy
aWFudC5vZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0g
cGxhbkxvYWQodmFyaWFudC5jb25kaXRpb25TZXQoKSk7CisgICAgICAgICAgICBpZiAoIW1ldGhv
ZCkgeworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVy
YW5kKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRl
bnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZXMuYXBwZW5kKE11bHRpR2V0QnlPZmZzZXRDYXNlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIG1l
dGhvZCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkK
KyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQo
KTsKKyAgICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0QnlPZmZzZXQKICAgICAgICAg
TXVsdGlHZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERh
dGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gZ2V0QnlJZFN0YXR1cy52YXJpYW50
cygpOworICAgICAgICBkYXRhLT5jYXNlcyA9IGNhc2VzOwogICAgICAgICBkYXRhLT5pZGVudGlm
aWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkZXN0aW5hdGlvbk9wZXJhbmQpLAogICAgICAgICAgICAgYWRkVG9HcmFwaChNdWx0aUdldEJ5
T2Zmc2V0LCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwpAQCAtMjMy
OCwzMCArMjU5MiwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAg
IEFTU0VSVChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CiAgICAgR2V0QnlJZFZh
cmlhbnQgdmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAgICAgICAgICAgICAgCisgICAg
Tm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQpOworICAgIGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgYWRkVG9HcmFwaChn
ZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFz
ZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRp
b24oKSkKICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJ
ZCgpOwogICAgIAotICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7Ci0gICAgCi0gICAgZW1p
dENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotCi0gICAgaWYgKHZhcmlhbnQuYWx0
ZXJuYXRlQmFzZSgpKQotICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRl
cm5hdGVCYXNlKCkpOwotICAgIAotICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQgdG8KLSAg
ICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtl
cHQgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCi0gICAgLy8gYWxsIG9mIHRoZSBzcGVjdWxh
dGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVuIGEgQ2hl
Y2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xs
b3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UuCi0gICAgaWYgKG9yaWdpbmFsQmFzZSAh
PSBiYXNlKQotICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZSk7Ci0gICAg
Ci0gICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgdmFy
aWFudC5jYWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0gICAg
ICAgIGJhc2UsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJp
YW50Lm9mZnNldCgpLAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICAKICAgICBpZiAoIXZhcmlhbnQu
Y2FsbExpbmtTdGF0dXMoKSkgewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0
aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4OCw3ICsy
NjM4LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyAgICBz
aW5jZSB3ZSBvbmx5IHJlYWxseSBjYXJlIGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3
ZSdyZSBub3QgZ29pbmcgdG8gdGFrZSB0aGF0CiAgICAgLy8gICAgc2hvcnRjdXQuCiAgICAgaW50
IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsKLSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxC
YXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVn
aXN0ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAKICAgICBoYW5kbGVDYWxs
KAogICAgICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0
dGVyQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLApAQCAtMjQyMiwxNyArMjY3Miwy
MCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlv
bigpKQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0
QnlJZCgpOwotICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7
IHZhcmlhbnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3Zh
cmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5
SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1f
Z3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgCiAg
ICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlP
ZmZzZXREYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMu
dmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJO
dW1iZXI7CkBAIC0yNDU0LDcgKzI3MDcsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0QnlJZCgKICAgICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hl
Y2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGlmICghY2hlY2sodmFyaWFu
dC5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRh
dGVkKCkpOwogICAgIApAQCAtMjUwNSwxOSArMjc2MSwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeUlkKAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFu
dDo6U2V0dGVyOiB7Ci0gICAgICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAg
IAotICAgICAgICBhZGRUb0dyYXBoKAotICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwot
ICAgICAgICAKLSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAg
ICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAg
ICAgCi0gICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAg
ICAgICAgICBTcGVjQ2VsbE90aGVyLCBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0KTsKKyAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxs
T3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgICAgICBpZiAoIWxv
YWRlZFZhbHVlKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRUb0dyYXBo
KEdldFNldHRlciwgbG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI1NDUsNyArMjc5Myw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKICAgICAKICAgICAgICAg
aW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIG9y
aWdpbmFsQmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgdmFsdWUsIEltbWVkaWF0ZU5ha2Vk
U2V0KTsKICAgICAKICAgICAgICAgaGFuZGxlQ2FsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODksNiArODksOSBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAg
ICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBm
b3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVm
ZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZp
c2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAi
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHSnVtcFJlcGxh
Y2VtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCkBAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFdyaXRlQmFycmll
cjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOwogICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFj
ZW1lbnRzOwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0
aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTQsMjEgKzI5NCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0
ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRl
ciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxl
ZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBk
byB0aGluZ3MgdG8gdGhpcy4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07
Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuZmlsdGVyKGJhc2VW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0cnVjdHVyZVNldCgpLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0g
ZGF0YS52YXJpYW50cy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlh
bnRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICAgICAg
ICAgIGdldENhc2Uuc2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChnZXRDYXNlLnNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS5jYXNlc1tpLS1dID0gZGF0YS5jYXNlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLmNhc2VzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUo
KSAhPSAxKQorICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhc2VzLnNpemUoKSAhPSAxKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBlbWl0R2V0QnlPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9k
ZSwgYmFzZVZhbHVlLCBkYXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOwor
ICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VW
YWx1ZSwgZGF0YS5jYXNlc1swXSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTM3NCw4ICszNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
dGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0
YXR1c1tpXS5jb25zdGFudENoZWNrcygpLmlzRW1wdHkoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgc3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90eXBlIGNhc2VzLgogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMDM4NgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTIsNyAr
MzkwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9n
cmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICAgICAgICAgIGRhdGEt
PnZhcmlhbnRzID0gc3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPmNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IE11bHRpR2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlPZmZz
ZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvTXVsdGlHZXRCeU9mZnNldChkYXRhKTsK
ICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTQzMiw5ICs0MzUsMzEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTspCi0gICAg
ICAgICAgICAgICAgICAgIGFkZENoZWNrcyhvcmlnaW4sIGluZGV4SW5CbG9jaywgc3RhdHVzW2ld
LmNvbnN0YW50Q2hlY2tzKCkpOworCisgICAgICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDog
c3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxHb29kKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0
aW9uU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29u
ZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0
aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBub2Rl
LT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgY29uZGl0aW9uLm9iamVjdCgp
LCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1W
YXJpYW50cygpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0KGlu
ZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0sIGlkZW50aWZpZXJOdW1iZXIp
OwpAQCAtNTI5LDQxICs1NTQsNzIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBjaGFuZ2VkOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1
ZSwgY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIpCisgICAgeworICAgICAgICAvLyBXaGVuIHdlIGdldCB0byBoZXJlIHdlIGhhdmUg
YWxyZWFkeSBlbWl0dGVkIGFsbCBvZiB0aGUgcmVxdWlzaXRlIGNoZWNrcyBmb3IgZXZlcnl0aGlu
Zy4KKyAgICAgICAgLy8gU28sIHdlIGp1c3QgbmVlZCB0byBlbWl0IHdoYXQgdGhlIG1ldGhvZCBv
YmplY3QgdGVsbHMgdXMgdG8gZW1pdC4KICAgICAgICAgCisgICAgICAgIGFkZEJhc2VDaGVjayhp
bmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZ2V0Q2FzZS5zZXQoKSk7CisKKyAgICAgICAg
R2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsKKyAgICAgICAgCisg
ICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29u
c3RhbnQobm9kZSwgbWV0aG9kLmNvbnN0YW50KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAg
ICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBub2RlLT5jaGlsZDEoKSwg
aWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVBy
b3RvdHlwZTogeworICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2luc2VydGlvblNldC5pbnNl
cnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwg
bWV0aG9kLnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldCgKKyAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVzZSks
IGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5k
ZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNv
bnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQog
ICAgIHsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAg
IEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAKICAgICAgICAgYWRkQmFzZUNoZWNr
KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsK
ICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZUZvckxvYWQ7Ci0gICAgICAgIGlmICh2YXJp
YW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5h
bHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGb3JMb2FkID0g
YmFzZVZhbHVlLm1fdmFsdWU7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50
cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUo
KSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgLy8gV2UgYXJlbid0IHNldCB1cCB0byBo
YW5kbGUgcHJvdG90eXBlIHN0dWZmLgorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUs
IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKworICAgICAgICBpZiAoSlNWYWx1
ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlVmFsdWUubV92YWx1
ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKICAgICAgICAg
ICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFsdWUp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5CbG9jaywgb3JpZ2luLCB2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGlsZEVkZ2UgPSBFZGdlKGNoaWxkLCBL
bm93bkNlbGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRV
c2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxv
Y2ssIG5vZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5C
bG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGNoaWxkRWRnZS5zZXRV
c2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAgICAgICBFZGdlIHByb3BlcnR5U3Rv
cmFnZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNl
dCgpKSkKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBj
aGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRC
dXR0ZXJmbHksIG5vZGUtPm9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOwor
ICAgICAgICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVt
YmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CkBAIC02NDMsMTUgKzY5OSw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDaGVjayhpbmRleElu
QmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGFkZENoZWNrcygKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4
SW5CbG9jaywgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY2hlY2tzKQotICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoZWNrcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBjaGVja3NbaV0uY29uc3RhbnQoKSwgY2hlY2tzW2ld
LnN0cnVjdHVyZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHZvaWQgYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ss
IEpTQ2VsbCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBpZiAo
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUoKSkgPT0gU3RydWN0dXJl
UmVnaXN0ZXJlZEFuZFdhdGNoZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hwb2ludCog
d2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcq
IHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50
ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1
dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVm
ZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwogICAgIG5l
dXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwxMCArNDYs
MjMgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQogCiB2b2lk
IEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElu
ZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIENvbW1v
bkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVycmVkVmFs
dWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQn
cyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0
b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVycmVkVmFs
dWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2b2lkIEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYg
Y29tbW9uKQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkgeworICAgIGNhc2UgUHJvcGVydHlD
b25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50
cygpIHsgfQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCit2b2lk
IERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7
Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTg4LDYg
KzEwNyw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBt
X2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9pbmZl
cnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZl
clZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1fYWRhcHRpdmVT
dHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29s
IERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC05NSw3ICsxMTUs
MTggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgIHJldHVy
biBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGls
bFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAg
ICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYnVm
ZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVT
ZXRzLmFyZVN0aWxsVmFsaWQoKTsKK30KKwordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJEZXNpcmVkIHdhdGNocG9pbnRzOlxuIik7CisgICAgb3V0LnByaW50
KCIgICAgV2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9zZXRzLCBjb250ZXh0KSwgIlxu
Iik7CisgICAgb3V0LnByaW50KCIgICAgSW5saW5lIHdhdGNocG9pbnQgc2V0czogIiwgaW5Db250
ZXh0KG1faW5saW5lU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIElu
ZmVycmVkIHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAi
XG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1
ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHBy
b3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywg
Y29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJ
KHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRl
ICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKQEAgLTQwLDMzICs0Miw1NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBHZW5lcmljU2V0
QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIFQgc2V0LCBXYXRjaHBv
aW50KiB3YXRjaHBvaW50KQorc3RydWN0IFNldFBvaW50ZXJBZGFwdG9yIHsKKyAgICBzdGF0aWMg
dm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21tb25EYXRhJiBjb21tb24p
CiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2ludCk7CisgICAgICAgIHJl
dHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOwogICAgIH0K
ICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpIHsgcmV0dXJuIHNldC0+
aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIFQgc2V0LCBEdW1wQ29udGV4dCopCisgICAgeworICAgICAgICBvdXQu
cHJpbnQoUmF3UG9pbnRlcihzZXQpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgSW5mZXJyZWRWYWx1
ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVl
KiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJl
ZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRl
ZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGlu
ZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwogICAgIH0KKyAgICBzdGF0aWMgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVmFsdWUqIGluZmVycmVk
VmFsdWUsIER1bXBDb250ZXh0KikKKyAgICB7CisgICAgICAgIG91dC5wcmludChSYXdQb2ludGVy
KGluZmVycmVkVmFsdWUpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0
Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5
QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2Nr
KiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFz
QmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKLSAgICAgICAg
Ym9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gIXZpZXctPmxlbmd0
aCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7
CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZSh2aWV3KSwgY29udGV4dCkpOwor
ICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsK
KyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVk
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1
cm4gIWtleS5pc1dhdGNoYWJsZSgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250
ZXh0KAorICAgICAgICBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmlu
dChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBHZW5lcmljU2V0QWRhcHRv
cjxXYXRjaHBvaW50U2V0VHlwZT4+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlw
ZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBl
Pj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2ludFNldFR5cGUsIGJvb2w+IFN0YXRlTWFw
OwpAQCAtODcsNyArMTEyLDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9y
ZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8mIHNldCA6IG1fc2V0cykK
LSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uLndhdGNocG9p
bnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ss
IHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQgPSB0cnVlOwog
ICAgIH0KQEAgLTEwNyw2ICsxMzIsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zZXRz
LmNvbnRhaW5zKHNldCk7CiAgICAgfQogCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgQ29t
bWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKGNvbnN0IFdhdGNocG9pbnRTZXRUeXBlJiBl
bnRyeSA6IG1fc2V0cykgeworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAg
ICAgIEFkYXB0b3I6OmR1bXBJbkNvbnRleHQob3V0LCBlbnRyeSwgY29udGV4dCk7CisgICAgICAg
IH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZT4gbV9z
ZXRzOwogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTEyMiw2ICsxNTYsMTAgQEAgcHVibGlj
OgogICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAgICB2b2lkIGFkZExhemls
eShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhh
dCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9u
KCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBz
b21lIG90aGVyIGJvb2trZWVwaW5nLgorICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsK
ICAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21tb25EYXRhJik7CkBAIC0x
NDQsMTIgKzE4MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXJW
aWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9hZGFw
dGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAgfQorCisgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2ly
ZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAgIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5lU2V0czsKICAgICBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRv
cj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJy
YXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVy
Vmlld3M7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVj
dHVyZVNldHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
Y3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsMTQg
QEAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp+RGVzaXJlZFdlYWtSZWZlcgogCiB2b2lkIERlc2ly
ZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBtX3JlZmVy
ZW5jZXMuYWRkKGNlbGwpOworICAgIGlmIChjZWxsKQorICAgICAgICBtX3JlZmVyZW5jZXMuYWRk
KGNlbGwpOworfQorCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTVmFs
dWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhZGRMYXppbHko
dmFsdWUuYXNDZWxsKCkpOwogfQogCiBib29sIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6Y29udGFp
bnMoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IAogCiBjbGFzcyBDb2Rl
QmxvY2s7CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7
CiBjbGFzcyBWTTsKIApAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6CiAgICAgfkRlc2lyZWRXZWFr
UmVmZXJlbmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXppbHkoSlNDZWxsKik7CisgICAgdm9pZCBh
ZGRMYXppbHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsKICAgICAKICAg
ICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDggKzI1Nyw4
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBpZiAobm9k
ZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0
RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJz
KClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250ZXh0KSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNlc1tpXSwgY29udGV4dCkp
OwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKSkgewogICAg
ICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCk7CkBAIC01MzAsNiArNTMwLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQwogICAgICAgICBpZiAodmFsdWUtPnBvaW50c1RvSGVhcCgpKQogICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgaW5Db250ZXh0KCp2YWx1ZSwgJm15Q29udGV4dCksICJcbiIp
OwogICAgIH0KKworICAgIG91dC5wcmludChpbkNvbnRleHQod2F0Y2hwb2ludHMoKSwgJm15Q29u
dGV4dCkpOwogICAgIAogICAgIGlmICghbXlDb250ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICBt
eUNvbnRleHQuZHVtcChvdXQpOwpAQCAtODQ4LDYgKzg1MCwzMCBAQCB2b2lkIEdyYXBoOjpjbGVh
ckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCitib29sIEdyYXBoOjp3YXRjaENv
bmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIGlmICgh
a2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3Bs
YW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAgaWYgKGtleS5o
YXNQcm90b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShr
ZXkucHJvdG90eXBlKCkpOworICAgIGlmIChrZXkuaGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAg
ICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5yZXF1aXJlZFZhbHVlKCkpOwor
ICAgIAorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKKworICAgIGlmIChr
ZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkKKyAgICAgICAgbV9zYWZl
VG9Mb2FkLmFkZChzdGQ6Om1ha2VfcGFpcihrZXkub2JqZWN0KCksIGtleS5vZmZzZXQoKSkpOwor
ICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNP
YmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gbV9zYWZl
VG9Mb2FkLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOworfQorCiBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29k
ZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2Rl
QmxvY2spOwpAQCAtMTAyMCw4ICsxMDQ2LDEyIEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0
YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAg
ICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwg
c3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpCisgICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0
cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBqdXN0IGNv
bnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbgorICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1mb2xkIHRoZSBwcm9wZXJ0
eS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NzI3MQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICAKICAgICByZXR1cm4g
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBzdHJ1Y3R1cmUuc2V0KCksIG9mZnNldCk7CiB9
CkBAIC0xMTY3LDE3ICsxMTk3LDkgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYgdgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+
bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpOwotICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6ZSgpOyBqLS07KQotICAgICAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRl
cihzZXRbal0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gbWFyayBh
bnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAotICAgICAg
ICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJl
J3MuIERvbid0IG5lZWQgdG8gbWFyayB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2FsbExp
bmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRCeU9mZnNldCBpZiBhbnkg
b2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0LgotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUt
Pm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IGdldENhc2Uuc2V0KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHN0cnVjdHVy
ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSwxNSBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZElkZW50
aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQogICAg
IERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBtX3BsYW4ud2F0Y2hw
b2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBrZXkgaXMgYWxyZWFk
eSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEgUHJlc2VuY2UgY29uZGl0aW9u
LAorICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBxdWVyeSBpZiB0aGUgY29uZGl0
aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mga25vd3MKKyAgICAvLyB3aGF0
J3MgZ29pbmcgb24uCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYpOworCisgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5n
IGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMg
aXMKKyAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNr
IHdpdGggd2F0Y2hDb25kaXRpb24oKS4KKyAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCog
YmFzZSwgUHJvcGVydHlPZmZzZXQpOworICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBs
aXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5l
c3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkBAIC04NDQsNiArODUzLDcgQEAgcHVibGlj
OgogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRh
OwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxp
dmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3Rk
Ojp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5dGVjb2RlS2lsbHM7CisgICAgSGFzaFNl
dDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKICAg
ICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9z
dE51bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRh
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgR2V0QnlP
ZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoiKTsKKyAgICBzd2l0
Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCI8bm9u
ZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5w
cmludChwb2ludGVyRHVtcEluQ29udGV4dChjb25zdGFudCgpLCBjb250ZXh0KSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQu
cHJpbnQob2Zmc2V0KCksICJAIiwgcG9pbnRlckR1bXBJbkNvbnRleHQocHJvdG90eXBlKCksIGNv
bnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBHZXRCeU9mZnNldE1l
dGhvZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQo
b3V0LCBudWxscHRyKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSwgIjoiLCBpbkNvbnRleHQobV9t
ZXRob2QsIGNvbnRleHQpKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRy
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgR2V0QnlPZmZzZXRNZXRob2Q6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICBvdXQu
cHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlPZmZzZXRN
ZXRob2Q6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICBvdXQu
cHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRo
b2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGcm9tUHJvdG90
eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKyNkZWZpbmUgREZHTXVsdGlH
ZXRCeU9mZnNldERhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJEdW1w
Q29udGV4dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRnJvemVuVmFs
dWU7CisKK2NsYXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQg
eworICAgICAgICBJbnZhbGlkLAorICAgICAgICBDb25zdGFudCwKKyAgICAgICAgTG9hZCwKKyAg
ICAgICAgTG9hZEZyb21Qcm90b3R5cGUKKyAgICB9OworICAgIAorICAgIEdldEJ5T2Zmc2V0TWV0
aG9kKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFudChGcm96ZW5WYWx1ZSogdmFsdWUpCisg
ICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3RhbnQgPSB2YWx1ZTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEdldEJ5T2Zmc2V0
TWV0aG9kIGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0QnlP
ZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZDsKKyAgICAg
ICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBsb2FkRnJvbVByb3Rv
dHlwZShGcm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAg
eworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBMb2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5wcm90b3R5cGUg
PSBwcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkOyB9CisgICAgCisgICAgS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAg
ICAgICByZXR1cm4gdS5jb25zdGFudDsKKyAgICB9CisgICAgCisgICAgRnJvemVuVmFsdWUqIHBy
b3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWRGcm9t
UHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5wcm90b3R5cGU7CisgICAgfQorICAg
IAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IExvYWQgfHwga2luZCgpID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAg
ICAgcmV0dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHVuaW9uIHsKKyAgICAgICAg
RnJvemVuVmFsdWUqIGNvbnN0YW50OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRnJv
emVuVmFsdWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
KyAgICAgICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1fa2luZDsKK307CisKK2NsYXNz
IE11bHRpR2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZShjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCkKKyAgICAg
ICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzZXQoKSB7IHJldHVybiBtX3NldDsgfQorICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25z
dCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRob2Q7IH0K
KyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFN0cnVjdHVyZVNldCBtX3NldDsKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBtX21ldGhvZDsK
K307CisKK3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2VzOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9k
OjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXBvY2guaCIKICNpbmNsdWRl
ICJERkdMYXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgi
CiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgog
I2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwxMSArNjYsNiBAQCBzdHJ1Y3QgU3RvcmFn
ZUFjY2Vzc0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiB9OwogCi1zdHJ1
Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgewotICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7
Ci0gICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKLX07Ci0KIHN0cnVjdCBN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKICAg
ICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4NzQ4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjgsMTAgKzMyOCwxOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRl
ckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CisKKyAgICAgICAg
aWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVk
KSB7CisgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9IG5vZGUtPmNoaWxkMSgp
LT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAgICAgICAgICAgICAgIGlm
IChncmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAgaWYgKHZhbHVlLmlzSW5maW5pdGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgaWYgKCF2YWx1ZVtpXS0+
aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTM0MSw0MiArMzQ5LDI4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3QKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIC8vIFdl
IGNhbid0IGFsd2F5cyBndWFyYW50ZWUgdGhhdCB0aGUgTXVsdGlHZXRCeU9mZnNldCBpcyBzYWZl
IHRvIGV4ZWN1dGUgaWYgaXQKLSAgICAgICAgLy8gY29udGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5
cGVzLiBXZSBrbm93IHRoYXQgaXQgd29uJ3QgbG9hZCBmcm9tIHRob3NlIHByb3RvdHlwZXMgaWYK
LSAgICAgICAgLy8gd2Ugd2F0Y2ggdGhlIG11dGFiaWxpdHkgb2YgdGhlIHByb3BlcnRpZXMgYmVp
bmcgbG9hZGVkLiBTbywgaGVyZSB3ZSB0cnkgdG8KLSAgICAgICAgLy8gY29uc3RhbnQtZm9sZCBw
cm90b3R5cGUgbG9hZHMsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSBjbGFpbSB0aGF0IHdlIGNhbm5v
dCBob2lzdC4gV2UKLSAgICAgICAgLy8gYWxzbyBrbm93IHRoYXQgYSBsb2FkIGlzIHNhZmUgdG8g
ZXhlY3V0ZSBpZiB3ZSBhcmUgd2F0Y2hpbmcgdGhlIHByb3RvdHlwZSdzCi0gICAgICAgIC8vIHN0
cnVjdHVyZS4KLSAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMpIHsKLSAgICAgICAgICAgIGlmICgh
dmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBh
IHByb3RvdHlwZSBsb2FkLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJhc2UgPSB2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBncmFwaC5mcmVl
emUoYmFzZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkg
PT0gU3RydWN0dXJlc0FyZVdhdGNoZWQKLSAgICAgICAgICAgICAgICAmJiBmcm96ZW4tPnN0cnVj
dHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpCi0gICAgICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1
Y3R1cmUoKS0+aXNWYWxpZE9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkgewotICAgICAgICAgICAg
ICAgIC8vIFdlJ3JlIGFscmVhZHkgd2F0Y2hpbmcgdGhhdCBpdCdzIHNhZmUgdG8gbG9hZCBmcm9t
IHRoaXMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPSBncmFwaC50cnlHZXRD
b25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
LCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgY29u
c3RhbnQtZm9sZCBhIHByb3RvdHlwZSBsb2FkLiBUaGVyZWZvcmUsIHdlIHNob3VsZG4ndCBob2lz
dAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHNhZmV0eSBvZiB0aGUgbG9hZCBkZXBl
bmRzIG9uIHN0cnVjdHVyZSBjaGVja3Mgb24gdGhlIHByb3RvdHlwZSwKLSAgICAgICAgICAgICAg
ICAvLyBhbmQgd2UncmUgdG9vIGNoZWFwIHRvIHZlcmlmeSB0aGF0IGhlcmUuCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBjb250YWlucyBsb2FkcyBmcm9tIHByb3Rv
dHlwZXMuIElmIHRoZSBsb2FkIHJlcXVpcmVzIGEgY2hlY2sgaW4gSVIsIHdoaWNoIGlzIHJhcmUs
IHRoZW4KKyAgICAgICAgLy8gd2UgY3VycmVudGx5IGNsYWltIHRoYXQgd2UgZG9uJ3Qga25vdyBp
ZiBpdCdzIHNhZmUgdG8gZXhlY3V0ZSBiZWNhdXNlIGZpbmRpbmcgdGhhdAorICAgICAgICAvLyBj
aGVjayBpbiB0aGUgYWJzdHJhY3Qgc3RhdGUgd291bGQgYmUgaGFyZC4gSWYgdGhlIGxvYWQgcmVx
dWlyZXMgd2F0Y2hwb2ludHMsIHdlIGp1c3QKKyAgICAgICAgLy8gY2hlY2sgaWYgd2UncmUgbm90
IGluIGEgY2xvYmJlcmVkIHN0YXRlIChpLmUuIGluIGJldHdlZW4gYSBzaWRlIGVmZmVjdCBhbmQg
YW4KKyAgICAgICAgLy8gaW52YWxpZGF0aW9uIHBvaW50KS4KKyAgICAgICAgZm9yIChjb25zdCBN
dWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkuY2FzZXMpIHsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IGdldENh
c2UubWV0aG9kKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OiAvLyBPSyBiZWNhdXNl
IGNvbnN0YW50cyBhcmUgYWx3YXlzIHNhZmUgdG8gZXhlY3V0ZS4KKyAgICAgICAgICAgIGNhc2Ug
R2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6IC8vIE9LIGJlY2F1c2UgdGhlIE11bHRpR2V0QnlPZmZz
ZXQgaGFzIGl0cyBvd24gY2hlY2tzIGZvciBsb2FkaW5nIGZyb20gc2VsZi4KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9t
UHJvdG90eXBlOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgT0sgaWYgdGhlIHN0YXRlIGlzbid0
IGNsb2JiZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2UuCisgICAgICAgICAgICAg
ICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpICE9IFN0cnVjdHVyZXNBcmVXYXRj
aGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
aWYgKCFncmFwaC5pc1NhZmVUb0xvYWQobWV0aG9kLnByb3RvdHlwZSgpLT5jYXN0PEpTT2JqZWN0
Kj4oKSwgbWV0aG9kLm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwgZWl0aGVyOgotICAgICAgICAgICAgLy8g
LSBOb3QgbG9hZCBmcm9tIHRoZSBwcm90b3R5cGUgYmVjYXVzZSBjb25zdGFudCBmb2xkaW5nIHdp
bGwgc3VjY2VlZCBpbiB0aGUKLSAgICAgICAgICAgIC8vICAgYmFja2VuZCwgb3IKLSAgICAgICAg
ICAgIC8vIC0gRW1pdCBpbnZhbGlkIGNvZGUgdGhhdCBmYWlscyB3YXRjaHBvaW50IGNoZWNrcy4g
VGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlCi0gICAgICAgICAgICAvLyAgIHByb3BlcnR5IGJlY29t
ZXMgbXV0YWJsZSBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB3ZSBhbHJlYWR5IHNldCB0aGUgd2F0
Y2hwb2ludAotICAgICAgICAgICAgLy8gICBhYm92ZS4gVGhpcyBjYXNlIGlzIE9LIHNpbmNlIHRo
ZSBjb2RlIHdpbGwgZmFpbCB3YXRjaHBvaW50IGNoZWNrcyBhbmQgbmV2ZXIKLSAgICAgICAgICAg
IC8vICAgZ2V0IGluc3RhbGxlZC4KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg3NDg4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2Ug
TXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlZ2lzdGVyU3RydWN0dXJlcyh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVj
dHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0
byB3YXRjaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJl
Y2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZXMoZ2V0Q2FzZS5zZXQoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg3NDg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4NzAsMjQgKzM4NzAsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5tdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpOwogCi0gICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLmlzRW1wdHkoKSkgeworICAgICAg
ICBpZiAoZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFByb3RlY3QgYWdh
aW5zdCBjcmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRoIHplcm8gaW5wdXRzLiBMTFZNIGRvZXNu
J3QgbGlrZSB0aGF0LgogICAgICAgICAgICAgdGVybWluYXRlKEJhZENhY2hlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Js
b2NrLCAyPiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKKyAgICAgICAgVmVjdG9yPExCYXNp
Y0Jsb2NrLCAyPiBibG9ja3MoZGF0YS5jYXNlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgIGJsb2Nrc1tpXSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBjYXNlICIsIGkpKTsKICAg
ICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRC
eU9mZnNldCBmYWlsIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY29udGludWF0aW9uIikpOwogICAg
ICAgICAKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBTdHJ1
Y3R1cmVTZXQgYmFzZVNldDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBk
YXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKS5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KClbal07CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNlLnNldCgpW2pdOwogICAgICAgICAgICAg
ICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5k
KFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0
KDEpKSk7CiAgICAgICAgICAgICB9CkBAIC0zODk4LDI5ICszODk4LDM2IEBAIHByaXZhdGU6CiAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CiAgICAgICAg
IAogICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEu
Y2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBn
ZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1l
dGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNpemUoKSA/IGJsb2Nrc1tp
ICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQg
dmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHZh
cmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsKLSAgICAg
ICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQ7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5h
bHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdGFudFJlc3VsdCA9IG1fZ3Jh
cGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5h
bHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb25zdGFudFJlc3VsdCkKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShjb25z
dGFudFJlc3VsdCkpOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUobWV0aG9kLmNvbnN0YW50
KCktPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogewogICAgICAgICAgICAg
ICAgIExWYWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0
ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9p
bnRlcih2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2Fk
KQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBiYXNlOwotICAgICAgICAgICAg
ICAgIGlmICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlciht
ZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIGlm
ICghaXNJbmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJhc2UsIG1faGVhcHMuSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkocHJv
cGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQcm9wZXJ0eSgKKyAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIG1ldGhv
ZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHJlc3Vs
dCkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyAr
MTA1LDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5j
dGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBhY3QpCiB7Ci0gICAgaWYg
KHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMo
KSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAg
ICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0NyArMTMyLDMzIEBAIHN0
YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgogfQogCi1zdGF0aWMgdm9p
ZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBvYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAogICAgIE1hY3JvQXNzZW1ibGVy
JiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2Ny
YXRjaEdQUikKIHsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYg
c3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7Ci0gICAg
ICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hw
b2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAg
ICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0
aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgICAgICAvLyB0aGlzIGluIGRl
YnVnIG1vZGVzLgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBqaXQsCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGppdC5hYm9ydFdpdGhS
ZWFzb24oUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2ludCk7Ci0gICAgICAgICAgICBvay5saW5r
KCZqaXQpOwotICAgICAgICB9CisgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgY29uZGl0aW9uLm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCisgICAgICAgICAgICBzdHVi
SW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNv
bmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0
aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KHN0cnVjdHVyZSkpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoCi0gICAgICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3Ry
dWN0dXJlKSk7CisgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7
CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1Zh
bHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQsIENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCiAgICAgTWFjcm9Bc3NlbWJsZXImIGpp
dCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNo
R1BSKQogewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1
cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LAotICAgICAg
ICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBjaGVja09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZv
LCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQogfQogCiBzdGF0aWMgdm9p
ZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQpA
QCAtMjk2LDExICsyODIsMTIgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQ
dXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIEV4ZWNTdGF0ZSogZXhl
YywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAg
ICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0
dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0KiB3YXRj
aHBvaW50U2V0LAogICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0
aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRp
bmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworICAgIAogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1Zh
bHVlUmVncygKQEAgLTM0NiwzNyArMzMzLDMxIEBAIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0
dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNX
YXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQog
ICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlO
YW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCiAgICAgaWYgKHdhdGNo
cG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0
dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGlmIChjaGFpbikgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAg
ICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JM
b29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHBy
b3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+
dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAg
ICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlO
YW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAgYWRk
U3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvT2JqZWN0LCBw
cm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAg
ICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVy
ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoIXByb3RvT2JqZWN0IHx8
IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKKyAgICBjaGVja09i
amVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9uU2V0LCBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworCisgICAgaWYg
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1
cmU7CisgICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY3Vy
clN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VyclN0
cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1
Y3R1cmUoKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9y
UmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAgICB9CiAgICAgCi0gICAgY3VyclN0cnVjdHVy
ZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAg
ICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKGtpbmQg
IT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xv
YmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNl
R1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJv
eHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7Ci0g
ICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJv
dG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5v
YmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNj
cmF0Y2hHUFI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBGb3IgcHJveHkgb2Jq
ZWN0cywgd2UgbmVlZCB0byBkbyBhbGwgdGhlIFN0cnVjdHVyZSBjaGVja3MgYmVmb3JlIG1vdmlu
ZyB0aGUgYmFzZUdQUiBpbnRvCkBAIC02MjcsOSArNjA4LDggQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIGFjdGlvbkZvckNlbGwoVgogICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3Qodm0pOwogICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAg
IH0KLSAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAg
ICAgCi0gICAgaWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0
eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKIAogICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsKQEAgLTgyNywyMSAr
ODA3LDIyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICB9
CiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRP
ZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgCiAgICAgaWYgKHNsb3QuaXNVbnNl
dCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgaWYgKHR5cGVJ
bmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgICAgICBpZiAoc2xv
dC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWlu
KGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcygKLSAgICAg
ICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNl
dCk7Ci0gICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0
eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwg
c2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworCisgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAg
ICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisKKyAg
ICAgICAgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0
dWJJbmZvKTsKQEAgLTg1Miw3ICs4MzMsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
QnVpbGRHZXRCeUlECiAgICAgCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZTsKICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtp
bmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVD
aGFpbiwgY291bnQsIG9mZnNldCwgCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50
LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIG9mZnNldCwgCiAgICAg
ICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCks
IAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAt
ODcxLDcgKzg1Miw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQK
ICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3Ry
dWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAgY29uZGl0
aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTMsMjYgKzk3NCwyOCBAQCBz
dGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShF
eGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29sIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJl
KiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsK
LSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xk
U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5T2Zm
c2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUs
IGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUg
fHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8
ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAgb3B0aW1p
emluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQog
ICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYgKEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAg
ICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNraXAgb3B0
aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJl
IGhhcwpAQCAtMTAyMCwxNCArMTAwMywxNCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJh
bnNpdGlvblN0dWJBCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxl
bWVudCBpdCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMwOTE0CiAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hh
aW4oZXhlYywgc3RydWN0dXJlKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3Ry
dWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgLy8gZW1pdFB1dFRyYW5zaXRpb25TdHViCisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0
KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
U2V0dGVyTWlzcygKKyAgICAgICAgICAgICp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhl
Y3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZv
LnN0dWJSb3V0aW5lOwpAQCAtMTA4MywxNyArMTA2Niw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG9sZFN0cnVjdHVy
ZSkpOwogICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgb2xk
U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
ICAgIAotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3IgKFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytp
dCkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEp
OwotICAgICAgICB9Ci0gICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAor
ICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd1BhdGg7CiAgICAgCkBAIC0xMjI4LDcgKzEyMDIsNyBAQCBzdGF0aWMgU3RydWN0
dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRvci5k
aWRSZXVzZVJlZ2lzdGVycygpKQpAQCAtMTI1Niw4ICsxMjMwLDggQEAgc3RhdGljIFN0cnVjdHVy
ZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCkt
Pm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAgICAgICAg
IHN0cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gb2xkU3RydWN0dXJlOworICAgIAorICAgIHJldHVy
biB0cnVlOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTEyODEsMTIgKzEy
NTUsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgIGlm
IChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAg
ICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7
CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRp
b25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0
VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVy
ZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7
Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTEyOTQs
NyArMTI2Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBE
aXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEyLDIwICsxMjg1LDIy
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgJiYg
c3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBw
cm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChi
YXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgp
LCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90
eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNl
KCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCks
IGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90
b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9m
ZnNldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVk
T2Zmc2V0KCk7CisKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAgICAg
ICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8p
OwogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAg
IGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBw
cm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBp
ZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LAogICAgICAgICAg
ICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLApAQCAtMTMzNiw3
ICsxMzExLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAg
ICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0Nh
Y2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6
Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291
bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsK
IAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTM4MCwxNyArMTM1NSwxNiBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgICAgICBpZiAo
bGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8v
IFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAotICAgICAgICAgICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUo
ZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2lu
ZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKSAKKyAgICAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIo
ZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2lu
ZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hh
aW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgc3R1YlJv
dXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgICAgIGxpc3QtPmFkZEFjY2Vz
cygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAogICAgICAgICAg
ICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAg
ICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAg
ICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwKICAg
ICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICB9IGVsc2UgewpAQCAt
MTQyMywyMSArMTM5NywyNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRC
eUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNw
aWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAg
ICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3Vu
dCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAg
ICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBz
dHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7Ci0gICAgICAgICAg
ICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsK
KyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2Uo
KSwKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IGNvbmRp
dGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAg
ICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBo
aWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90
KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFp
biwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUs
IGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgIG9m
ZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1Bh
dGhUYXJnZXQoKSksCkBAIC0xNDQ4LDcgKzE0MjYsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNz
OjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
CiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpT
ZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRp
bmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNl
dHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
SnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBA
IC0xNDg3LDExICsxNDY1LDE3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNo
SW4oCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJ
Z25vcmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90QmFzZSA9IHdhc0ZvdW5kID8gc2xvdC5zbG90
QmFzZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVfdCBjb3VudCA9ICFmb3VuZFNsb3RCYXNlIHx8
IGZvdW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAgICAgICBub3JtYWxpemVQcm90b3R5cGVDaGFp
bkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgZm91bmRTbG90QmFzZSwgaWRlbnQsIG9m
ZnNldElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAo
d2FzRm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7CisgICAg
ICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9w
ZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgfQorICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CiAgICAgCiAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3Q7CkBAIC0xNTE2LDcgKzE1MDAsNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAg
ICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oZXhlYyk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsK
ICAgICAKICAgICB7CkBAIC0xNTQ3LDE4ICsxNTMwLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgpKQogICAg
ICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50
KGNvZGVCbG9jaykpOwogCi0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQo
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsK
LSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90
b1N0cnVjdHVyZSA9IHByb3RvdHlwZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBhZGRTdHJ1
Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b1N0
cnVjdHVyZSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAg
ICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpZiAocHJvdG9T
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkp
Ci0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5
KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAg
Y3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQorICAgICAgICBjaGVja09iamVj
dFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwog
ICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5k
KSkpLCByZXN1bHRHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE4NzQ4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2su
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIK
LSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1JbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIDogbV9nbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUocHJvdG90eXBlKQotewotICAgIEFTU0VS
VChtX3Byb3RvdHlwZS5pc051bGwoKSB8fCBtX3Byb3RvdHlwZS5pc09iamVjdCgpKTsKLSAgICBp
ZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1
cmUqIGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKTsgY3VycmVudDsg
Y3VycmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpKQotICAgICAgICBt
X3ZlY3Rvci5hcHBlbmQoY3VycmVudCk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46Oklu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBoZWFkKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9w
cm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAg
ICBpZiAobV9wcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKFN0
cnVjdHVyZSogY3VycmVudCA9IGFzT2JqZWN0KG1fcHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1
cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAg
ICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlKQotICAgIDogbV9nbG9iYWxP
YmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQt
PnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgbV92ZWN0b3IuYXBw
ZW5kKHByb3RvdHlwZVN0cnVjdHVyZSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46Oklu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVh
ZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxv
b2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgY2hhaW4t
PmhlYWQoKVtpXTsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtp
XS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJl
Q2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JM
b29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQo
KSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KCkKLXsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjppc1N0aWxsVmFsaWQoKSBj
b25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSktPnN0cnVjdHVyZSgpICE9IG1fdmVjdG9y
W2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50UHJvdG90eXBl
ID0gbV92ZWN0b3JbaV0tPnN0b3JlZFByb3RvdHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXRjaGVzKFN0cnVjdHVyZUNo
YWluKiBjaGFpbikgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0
b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmVjdG9yW2ldICE9IGNoYWluLT5oZWFk
KClbaV0uZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChj
aGFpbi0+aGVhZCgpW21fdmVjdG9yLnNpemUoKV0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJbnRl
cmNlcHRTdG9yZVRvKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5n
ZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3JtYWxpemVkKCkKLXsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94
eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGFrZXNTbG93UGF0
aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJ
bXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotSlNPYmplY3QqIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRlcm1p
bmFsUHJvdG90eXBlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fdmVjdG9yLmlzRW1wdHkoKSk7
Ci0gICAgaWYgKG1fdmVjdG9yLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gYXNPYmplY3Qo
bV9wcm90b3R5cGUpOwotICAgIHJldHVybiBhc09iamVjdChtX3ZlY3RvclttX3ZlY3Rvci5zaXpl
KCkgLSAyXS0+c3RvcmVkUHJvdG90eXBlKCkpOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJl
Q2hhaW46Om9wZXJhdG9yPT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0
Ci0gICAgICAgICYmIG1fcHJvdG90eXBlID09IG90aGVyLm1fcHJvdG90eXBlCi0gICAgICAgICYm
IG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJl
Q2hhaW46OmdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3Ip
IGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSBjdXJyZW50UHJvdG90eXBlID0gbV9wcm90b3R5cGU7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBjdXJyZW50T2JqZWN0ID0gYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSk7Ci0gICAgICAg
IFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGF0KGkpOwotICAgICAgICB2ZWN0b3IuYXBw
ZW5kKENvbnN0YW50U3RydWN0dXJlQ2hlY2soY3VycmVudE9iamVjdCwgY3VycmVudFN0cnVjdHVy
ZSkpOwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0gY3VycmVudFN0cnVjdHVyZS0+cHJvdG90
eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmbV9nbG9iYWxPYmplY3QpOwotICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmbV9wcm90b3R5cGUpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKLSAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fdmVjdG9yW2ldKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcElu
Q29udGV4dChvdXQsIDApOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgb3V0LnByaW50KAotICAgICAgICAiKGdsb2JhbCA9ICIsIFJhd1BvaW50ZXIobV9nbG9i
YWxPYmplY3QpLCAiLCBoZWFkID0gIiwKLSAgICAgICAgaW5Db250ZXh0KG1fcHJvdG90eXBlLCBj
b250ZXh0KSwgIiwgdmVjdG9yID0gWyIpOwotICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91
dC5wcmludChjb21tYSwgcG9pbnRlckR1bXBJbkNvbnRleHQobV92ZWN0b3JbaV0sIGNvbnRleHQp
KTsKLSAgICBvdXQucHJpbnQoIl0pIik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faAotI2RlZmluZSBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluX2gKLQotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1j
bGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFZNOwotc3RydWN0IER1bXBDb250ZXh0OwotCi1j
bGFzcyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbj4gewotcHVibGljOgotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
Kik7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4pOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1
bnNpZ25lZCBjb3VudCk7Ci0gICAgfkludGVuZGVkU3RydWN0dXJlQ2hhaW4oKTsKLSAgICAKLSAg
ICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlcyhTdHJ1Y3R1cmVD
aGFpbiopIGNvbnN0OwotICAgIGJvb2wgbWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKTsKLSAgICBib29sIGlzTm9ybWFsaXplZCgpOwotICAgIAotICAgIGJvb2wgdGFr
ZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKTsKLSAgICAKLSAgICBKU1ZhbHVlIHBy
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9Ci0gICAgCi0gICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KLSAgICBTdHJ1Y3R1cmUq
IGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOyB9Ci0gICAg
U3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5k
ZXgpOyB9Ci0gICAgCi0gICAgSlNPYmplY3QqIHRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3Q7Ci0g
ICAgCi0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IubGFzdCgp
OyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hh
aW4mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZ2F0aGVyQ2hlY2tzKENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIAotcHJp
dmF0ZToKLSAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7Ci0gICAgSlNWYWx1ZSBt
X3Byb3RvdHlwZTsKLSAgICBWZWN0b3I8U3RydWN0dXJlKj4gbV92ZWN0b3I7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTg3NDg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTQsNDggKzE5NCw2IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBq
c0FkZChDYWxsRnJhbWUqIGMKIAogI2RlZmluZSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4gKHN0ZDo6
bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCiAKLWlubGluZSBzaXplX3Qgbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIHNsb3RPZmZzZXQpCi17Ci0gICAgVk0mIHZtID0gY2Fs
bEZyYW1lLT52bSgpOwotICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIAotICAgIHdoaWxl
ICgxKSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBJbnZhbGlkUHJvdG90eXBlQ2hhaW47Ci0KLSAgICAgICAgY29uc3QgVHlwZUluZm8mIHR5
cGVJbmZvID0gc3RydWN0dXJlLT50eXBlSW5mbygpOwotICAgICAgICBpZiAodHlwZUluZm8uaGFz
SW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5
RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90b3R5cGVD
aGFpbjsKLSAgICAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIHYgPSBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChjYWxsRnJhbWUpOwotCi0gICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5k
IHNsb3RCYXNlIGluIHRoZSBiYXNlJ3MgcHJvdG90eXBlIGNoYWluLCB0aGVuIHRoZSBiYXNlCi0g
ICAgICAgIC8vIG11c3QgYmUgYSBwcm94eSBmb3IgYW5vdGhlciBvYmplY3QuCi0KLSAgICAgICAg
aWYgKHYuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmICghc2xvdEJhc2UpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFByb3RvdHlwZUNoYWluOwot
ICAgICAgICB9Ci0KLSAgICAgICAgSlNDZWxsKiBjZWxsID0gdi5hc0NlbGwoKTsKLSAgICAgICAg
c3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgLy8gU2luY2Ugd2UncmUg
YWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQK
LSAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgIHN0cnVjdHVy
ZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGFzT2JqZWN0KGNlbGwpKTsKLSAgICAg
ICAgICAgIGlmIChzbG90QmFzZSA9PSBjZWxsKQotICAgICAgICAgICAgICAgIHNsb3RPZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lKTsgCi0gICAgICAgIH0KLSAgICAgICAg
Kytjb3VudDsKLQotICAgICAgICBpZiAoc2xvdEJhc2UgPT0gY2VsbCkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIGNvdW50OwotfQotCiBpbmxpbmUgc2l6
ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKENhbGxGcmFtZSogY2FsbEZyYW1lLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CkBAIC0yNTgs
MjMgKzIxNiw2IEBAIGlubGluZSBzaXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oQ2EKICAg
ICB9CiB9CiAKLWlubGluZSBib29sIGlzUHJvdG90eXBlQ2hhaW5Ob3JtYWxpemVkKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIGZvciAo
OzspIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIGlmICh2LmlzTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgc3RydWN0
dXJlID0gdi5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE9wZXJhdGlvbnNfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZp
c2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIGVsc2UKICAgICAgICAgbWF4VHJhbnNpdGlvbkxl
bmd0aCA9IHNfbWF4VHJhbnNpdGlvbkxlbmd0aDsKICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0
aW9uQ291bnQoKSA+IG1heFRyYW5zaXRpb25MZW5ndGgpIHsKLSAgICAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUgIT0gdHJhbnNpdGlvbik7CiAgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb247
CkBAIC00ODksMTEgKzQ4OSwxMSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hh
bmdlVHJhCiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGlj
dGlvbmFyeUtpbmQga2luZCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlLaW5kIGtpbmQs
IERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsK
ICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAg
Ci0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7
CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwpAQCAtNTA3LDkgKzUwNyw5
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2kKICAgICByZXR1cm4g
dHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlv
bmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSog
U3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJl
KiBkZWZlcnJlZCkKIHsKLSAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCk7CisgICAgcmV0dXJuIHRvRGljdGlvbmFyeVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSwgQ2FjaGVkRGljdGlvbmFyeUtpbmQsIGRlZmVycmVkKTsK
IH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNp
dGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNzYxLDYgKzc2MSwxMCBAQCB2
b2lkIFN0cnVjdHVyZTo6YWxsb2NhdGVSYXJlRGF0YShWTSYgdm0pCiBXYXRjaHBvaW50U2V0KiBT
dHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFZNJiB2bSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIEFTU0VSVCghaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSk7CisKKyAgICAvLyBJbiBzb21lIHBsYWNlcyBpdCdzIGNvbnZlbmllbnQgdG8gY2Fs
bCB0aGlzIHdpdGggYW4gaW52YWxpZCBvZmZzZXQuIFNvLCB3ZSBkbyB0aGUgY2hlY2sgaGVyZS4K
KyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAgICAgICBhbGxvY2F0ZVJhcmVEYXRh
KHZtKTsKQEAgLTc4MSwxMSArNzg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQ
cm9wZXJ0eUZvcgogewogICAgIEFTU0VSVCghaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAg
ICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpOwot
ICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCk7
CisgICAgc3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBnZXQodm0sIHBy
b3BlcnR5TmFtZSkpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxh
Y2VtZW50KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpAQCAtMTExNyw2ICsxMTE3LDE3
IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKICAgICAKICAgICBp
ZiAobV9wcm90b3R5cGUuZ2V0KCkuaXNDZWxsKCkpCiAgICAgICAgIG91dC5wcmludCgiLCBQcm90
bzoiLCBSYXdQb2ludGVyKG1fcHJvdG90eXBlLmdldCgpLmFzQ2VsbCgpKSk7CisKKyAgICBzd2l0
Y2ggKGRpY3Rpb25hcnlLaW5kKCkpIHsKKyAgICBjYXNlIE5vbmVEaWN0aW9uYXJ5S2luZDoKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWREaWN0aW9uYXJ5S2luZDoKKyAgICAgICAgb3V0
LnByaW50KCIsIERpY3Rpb25hcnkiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmNhY2hl
ZERpY3Rpb25hcnlLaW5kOgorICAgICAgICBvdXQucHJpbnQoIiwgVW5jYWNoZWFibGVEaWN0aW9u
YXJ5Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoIl0iKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZp
c2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDksIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjgs
NyArMTY4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5
VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQm
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5
cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRp
b24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlv
bmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3Ry
dWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVs
bHB0cik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0
cnVjdHVyZSogc2VhbFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJl
Kik7CkBAIC0xOTQsNyArMTk0LDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGljdGlvbmFyeSgp
IGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9
CiAgICAgYm9vbCBpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rp
b25hcnlLaW5kKCkgPT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZDsgfQogICAKLSAgICBib29sIHBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9
IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlD
YWNoaW5nKCk7IH0KKyAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0aW9uYXJ5
S2luZAorICAgICAgICAgICAgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
KCkKKyAgICAgICAgICAgICYmICEodHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNs
b3QoKSAmJiAhdHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSk7
CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCisg
ICAgeworICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAg
ICAgICAgICAmJiB0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpCisgICAg
ICAgICAgICAmJiB0eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygp
OworICAgIH0KIAogICAgIC8vIFdlIHVzZSBTbG93UGF0aCBpbiBHZXRCeUlkU3RhdHVzIGZvciBz
dHJ1Y3R1cmVzIHRoYXQgbWF5IGdldCBuZXcgaW1wdXJlIHByb3BlcnRpZXMgbGF0ZXIgdG8gcHJl
dmVudAogICAgIC8vIERGRyBmcm9tIGlubGluaW5nIHByb3BlcnR5IGFjY2Vzc2VzIHNpbmNlIHN0
cnVjdHVyZXMgZG9uJ3QgdHJhbnNpdGlvbiB3aGVuIGEgbmV3IGltcHVyZSBwcm9wZXJ0eSBhcHBl
YXJzLgpAQCAtMjAyLDcgKzIxNCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiB0
eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpOwogICAgIH0KLQorICAgIAog
ICAgIC8vIFR5cGUgYWNjZXNzb3JzLgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyBB
U1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJldHVybiBtX2Jsb2Iu
dHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQpAQCAtNTI4LDcgKzU0MCw3IEBA
IHByaXZhdGU6CiAgICAgLy8gdG8gdW5sb2NrIGl0LgogICAgIHZvaWQgZmluZFN0cnVjdHVyZXNB
bmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oVmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVz
LCBTdHJ1Y3R1cmUqJiwgUHJvcGVydHlUYWJsZSomKTsKICAgICAKLSAgICBzdGF0aWMgU3RydWN0
dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtp
bmQpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJl
bW92ZShQcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAxODc0ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MzYsNiArNTM2LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJXYXRjaHBv
aW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYsIFdhdGNocG9pbnQqKTsKKyAg
ICAKICAgICAvLyBGSVhNRTogVXNlIEF0b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0
aCBJZGVudGlmaWVyLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVy
dHkoY29uc3QgU3RyaW5nJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtd2l0aG91dC1m
b2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hlY2stbmV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdl
dC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hlY2stbmV3LmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11
bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0
cnVjdHVyZS1jaGVjay1uZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorZnVu
Y3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitmdW5jdGlvbiBiYXIobykgewor
ICAgIHJldHVybiBvLmc7Cit9CisKK2Z1bmN0aW9uIGJheihvLCBwLCBxKSB7CisgICAgdmFyIHJl
c3VsdCA9IDA7CisgICAgaWYgKGlzRmluYWxUaWVyKCkpIHsKKyAgICAgICAgcCA9IG87CisgICAg
ICAgIHEgPSBvOworICAgICAgICByZXN1bHQgKz0gMTAwMDA7CisgICAgfQorICAgIHJlc3VsdCAr
PSBmb28ocCk7CisgICAgcmVzdWx0ICs9IGJhcihxKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citub0lubGluZShiYXopOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7Cisg
ICAgdmFyIG8sIHAsIHE7CisgICAgdmFyIGV4cGVjdGVkMTsKKyAgICB2YXIgZXhwZWN0ZWQyOwor
ICAgIG8gPSB7ZjoxMDAsIGc6MTAxfTsKKyAgICBleHBlY3RlZDIgPSAxMDAwMCArIDEwMCArIDEw
MTsKKyAgICBpZiAoaSAmIDEpIHsKKyAgICAgICAgcCA9IHtlOjEsIGY6MiwgZzozfTsKKyAgICAg
ICAgcSA9IHtlOjQsIGY6NSwgZzo2fTsKKyAgICAgICAgZXhwZWN0ZWQxID0gMiArIDY7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcCA9IHtmOjcsIGc6OH07CisgICAgICAgIHEgPSB7Zzo5LCBmOjEw
fTsKKyAgICAgICAgZXhwZWN0ZWQxID0gNyArIDk7CisgICAgfQorICAgIHZhciByZXN1bHQgPSBi
YXoobywgcCwgcSk7CisgICAgaWYgKHJlc3VsdCAhPSBleHBlY3RlZDEgJiYgcmVzdWx0ICE9IGV4
cGVjdGVkMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0ICsg
IiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkMSArICIgb3IgIiArIGV4cGVjdGVkMiArICIpIjsKK30K
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRlZmluZWQtYWNj
ZXNzLWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2UuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLWRpY3Rpb25hcnkt
dGhlbi1wcm90by1jaGFuZ2UuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3MtZGljdGlvbmFyeS10aGVuLXByb3RvLWNo
YW5nZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBmb28oKSB7
CisgICAgdmFyIHAgPSB7fTsKKyAgICB2YXIgbyA9IHt9OworICAgIG8uX19wcm90b19fID0gcDsK
KyAgICB2YXIgcmVzdWx0OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAg
ICAgICAgcmVzdWx0ID0gby5mOworICAgICAgICBpZiAoaSA9PSA1MCkKKyAgICAgICAgICAgIHAu
ZiA9IDQyOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9v
KCk7CitpZiAocmVzdWx0ICE9IDQyKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiAr
IHJlc3VsdDsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRl
ZmluZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hhbmdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNo
YW5nZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE5IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisK
K25vSW5saW5lKGZvbyk7CisKK3ZhciBwID0ge307Cit2YXIgbyA9IE9iamVjdC5jcmVhdGUocCk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBm
b28obyk7CisgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQgaW4gbG9vcDogIiArIHJlc3VsdDsKK30KKworcC5mID0gNDI7Cit2YXIgcmVz
dWx0ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPT0gNDIpCisgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzU2NSkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisy
MDE1LTA3LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgREZH
IHNob3VsZCBoYXZlIGFkYXB0aXZlIHN0cnVjdHVyZSB3YXRjaHBvaW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2OTI5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbWljcm9iZW5jaG1hcmsg
dGhhdCBpbGx1c3RyYXRlcyB0aGUgbmVlZCBmb3IgdGhpcyBmZWF0dXJlLiBUaGlzIGJlbmNobWFy
ayBnZXRzIDU4eCBmYXN0ZXIgd2l0aAorICAgICAgICB0aGlzIGNoYW5nZS4KKworICAgICAgICAq
IGpzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13
aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmpz
OiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisKIDIwMTUtMDctMjkgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIHNwYW5uZXIgcGxhY2Vob2xkZXIg
ZnJvbSBtX3NwYW5uZXJNYXAgd2hlbiB0aGUgcGxhY2Vob2xkZXIgb2JqZWN0CkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5
cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJv
dG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1t
dXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKK0pTUmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBl
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGlu
Zy1wcm90b3R5cGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3By
b3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5n
LXByb3RvdHlwZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3Byb3RvdHlwZS1hY2Nlc3Mt
d2l0aC1tdXRhdGluZy1wcm90b3R5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vz
cy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJv
dG90eXBlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHZhciByZXN1
bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHJlc3Vs
dCArPSBvLmY7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFy
IHAgPSB7Zjo0Mn07Cit2YXIgbyA9IE9iamVjdC5jcmVhdGUocCk7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgIHBbImkiICsgaV0gPSBpOworICAgIHZhciByZXN1bHQg
PSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAqIDEwMCkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvdW5kZWZpbmVkLXByb3BlcnR5LWFjY2Vzcy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy91bmRlZmluZWQtcHJvcGVy
dHktYWNjZXNzLmpzCShyZXZpc2lvbiAxODc0ODgpCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy91bmRlZmluZWQtcHJvcGVydHktYWNjZXNzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0xMSw3ICsxMSw3IEBAIGZ1bmN0aW9uIGZvbygpIHsKIH0KIHJlc3VsdCA9IGZvbygpOwog
aWYgKHJlc3VsdCAhPSB1bmRlZmluZWQpCi0gICAgdGhyb3cgIkJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7CisgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKIAogLy8g
VGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGEgY2FjaGVkIHByb3BlcnR5IGxvb2t1cCBtaXNzIGRvZXNu
J3QgY29udGludWUgdG8gZmlyZSB3aGVuIHRoZSBwcm9wZXJ0eSBzdWRkZW5seSBhcHBlYXJzIG9u
IHRoZSBvYmplY3QuCiAKQEAgLTI2LDcgKzI2LDcgQEAgZnVuY3Rpb24gYmFyKCkgewogfQogdmFy
IHJlc3VsdCA9IGJhcigpOwogaWYgKHJlc3VsdCAhPSAxKQotICAgIHRocm93ICJCYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3Vs
dCk7CiBzb21lR2xvYmFsID0gdW5kZWZpbmVkOwogCiAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQg
YSBjYWNoZWQgcHJvcGVydHkgbG9va3VwIG1pc3MgZG9lc24ndCBjb250aW51ZSB0byBmaXJlIHdo
ZW4gdGhlIHByb3BlcnR5IHN1ZGRlbmx5IGFwcGVhcnMgb24gdGhlIG9iamVjdCdzIHByb3RvdHlw
ZS4KQEAgLTQ0LDUgKzQ0LDUgQEAgZnVuY3Rpb24gYmF6KCkgewogfQogdmFyIHJlc3VsdCA9IGJh
eigpOwogaWYgKHJlc3VsdCAhPSAyKQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257903</attachid>
            <date>2015-07-30 23:03:03 -0700</date>
            <delta_ts>2015-07-31 00:41:58 -0700</delta_ts>
            <desc>more improvements</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>315741</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2OSBA
QAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdhdGNoaW5nIGZvciBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbnMgCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0
QnlJZENhY2hlU3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFB1dEJ5SWRD
YWNoZVN0YXR1cyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50
OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAg
KiBieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmg6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRT
dGF0dXM6OkNvbXBsZXhHZXRTdGF0dXMpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVz
Ojp0YWtlc1Nsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6a2luZCk6
CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6Om9mZnNldCk6CisgICAgICAgIChKU0M6
OkNvbXBsZXhHZXRTdGF0dXM6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkNvbXBsZXhH
ZXRTdGF0dXM6OmF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0
U3RhdHVzOjpzcGVjaWZpY1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdl
dFN0YXR1czo6Y2hhaW4pOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToK
KyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6Okdl
dEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJp
YW50Ojp+R2V0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToK
KyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpHZXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICog
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6
Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQp
OgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJp
YW50OjpjYWxsTGlua1N0YXR1cyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojpjb25z
dGFudENoZWNrcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjphbHRl
cm5hdGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVy
ZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246
OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaDogQWRkZWQuCisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhv
dXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnByZXNl
bmNlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VXaXRo
b3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNl
bmNlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNl
dHRlcldpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b246OmFic2VuY2VPZlNldHRlcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0
aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVy
dHlDb25kaXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjpvYmplY3QpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
Y29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmtpbmQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dWlkKToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc09mZnNldCk6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6aGFzQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVy
dHlDb25kaXRpb246Omhhc1Byb3RvdHlwZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjpwcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6aGFzUmVxdWlyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjpyZXF1aXJlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25k
aXRpb246Omhhc2gpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
Ojppc0NvbXBhdGlibGVXaXRoKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b246OndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVpcmVzUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25I
YXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoOjpl
cXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvck9i
amVjdCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JDb25k
aXRpb25LaW5kKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om51
bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6Omhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om1lcmdlZFdpdGgpOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1
cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxM
aXZlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXBJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcCk6
CisgICAgICAgIChKU0M6OmdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyk6CisgICAg
ICAgIChKU0M6OmdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcyk6CisgICAg
ICAgIChKU0M6OmdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KToKKyAg
ICAgICAgKEpTQzo6Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3Vy
cmVudGx5KToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmludmFsaWQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldDo6bm9uRW1wdHkpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpp
c0VtcHR5KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmVuZCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpyZWxlYXNlUmF3UG9pbnRlcik6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50
ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1Bv
aW50ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6RGF0YTo6
RGF0YSk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6Cisg
ICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRB
Y2Nlc3M6OnZpc2l0V2Vhayk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5oOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6R2V0
QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6
c3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpjaGFpbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmNoYWluQ291bnQpOiBEZWxldGVkLgor
ICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlND
OjpQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWspOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3Jw
aGljUHV0QnlJZExpc3QuaDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6UHV0QnlJZEFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpzZXR0ZXIpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNj
ZXNzOjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpjb25kaXRp
b25TZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpzdHViUm91dGluZSk6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OmNoYWluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
UHV0QnlJZEFjY2Vzczo6Y2hhaW5Db3VudCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
UHJvcGVydHlDb25kaXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6
ZHVtcCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdoZW5WYWxpZCk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChX
VEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9u
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJvcGVydHlDb25k
aXRpb24pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0
QmFycmllcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcik6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIpOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcik6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5Q29uZGl0aW9uOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6a2luZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp1aWQpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246Om9mZnNldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjpoYXNBdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246
OmF0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzUHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OnByb3RvdHlwZSk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpoYXNSZXF1aXJlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OnJlcXVpcmVkVmFsdWUpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6aGFzaCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzQ29t
cGF0aWJsZVdpdGgpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdS
ZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246OndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbkhhc2g6Omhhc2gpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eUNvbmRpdGlvbkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21M
TEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6
Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnNldHRlcik6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjptYWtlc0NhbGxzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6
OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRU
b01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YmFzZVN0
cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaDoK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50KToKKyAgICAgICAg
KEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmtpbmQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFu
dDo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZVNl
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6Om9mZnNldCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpjYWxs
TGlua1N0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojpjb25zdGFudENoZWNr
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dDo6flN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjp+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjph
ZGRXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KToKKyAgICAgICAgKiBieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6c3R1
YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
UHV0QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dFB1dEJ5SWRSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNldFNl
ZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6Cisg
ICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludDo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpmaXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9p
bnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6
CisgICAgICAgICogZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ6OmtleSk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVX
YXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50KToK
KyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludDo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjprZXkpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFu
dFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpjaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBy
b21vdGVUb0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGxh
bkxvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcv
REZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6dmFsaWRh
dGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAq
IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29u
c3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjplbWl0R2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6
OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjphZGRCYXNlQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6
OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjphZGRDaGVja3MpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAo
SlNDOjpERkc6OkluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6
OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6
OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMpOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpE
ZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJl
ZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVk
V2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTZXRQb2ludGVyQWRhcHRvcjo6YWRkKToK
KyAgICAgICAgKEpTQzo6REZHOjpTZXRQb2ludGVyQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVk
KToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRQb2ludGVyQWRhcHRvcjo6ZHVtcEluQ29udGV4dCk6
CisgICAgICAgIChKU0M6OkRGRzo6SW5mZXJyZWRWYWx1ZUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlk
YXRlZCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmR1bXBJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFw
dG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5QnVmZmVy
Vmlld1dhdGNocG9pbnRBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZH
OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQp
OgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6
OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czo6aXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdh
dGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0
Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY1NldEFkYXB0
b3I6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY1NldEFkYXB0b3I6
Omhhc0JlZW5JbnZhbGlkYXRlZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdlYWtSZWZlcmVu
Y2VzOjphZGRMYXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNl
czo6Y29udGFpbnMpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaDoK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y2xlYXJGbGFnc09uQWxsTm9kZXMpOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp3YXRjaENvbmRpdGlvbik6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmlzU2FmZVRvTG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Omxp
dmVuZXNzRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppZGVudGlmaWVy
cyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OndhdGNocG9pbnRzKToKKyAgICAgICAgKiBk
ZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpHZXRCeU9mZnNldE1ldGhvZDo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6
R2V0QnlPZmZzZXRNZXRob2Q6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok11bHRpR2V0QnlP
ZmZzZXRDYXNlOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5
T2Zmc2V0Q2FzZTo6ZHVtcCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6R2V0QnlPZmZzZXRNZXRob2QpOgorICAgICAgICAoSlND
OjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
R2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0
TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZz
ZXRNZXRob2Q6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRo
b2Q6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpwcm90b3R5
cGUpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvZmZzZXQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNlOjpNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OnNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6Om1ldGhvZCk6CisgICAgICAgICog
ZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVS
ZWdpc3RyYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlUmVnaXN0
cmF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRC
eU9mZnNldCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZXBh
dGNoQnlJZFNlbGZBY2Nlc3MpOgorICAgICAgICAoSlNDOjpjaGVja09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uKToKKyAgICAgICAgKEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMpOgor
ICAgICAgICAoSlNDOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUJ5
SWRTdHViKToKKyAgICAgICAgKEpTQzo6YWN0aW9uRm9yQ2VsbCk6CisgICAgICAgIChKU0M6OnRy
eUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjplbWl0UHV0UmVwbGFjZVN0dWIpOgor
ICAgICAgICAoSlNDOjplbWl0UHV0VHJhbnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjp0cnlD
YWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAg
ICAgKEpTQzo6dHJ5UmVwYXRjaEluKToKKyAgICAgICAgKEpTQzo6YWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5zaXRpb25TdHVi
QW5kR2V0T2xkU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGVuZGVk
U3RydWN0dXJlQ2hhaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5o
OgorICAgICAgICAoSlNDOjpub3JtYWxpemVQcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6
Om5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjppc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdl
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25h
cnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQcm9wZXJ0eVJl
cGxhY2VtZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9m
b2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmct
dGhlLXN0cnVjdHVyZS1jaGVjay1uZXcuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy91bmRlZmluZWQtYWNjZXNzLWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2UuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hh
bmdlLmpzOiBBZGRlZC4KKwogMjAxNS0wNy0zMCAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29s
c2FrQGdtYWlsLmNvbT4KIAogICAgICAgICBBZGQgdGhlICJ3YXNtIiBkaXJlY3RvcnkgdG8gdGhl
IEFkZGl0aW9uYWwgSW5jbHVkZSBEaXJlY3RvcmllcyBmb3IganNjLmV4ZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NywxMCArOTcs
MTMgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9KdW1wVGFibGUu
Y3BwCiAgICAgYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCiAgICAgYnl0ZWNv
ZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKyAgICBieXRlY29kZS9PYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5jcHAKKyAgICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5jcHAKICAgICBieXRlY29kZS9PcGNvZGUuY3BwCiAgICAgYnl0ZWNvZGUvUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5jcHAKICAgICBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNw
cAogICAgIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKKyAgICBieXRlY29kZS9Qcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAogICAgIGJ5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAogICAgIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2Uu
Y3BwCkBAIC0xMjgsNiArMTMxLDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKIAogICAg
IGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCiAgICAgZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCisg
ICAgZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKKyAg
ICBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAogICAgIGRmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMu
Y3BwCiAgICAgZGZnL0RGR0FyaXRoTW9kZS5jcHAKQEAgLTE5Niw2ICsyMDEsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdNaW5pZmllZEdyYXBoLmNwcAogICAgIGRm
Zy9ERkdNaW5pZmllZE5vZGUuY3BwCiAgICAgZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3Bw
CisgICAgZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAogICAgIGRmZy9ERkdOYWl2ZURv
bWluYXRvcnMuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcvREZHTm9k
ZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNp
b24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAK
Le+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxk
IiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29t
L2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29u
ZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z1N1
ZmZpeHxXaW4zMiI+CkBAIC0zMzcsMTAgKzMzNywxMyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcSnVtcFRhYmxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRhcmdldHMuY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24uY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkVmFyaWFu
dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxSZWR1Y2VXaGl0
ZXNwYWNlLmNwcCIgLz4KQEAgLTM2NSw2ICszNjgsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGVidWdnZXJcRGVidWdnZXJTY29wZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdBcml0aE1vZGUuY3BwIiAvPgpAQCAtNDMzLDYgKzQzOCw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFpdmVEb21pbmF0b3Jz
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuY3BwIiAvPgpA
QCAtMTAwOSwxMSArMTAxNSwxNCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXExMSW50Q2FsbExpbmtJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9w
Y29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3BlcmFuZHMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxQdXRLaW5kLmgiIC8+CkBAIC0xMDQ5LDYgKzEwNTgsOCBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0VmFsdWUu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGphY2VuY3lMaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQWxsb2NhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHQW5hbHlzaXMuaCIgLz4KQEAgLTExNDEsNiArMTE1Miw3IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRJRC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05haXZlRG9taW5hdG9ycy5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDYgKzEwNyw4IEBACiAJCTBGMTNFMDRFMTYxNjRBMUYwMERDOERFNyAvKiBJbmRleGlu
Z1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi87IH07CiAJCTBG
MTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVGMTVEMTRCN0E3M0EwMDVERTM3
RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRH
cmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi87IH07CisJ
CTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
OEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHAgKi87IH07CisJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE5MENB
QTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgKi87IH07CiAJ
CTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE5MENBQjE4OUQ4
MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUREODRBMThBOTQ1QkUwMDI2RjNG
QSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yOTMsOCArMjk1LDYg
QEAKIAkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyQTE1NDc0RkY0MDAz
RUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjNCN0UyQTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdF
MjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLzsgfTsKIAkJMEYzQjdFMkIx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZh
cmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5
NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07Ci0JCTBG
M0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQz
MDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBv
c3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTU4OCw2ICs1ODgsMTQgQEAKIAkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0
cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEM0M4MjYx
NDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJp
dmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIx
NDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OworCQkwRkQzRTQwMTFCNjE4QUFG
MDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFM0ZG
MUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQuY3BwICovOyB9OworCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEM0U0MDkxQjYxOEI2NjAwQzgw
RTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBGRDNFNDBBMUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5jcHAgKi87IH07CisJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA3MUI2MThCNjYw
MEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi87IH07CisJCTBGRDNFNDBFMUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3Bl
cnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQ0YxNTRG
QjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovOyB9OwogCQkwRkQ4MUFEMzE1NEZC
NEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWlu
YXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFFMTQxNzJDMkYw
MDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9OwpAQCAtNjkyLDYgKzcwMCw4IEBA
CiAJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdFZGdlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTFCMTZCNjI3NzIwMDNGNjk2
QiAvKiBERkdFZGdlLmNwcCAqLzsgfTsKIAkJMEZGMEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCNEI1MjExNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1bmN0aW9uRXhlY3V0
YWJsZUR1bXAuY3BwICovOyB9OwogCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5NUIgLyogRnVuY3Rp
b25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1
bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENTkxQjYx
QTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLzsgfTsKKwkJMEZG
MkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYyQ0Q1QTFCNjFBNEY4
MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY0MjczMTE1OEVCRDU0MDA0Q0I5RkYg
LyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzIxNThF
QkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjczMDE1OEVCRDQ0MDA0Q0I5RkYgLyog
VURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZGNDI3NDAxNThFQkU4QjAwNENCOUZG
IC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmMgKi87
IH07CkBAIC0xNDExLDggKzE0MjEsNiBAQAogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyog
U3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg1MDdENzE3Q0JD
NkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg1RjZCQzE4
QzU1M0ZFMDBGMTA2MjYgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZGNjQ3QTE4QzUyRTg1MDBCNTUzMDcgLyog
U3BpbGxSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
ICovOyB9OwotCQlBNzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4
ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzhBOTc3NDE3OTcz
OEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZDMTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovOyB9OwogCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQg
LyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzhBOTc2RDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxp
emVyLmggKi87IH07CiAJCUE3OEE5Nzc2MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4QTk3
NkUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi87IH07CkBAIC0xODc5LDYg
KzE4ODcsOCBAQAogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGV4aW5nVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAv
KiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29t
bW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTcyNUZFMUI0
ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBwYXRoID0gZGZnL0RGR01p
bmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjE4RDNDRDFC
NTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgcGF0aCA9IGRm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFz
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUHJvZmlsZXJKZXR0
aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRpc29uUmVhc29uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIxODlEODJGNjAwMEFFNUYw
IC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJK
ZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFERDg0OTE4
QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDY0
LDggKzIwNzQsNiBAQAogCQkwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsaWRhdGUuaDsgcGF0aCA9
IGRmZy9ERkdWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0Uy
NDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0
dXJlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0Qw
QkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1By
ZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3
RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
bHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNzAsNiArMjM3
OCwxNCBAQAogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBE
RkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJp
dmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBF
MUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEM0U0MDMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0
MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQw
NzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlD
b25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlDb25k
aXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZENTY1MjIxNkFCNzgwQTAw
MTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9j
a0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBQ0YxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHRG9taW5hdG9ycy5jcHA7IHBhdGggPSBkZmcvREZHRG9taW5hdG9ycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3
MiAvKiBERkdEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yNDY5LDYgKzI0ODUsOCBAQAogCQkwRkVGQzlBODE2ODFBM0IwMDA1
NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHBhdGggPSBkZmcvREZH
T1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0aW9u
RnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjA1NEY4MUFDMzVCNDQw
MEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdN
dWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHBhdGggPSBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkYyQ0Q1QTFCNjFBNEY4MDA0
OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaDsgcGF0aCA9IGRmZy9ERkdNdWx0
aUdldEJ5T2Zmc2V0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0Mjcy
RjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERpc2Fzc2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL0Rpc2Fzc2Vt
Ymxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0MjczMDE1OEVCRDQ0MDA0
Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIv
VURpczg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
NDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBuYW1lID0gdWRpczg2X2RlY29kZS5jOyBwYXRoID0gZGlzYXNzZW1ibGVyL3Vk
aXM4Ni91ZGlzODZfZGVjb2RlLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjEz
LDggKzMyMzEsNiBAQAogCQlBNzdGMTgyMDE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVDYWNoZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFyc2VyTW9k
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyTW9kZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4ODUzRjgxNzk3
MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmlu
YWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZhaWxl
ZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0Zh
aWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGYWls
ZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFs
aXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGaW5hbGl6
ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NTUxLDggKzQ1NjcsNiBAQAogCQkJCUE3QThBRjJCMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50
MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5
LmggKi8sCi0JCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4uY3BwICovLAotCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8qIEludGVy
bmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRl
cm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJQTFCOUUyMzMxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxD
b2xsYXRvci5jcHAgKi8sCkBAIC00OTU1LDYgKzQ5NjksMTAgQEAKIAkJCQlBNzA0RDhGRjE3QTBC
QUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCAqLywKIAkJCQkw
RjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8sCiAJCQkJ
MEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLywKKwkJCQkw
RkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8sCisJCQkJMEYxOEQz
Q0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAg
Ki8sCisJCQkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oICovLAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggKi8sCiAJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9j
YXRvci5oICovLAogCQkJCUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFseXNpcy5o
ICovLApAQCAtNTExNCw2ICs1MTMyLDggQEAKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBDRDg5MTAg
LyogREZHTWluaWZpZWROb2RlLmggKi8sCiAJCQkJMEY4RjE0MzExQURGMDkwMTAwRUQ3OTJDIC8q
IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwICovLAogCQkJCTBGOEYxNDMyMUFERjA5MDEwMEVE
NzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCisJCQkJMEZGMkNENTkxQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKKwkJCQkwRkYyQ0Q1
QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywKIAkJCQkw
RkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCAqLywKIAkJ
CQkwRkMzQ0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggKi8sCiAJ
CQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi8sCkBA
IC01Mzg1LDggKzU0MDUsNiBAQAogCQkJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oICovLAogCQkJCTBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3Rh
dHVzLmNwcCAqLywKIAkJCQkwRjZGQzc0RjE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0
YXR1cy5oICovLAotCQkJCTBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmNwcCAqLywKLQkJCQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5oICovLAogCQkJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBE
YXRhRm9ybWF0LmggKi8sCiAJCQkJMEZDNzEyREMxN0NEODc3ODAwOENDOTNDIC8qIERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8sCiAJCQkJMEZDNzEyREQxN0NEODc3ODAwOENDOTND
IC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLApAQCAtNTQxOSw2ICs1NDM3LDEw
IEBACiAJCQkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwICovLAogCQkJCTBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8sCiAJCQkJMTRDQTk1OEMxNkFCNTBGQTAwOTM4QTA2
IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggKi8sCisJCQkJMEZEM0U0MDMxQjYxOEI2NjAw
QzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLywKKwkJCQkwRkQzRTQwNDFC
NjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCAqLywKKwkJCQkwRkQz
RTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwICov
LAorCQkJCTBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oICovLAogCQkJCTk2OUEwNzk0MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwICov
LAogCQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKIAkJCQkwRjJC
REMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMuaCAqLywKQEAgLTU0MzAsNiArNTQ1Miw4
IEBACiAJCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCAqLywKIAkJCQkwRjk4MjA1RDE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJn
ZXRzLmNwcCAqLywKIAkJCQkwRjk4MjA1RTE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBU
YXJnZXRzLmggKi8sCisJCQkJMEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29u
ZGl0aW9uLmNwcCAqLywKKwkJCQkwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlD
b25kaXRpb24uaCAqLywKIAkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0
YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0
dXMuaCAqLywKIAkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
Y3BwICovLApAQCAtNTk0NSw2ICs1OTY5LDcgQEAKIAkJCQlDMjk4MUZEOTE3QkFFRTRCMDBBM0JD
OTggLyogREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0
Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZEM0U0MEUxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91
YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNDODI4MTQxMTVENEYwMEZE
ODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZDMTRERjNGMTYw
MEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKQEAgLTYyMDAsNiArNjIyNSw3IEBA
CiAJCQkJQTUzMjQzOTgxODU2QTQ4OTAwMkVENjkyIC8qIENvbWJpbmVkRG9tYWlucy5qc29uIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzODgxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOEExODU2ODMzNTAw
MkVENjkyIC8qIEluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNkRERUExOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZp
ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4QzE4NTY4MzM1MDAyRUQ2OTIg
LyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTBFNEI2
MjE4ODA5REQ1MDA2OEE0NkQgLyogSW5zcGVjdG9yUnVudGltZUFnZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTYyMDksNyArNjIzNSw2IEBACiAJCQkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8q
IEludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1
QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzg4NTNGQTE3OTcyNjI5
MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxMTY2N0IwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MjIyLDYgKzYyNDcsNyBAQAogCQkJCUJDMThDNDE1MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
OUQ5MzAwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcw
RTkxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkNDRUZERTBGNDEzRjg5MDBG
RDdGOUUgLyogSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNzc2QkYxNEZGMDAyQjAw
MTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkFG
N0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTY0MzgsNyArNjQ2NCw2IEBACiAJCQkJQkMxOEM0M0MwRTE2RjVDRDAwQjM0NDYwIC8qIE1h
dGhPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkwMjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAv
KiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI1NDY3QjE0RjVDN0Ux
MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEYzRDBCQkQxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDA4Q0U3MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rh
c2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBT
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcg
LyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTIyLDkgKzY1
NDcsMTEgQEAKIAkJCQkyQUFEOTY0QTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJzaXZlQWxsb2Nh
dGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3Nzkg
LyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMTIwMzAxQThBRUQx
MjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBB
MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZBN0E4RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzQwQTQ4NTFB
OTA1MUFGMDBENzNDQ0EgLyogTWF0aENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAy
QzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0QyMDJENjBFMTcwNzA4MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IubHV0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY2MDIsNiArNjYyOSw3IEBACiAJCQkJMEZEMkM5MjQxNkQwMUVF
OTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkUx
OEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MEMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBC
QTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMz
MkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmggaW4gSGVhZGVycyAqLywKQEAgLTczOTcsNiArNzQyNSw3IEBACiAJCQkJMEZEOEEzMTkx
N0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjI1RjFBRjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRy
aW5zaWNSZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDBEMUI2MThCNjYw
MEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMz
Q0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5REY3NDQgLyogRlRMSklURmluYWxpemVy
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzQwNyw2ICs3NDM2LDcgQEAKIAkJCQkwRkNFRkFERjE4
MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
QTBBMEYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRC
eU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCREMxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCREYxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVBMEEyQTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNzQ1OCw2ICs3NDg4LDcgQEAKIAkJCQlBNUNFRUUxNDE4N0YzQkFEMDBFNTVDOTkgLyogSW5z
cGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODYxODQwMzhDQTAwQkZD
RTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
QjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDAxMUI2MThBQUYwMEM4MEUxRSAvKiBERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBRjczODJDMThCQkJGOTIwMDhBNUEzNyAvKiBT
dHJ1Y3R1cmVJRFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEw
MDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03
NDY5LDcgKzc1MDAsNiBAQAogCQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0
b3JQcm90b2NvbE9iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjExODgwOURE
NTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0OCAv
KiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEN0Q0MEVEMjEy
ODIwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDExM0Q0
QjFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzQ4Niw2ICs3NTE2LDcgQEAKIAkJCQlCQ0RENTFFQjBGQjhERjc0MDA0QThCREMgLyog
SklUT3Bjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzEyMzZFNTExOTVGMzNDMDBCRDIx
NzQgLyogSklUT3Bjb2RlczMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkU4NDVBMTkw
MzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZEM0U0MDkxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNTg3RDZEMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNEU1NEMxN0VFMjc0OTAw
QUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZDQzg1QzQw
RUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNzU0MSw3ICs3NTcyLDYgQEAKIAkJCQlBNTAzRkExQjE4OEUwRkIwMDAxMTBGMTQgLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBG
QjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyODA4NzUxMDdFQzEzRTAwMTNFN0IyIC8qIEpTTG9jay5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVENzA5QjE2REU5OUY0MDBGQ0E2QkMg
LyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODc0MTE3Q0JFOEVC
MDBDM0U2NDMgLyogSlNNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc0REVGOTUxODJEOTkx
NDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzM3LDYg
Kzc3NjcsNyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVy
ZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAv
KiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwQjFCNjE4
QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzAxM0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQx
M0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3NDYsNiAr
Nzc3Nyw3IEBACiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3lt
Ym9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMy
IC8qIFRlbXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE4RDNDRjFCNTVB
NkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5r
R2VuZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0MCw3ICszNDAsNiBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRC
eUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZSogYmFz
ZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVy
ZSA9IDA7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSAwOwogICAgICAgICAg
ICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewpAQCAtMzcwLDExICszNjksNiBA
QCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAg
ICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcm90b3R5cGVTdHJ1Y3QiLCBiYXNlU3RydWN0dXJlLCBp
ZGVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjaGFp
bikgewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICAgICAg
ZHVtcENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIs
IGxpc3QgPSAlcDogWyIsIGxpc3QpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewpAQCAtMzgyLDkgKzM3Niw5IEBAIHZvaWQgQ29k
ZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludGYoIiwgIik7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIigiKTsK
ICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJiYXNlIiwgbGlzdC0+YXQo
aSkuc3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QtPmF0
KGkpLmNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0LT5hdChpKS5jb25k
aXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBsaXN0LT5h
dChpKS5jaGFpbigpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
bGlzdC0+YXQoaSkuY29uZGl0aW9uU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAgICAgICAgICAgICAgICB9CkBAIC00
NTYsMTAgKzQ1MCw4IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cygK
ICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHViSW5mby51LnB1
dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLCBpZGVudCk7CiAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIsICIpOwogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAibmV4dCIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgp
LCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0
dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0
LCBjaGFpbiwgaWRlbnQpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpCisgICAgICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiLCAiLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJv
bVJhd1BvaW50ZXIoc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF9saXN0OiB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlzdCA9IFsiKTsKQEAg
LTQ4MywxMCArNDc1LDggQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVz
KAogICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2IiwgYWNj
ZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIiwgIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwg
Im5leHQiLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhY2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4o
b3V0LCBhY2Nlc3MuY2hhaW4oKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MuY29uZGl0aW9uU2V0KCkuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCBhY2Nlc3Mu
Y29uZGl0aW9uU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludCgidW5rbm93biIpOwogICAgICAgICAgICAgICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODc2MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNiBAQCB2b2lkIENvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyCiAgICAgICAgIGRhdGFMb2coIkZpcmluZyB3
YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4i
KTsKIAogICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1Vu
cHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmZGV0YWlsKTsKLQotICAg
IGlmIChpc09uTGlzdCgpKQotICAgICAgICByZW1vdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBs
ZXhHZXRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDggKzMx
LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0
dXM6OmNvbXB1dGVGb3IoCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUq
IGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICB1bnNpZ25lZCBjaGFp
bkNvdW50LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0
aGF0IHdlIG5ldmVyIHNlZSBhIHN0cnVjdHVyZSB0aGF0CiAgICAgLy8gaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkgYnV0IGZvciB3aGljaCB3ZSBkb24ndApAQCAtNDAsMzIgKzM5LDM0IEBA
IENvbXBsZXhHZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHUKICAgICAvLyB0aGF0LCB5
ZXQuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTgx
MAogICAgIAorICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNWYWxpZCgpKTsKKyAgICAKICAgICBp
ZiAoaGVhZFN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkK
ICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKICAgICBDb21wbGV4R2V0U3Rh
dHVzIHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gSW5saW5lYWJsZTsKICAgICAKLSAgICBp
ZiAoY2hhaW4gJiYgY2hhaW5Db3VudCkgewotICAgICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0
UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWluQ291bnQpKTsKKyAgICBpZiAoIWNvbmRpdGlv
blNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwogICAgICAgICAKLSAgICAgICAgaWYgKCFyZXN1bHQubV9jaGFpbi0+aXNTdGlsbFZh
bGlkKCkpCisgICAgICAgIGlmICghcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1
cmVWYWxpZGl0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHNraXAoKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpCi0gICAgICAgICAgICB8fCByZXN1bHQubV9jaGFpbi0+dGFrZXNTbG93UGF0aEluREZHRm9y
SW1wdXJlUHJvcGVydHkoKSkKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlNsb3RCYXNlcyA9
CisgICAgICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQubnVtYmVyT2ZDb25kaXRpb25zV2l0
aEtpbmQoUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobnVtYmVyT2ZTbG90QmFzZXMgPD0gMSk7CisgICAgICAgIGlmICghbnVtYmVyT2ZTbG90QmFz
ZXMpIHsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IG1pc3Nlcy4g
VGhhdCdzIGEgYnVtbWVyLgorICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKICAgICAgICAgICAgIHJldHVybiB0YWtlc1Ns
b3dQYXRoKCk7CisgICAgICAgIH0KKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYmFz
ZSA9IHJlc3VsdC5tX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpOworICAgICAgICBB
U1NFUlQoYmFzZS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsKICAgICAg
ICAgCi0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gcmVzdWx0Lm1fY2hhaW4tPnRl
cm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9
IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlRfVU5VU0VE
KGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0
Lm1fYXR0cmlidXRlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
aGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7
Ci0gICAgfQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiYXNlLm9mZnNldCgpOworICAgIH0g
ZWxzZQorICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKICAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVz
X2gKICNkZWZpbmUgQ29tcGxleEdldFN0YXR1c19oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBDb21wbGV4R2V0U3Rh
dHVzKCkKICAgICAgICAgOiBtX2tpbmQoU2hvdWxkU2tpcCkKICAgICAgICAgLCBtX29mZnNldChp
bnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlcyhVSU5UX01BWCkKICAgICB7CiAg
ICAgfQogICAgIApAQCAtOTcsMjEgKzk2LDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
c3RhdGljIENvbXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CisgICAgICAgIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0gICAgSlNWYWx1ZSBzcGVjaWZpY1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7
CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVz
OwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBtX2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2su
Y3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihDaGVjayBpZiAi
LCBpbkNvbnRleHQoSlNWYWx1ZShtX2NvbnN0YW50KSwgY29udGV4dCksICIgaGFzIHN0cnVjdHVy
ZSAiLAotICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCks
ICIpIik7Ci19Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQot
U3RydWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3Rv
ciYgdmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IHZl
Y3Rvci5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHZlY3RvcltpXS5jb25zdGFudCgpID09
IGNvbnN0YW50KQotICAgICAgICAgICAgcmV0dXJuIHZlY3RvcltpXS5zdHJ1Y3R1cmUoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgYXJlQ29tcGF0aWJsZShjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBhLCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrVmVjdG9yJiBiKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IGEuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogb3RoZXJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IoYiwgYVtp
XS5jb25zdGFudCgpKTsKLSAgICAgICAgaWYgKCFvdGhlclN0cnVjdHVyZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYVtpXS5zdHJ1Y3R1cmUoKSAhPSBvdGhlclN0cnVjdHVy
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNv
dXJjZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KQotewotICAgIGZvciAo
dW5zaWduZWQgaSA9IHNvdXJjZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZUZvcih0YXJnZXQsIHNvdXJjZVtpXS5jb25zdGFudCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB0YXJnZXQuYXBwZW5kKHNvdXJjZVtpXSk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0
YW50U3RydWN0dXJlQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLSNk
ZWZpbmUgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KLSNpbmNsdWRlICJEdW1wQ29udGV4dC5o
IgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIENvbnN0YW50U3RydWN0dXJlQ2hlY2sgewotcHVibGljOgotICAgIENv
bnN0YW50U3RydWN0dXJlQ2hlY2soKQotICAgICAgICA6IG1fY29uc3RhbnQobnVsbHB0cikKLSAg
ICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIGNvbnN0YW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICAgICAgOiBtX2NvbnN0YW50KGNvbnN0YW50KQotICAgICAgICAsIG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghIW1fY29uc3RhbnQgPT0gISFtX3N0
cnVjdHVyZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fY29uc3RhbnQ7IH0KLSAgICAKLSAgICBKU0NlbGwqIGNvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudDsgfQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KLSAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0NlbGwqIG1fY29uc3RhbnQ7Ci0gICAgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPENvbnN0YW50U3RydWN0
dXJlQ2hlY2ssIDI+IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3I7Ci0KLVN0cnVjdHVyZSog
c3RydWN0dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3Rvciwg
SlNDZWxsKiBjb25zdGFudCk7Ci1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVja1ZlY3RvciYsIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsK
LXZvaWQgbWVyZ2VJbnRvKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHNvdXJj
ZSwgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdGFyZ2V0KTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OSw4ICsxNjksNyBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0KGxpc3RJbmRleCkuc3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENv
bXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0gICAgICAgICAgICAg
ICAgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbkNvdW50KCksIHVpZCk7CisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQo
KSkgewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAt
MjA2LDggKzIwNSw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdl
dEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCi0gICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwor
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25k
aXRpb25TZXQoKSwgV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRy
dWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwyMyArMzQsMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVy
ZVNldCkKLSAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQorICAgICwgbV9jb25kaXRpb25T
ZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9jYWxsTGlu
a1N0YXR1cyhXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKQogewogICAgIGlmICghc3RydWN0dXJl
U2V0LnNpemUoKSkgewogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpOwot
ICAgICAgICBBU1NFUlQoIWNoYWluKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGNoYWluICYmIGNo
YWluLT5zaXplKCkpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFs
UHJvdG90eXBlKCk7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MobV9jb25zdGFudENoZWNr
cyk7CisgICAgICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKICAgICB9CiB9Ci0K
KyAgICAgICAgICAgICAgICAgICAgIAogR2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlkVmFyaWFudCgp
IHsgfQogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlh
bnQmIG90aGVyKQpAQCAtNjIsOCArNTgsNyBAQCBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlh
bnQoY29uc3QgR2V0CiBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShj
b25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQgPSBvdGhl
ci5tX3N0cnVjdHVyZVNldDsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFu
dENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7Cisg
ICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29mZnNldCA9
IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAg
ICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90
aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzIsMjggKzY3LDI0IEBAIEdldEJ5SWRWYXJpYW50
JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVN0cnVj
dHVyZVNldCBHZXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKTsKLSAgICAK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tz
LCBtX2FsdGVybmF0ZUJhc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAg
cmV0dXJuIHN0cnVjdHVyZTsKLX0KLQogYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVy
Z2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQogewotICAgIGlmIChtX2FsdGVybmF0ZUJh
c2UgIT0gb3RoZXIubV9hbHRlcm5hdGVCYXNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghYXJlQ29tcGF0aWJsZShtX2NvbnN0YW50Q2hlY2tz
LCBvdGhlci5tX2NvbnN0YW50Q2hlY2tzKSkKKworICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgbWVyZ2VJbnRvKG90aGVyLm1fY29uc3RhbnRDaGVja3MsIG1fY29u
c3RhbnRDaGVja3MpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRp
dGlvblNldDsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICBt
ZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29u
ZGl0aW9uU2V0KTsKKyAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8
ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25k
aXRpb25TZXQ7CisgICAgCiAgICAgbV9zdHJ1Y3R1cmVTZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1
cmVTZXQpOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEyLDEwICsxMDMsNyBAQCB2b2lk
IEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgfQogICAgIAogICAgIG91
dC5wcmludCgKLSAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQp
LCAiLCAiLAotICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3Ms
IGNvbnRleHQpLCAiXSIpOwotICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCi0gICAgICAgIG91dC5w
cmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVC
YXNlKSwgY29udGV4dCkpOworICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwg
Y29udGV4dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCkpOwogICAg
IG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2FsbExpbmtT
dGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw5ICsyNyw4IEBACiAjZGVmaW5l
IEdldEJ5SWRWYXJpYW50X2gKIAogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVk
ZSAiQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIgotI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZVNldC5oIgogCkBAIC00Myw3ICs0Miw3IEBAIGNsYXNzIEdldEJ5SWRWYXJpYW50
IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gaW52YWxpZE9mZnNldCwKLSAgICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4gPSBudWxscHRyLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0gbnVsbHB0cik7CiAgICAgCiAgICAg
fkdldEJ5SWRWYXJpYW50KCk7CkBAIC01NSw5ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAg
ICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9
Ci0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3Mo
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOyB9Ci0gICAgSlNPYmplY3QqIGFsdGVy
bmF0ZUJhc2UoKSBjb25zdCB7IHJldHVybiBtX2FsdGVybmF0ZUJhc2U7IH0KLSAgICBTdHJ1Y3R1
cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OworCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIGEg
Y29uZGl0aW9uIHNldCBtZWFucyB0aGF0IHRoaXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlu
a1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICAK
QEAgLTcwLDggKzcwLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgR2V0QnlJZFN0YXR1
czsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0KiBtX2Fs
dGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25T
ZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
aWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgiPCIsIGluQ29udGV4dChKU1ZhbHVl
KG1fb2JqZWN0KSwgY29udGV4dCksICI6ICIsIGluQ29udGV4dChtX2NvbmRpdGlvbiwgY29udGV4
dCksICI+Iik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVx
dWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzU3RpbGxWYWxpZChzdHJ1
Y3R1cmUsIG1fb2JqZWN0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNT
dGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChtX29iamVjdC0+c3RydWN0dXJlKCkp
OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFs
aWRpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0
aW9uLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICghKnRo
aXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJlRW5z
dXJlc1ZhbGlkaXR5KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFi
aWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dh
dGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgbV9vYmpl
Y3QsIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgUHJvcGVydHlDb25kaXRp
b246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZWZmb3J0
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZv
cnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1dhdGNoYWJsZShz
dHJ1Y3R1cmUsIG1fb2JqZWN0LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjppc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0
IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgcmV0dXJuIGlzV2F0Y2hhYmxlKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZWZm
b3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBj
b25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpOworfQorCit2b2lkIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJl
ZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIHRyYWNrZWQuY2hlY2sobV9vYmplY3QpOworICAgIG1fY29uZGl0aW9u
LnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJv
cGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisKK2NsYXNzIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAg
ICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSB0b2tlbikKKyAg
ICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgICAgICAsIG1fY29uZGl0aW9uKHRva2VuKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oSlNPYmplY3Qq
IG9iamVjdCwgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKKyAgICAgICAgOiBt
X29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9jb25kaXRpb24oY29uZGl0aW9uKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNl
V2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAg
ICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCwgYXR0cmli
dXRlcyk7IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAg
ICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIp
OworICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgb2Zm
c2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisKKyAgICAvLyBOT1RFOiBUaGUgcHJvdG90eXBlIGlz
IHRoZSBzdG9yZWRQcm90b3R5cGUsIG5vdCB0aGUgcHJvdG90eXBlRm9yTG9va3VwLgorICAgIHN0
YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoCisgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBw
cm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0QmFycmllcih1aWQsIHBy
b3RvdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlV2l0aG91
dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcigK
KyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmpl
Y3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQu
bV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJh
cnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAor
ICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBpZiAo
b3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAg
IHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgcHJvdG90
eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVx
dWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVj
dDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmVxdWl2
YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFs
ZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYg
KG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAg
ICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcihvYmplY3QsIHVpZCwgdmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbmRp
dGlvbjsgfTsKKyAgICAKKyAgICBKU09iamVjdCogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9v
YmplY3Q7IH0KKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2NvbmRpdGlvbjsgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5raW5kKCk7IH0KKyAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkudWlkKCk7IH0KKyAgICBib29s
IGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc09mZnNldCgpOyB9Cisg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkub2Zm
c2V0KCk7IH0KKyAgICB1bnNpZ25lZCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gY29u
ZGl0aW9uKCkuaGFzQXR0cmlidXRlcygpOyB9CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNv
bnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmF0dHJpYnV0ZXMoKTsgfQorICAgIGJvb2wgaGFzUHJv
dG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUHJvdG90eXBlKCk7IH0KKyAg
ICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkucHJvdG90
eXBlKCk7IH0KKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBjb25k
aXRpb24oKS5oYXNSZXF1aXJlZFZhbHVlKCk7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5yZXF1aXJlZFZhbHVlKCk7IH0KKyAgICAKKyAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxKU09iamVjdCo+
OjpoYXNoKG1fb2JqZWN0KSArIG1fY29uZGl0aW9uLmhhc2goKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdCA9PSBvdGhlci5tX29iamVjdAorICAg
ICAgICAgICAgJiYgbV9jb25kaXRpb24gPT0gb3RoZXIubV9jb25kaXRpb247CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2NvbmRpdGlvbi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBp
ZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcyBv
cgorICAgIC8vIGRpZmZlcmVudCBvYmplY3RzLiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhh
dmUgdG8gZGVjaWRlIGhvdyB0byByZXNvbHZlIHRoZSBjb25mbGljdCAtCisgICAgLy8gZm9yIGV4
YW1wbGUgaWYgdGhlcmUgaXMgYSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBz
b21lIGNhc2VzIHlvdSdsbCB3YW50IHRoZQorICAgIC8vIG1vcmUgZ2VuZXJhbCBvZiB0aGUgdHdv
IHdoaWxlIGluIG90aGVyIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRo
ZSB0d28uIFRoaXMKKyAgICAvLyB3aWxsIGFsc28gcmV0dXJuIGZhbHNlIGZvciBjb250cmFkaWN0
aW9ucywgbGlrZSBQcmVzZW5jZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZQorICAgIC8vIG9iamVj
dC91aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQgY29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJs
ZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlz
IHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0
aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpIHx8IG9iamVjdCgpICE9IG90aGVy
Lm9iamVjdCgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVzZSB2YWxpZGl0eS1jaGVja2luZyBt
ZXRob2RzIGNhbiBvcHRpb25hbGx5IHRha2UgYSBTdHJ1dHVyZSogaW5zdGVhZCBvZiBsb2FkaW5n
IHRoZQorICAgIC8vIFN0cnVjdHVyZSogZnJvbSB0aGUgb2JqZWN0LiBJZiB5b3UncmUgaW4gdGhl
IGNvbmN1cnJlbnQgSklULCB0aGVuIHlvdSBtdXN0IHVzZSB0aGUgZm9ybXMKKyAgICAvLyB0aGF0
IHRha2UgYW4gZXhwbGljaXQgU3RydWN0dXJlKiBiZWNhdXNlIHlvdSB3YW50IHRoZSBjb21waWxl
ciB0byBvcHRpbWl6ZSBmb3IgdGhlIHNhbWUKKyAgICAvLyBzdHJ1Y3R1cmUgdGhhdCB5b3UgdmFs
aWRhdGVkIChpLmUuIGF2b2lkIGEgVE9DVE9VIHJhY2UpLgorICAgIAorICAgIC8vIENoZWNrcyBp
ZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBi
ZSBpbnRlcmNlcHRlZC4gVmFsaWRpdHkKKyAgICAvLyBkb2VzIG5vdCByZXF1aXJlIHdhdGNocG9p
bnRzIG9uIHRoZSBvYmplY3QuCisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29s
IHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJl
IHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBp
c1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9v
bCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNv
bnN0OworICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IGNvbnN0OworCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIE1h
eSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kCisgICAgLy8g
c3RydWN0dXJlIGFsb25lIGRvbid0IGd1YXJhbnRlZSB0aGUgY29uZGl0aW9uLiBOb3RlIHRoYXQg
dGhpcyBtYXkgcmV0dXJuIHRydWUgaWYgdGhlCisgICAgLy8gY29uZGl0aW9uIHN0aWxsIHJlcXVp
cmVzIHNvbWUgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdCBpbiBhZGRpdGlvbiB0byBjaGVja2lu
ZyB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUuIElmIHlvdSB3YW50IHRvIGNoZWNrIGlmIHRoZSBjb25k
aXRpb24gaG9sZHMgYnkgdXNpbmcgdGhlIHN0cnVjdHVyZSBhbG9uZSwKKyAgICAvLyB1c2Ugc3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkuCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJl
KikgY29uc3Q7CisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBT
aG9ydGhhbmQgZm9yIGNvbmRpdGlvbigpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUpLgorICAgIGJv
b2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wg
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkg
c2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUg
YW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNX
YXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0
dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFBy
b3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFByb3BlcnR5Q29u
ZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hh
bmdlcykgY29uc3Q7CisKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBh
bmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAg
IC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKAor
ICAgICAgICBTdHJ1Y3R1cmUqLAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmls
aXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAg
IGJvb2wgaXNXYXRjaGFibGUoCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxp
dHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAg
CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbigpLndhdGNoaW5nUmVxdWly
ZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpOworICAgIH0KKyAgICBib29sIHdhdGNo
aW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbmRpdGlvbigpLndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQo
KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9s
dmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0
OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVu
Y2VzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSlNPYmplY3QqIG1fb2JqZWN0OworICAgIFBy
b3BlcnR5Q29uZGl0aW9uIG1fY29uZGl0aW9uOworfTsKKworc3RydWN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgYSwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9
PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsKKyAg
ICB0eXBlZGVmIEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3
dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK09iamVjdFByb3BlcnR5Q29uZGl0
aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3QoSlNPYmplY3QqIG9iamVj
dCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLm9iamVjdCgpID09IG9iamVj
dCkKKyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yQ29uZGl0aW9uS2luZCgKKyAgICBQcm9wZXJ0eUNv
bmRpdGlvbjo6S2luZCBraW5kKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24u
a2luZCgpID09IGtpbmQpCisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAg
ICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKK30KKwordW5zaWduZWQgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6Om51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5
Q29uZGl0aW9uOjpLaW5kIGtpbmQpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhp
cykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQorICAgICAgICAgICAg
cmVzdWx0Kys7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6Omhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbnVtYmVyT2ZDb25kaXRpb25zV2l0aEtpbmQoUHJvcGVydHlDb25kaXRpb246OlBy
ZXNlbmNlKSA9PSAxOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6c2xvdEJhc2VDb25kaXRpb24oKSBjb25zdAoreworICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICB1bnNpZ25lZCBudW1Gb3VuZCA9IDA7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNl
bmNlKSB7CisgICAgICAgICAgICByZXN1bHQgPSBjb25kaXRpb247CisgICAgICAgICAgICBudW1G
b3VuZCsrOworICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKG51bUZvdW5kID09
IDEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjptZXJnZWRXaXRoKAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQo
KSB8fCAhb3RoZXIuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gaW52YWxpZCgpOworCisgICAg
VmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiByZXN1bHQ7CisgICAgCisgICAgaWYgKCFp
c0VtcHR5KCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IobV9kYXRhLT52ZWN0b3IpOwor
ICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG5ld0NvbmRpdGlv
biA6IG90aGVyKSB7CisgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGV4aXN0aW5nQ29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgICAgIGlmIChuZXdDb25kaXRp
b24gPT0gZXhpc3RpbmdDb25kaXRpb24pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoIW5ld0NvbmRpdGlvbi5pc0NvbXBhdGlibGVXaXRoKGV4aXN0aW5nQ29uZGl0
aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW52YWxpZCgpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChuZXdDb25kaXRpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IG5vbkVtcHR5KHJlc3VsdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6
OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlv
bi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QK
K3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAq
dGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFyZVN0
aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uaXNTdGlsbExp
dmUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCFp
c1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoIlsiKTsKKyAgICBpZiAobV9kYXRhKQor
ICAgICAgICBvdXQucHJpbnQobGlzdER1bXBJbkNvbnRleHQobV9kYXRhLT52ZWN0b3IsIGNvbnRl
eHQpKTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKK30KKworbmFtZXNwYWNlIHsKKworYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0aW9uKAorICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQgY29uZGl0aW9uS2luZCkKK3sKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKCk7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2coIkNyZWF0aW5nIGNvbmRpdGlvbiAiLCBjb25kaXRpb25LaW5kLCAi
IGZvciAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUpLCAiXG4iKTsKKworICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbktpbmQpIHsKKyAgICBj
YXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZTogeworICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob2Zmc2V0ID09IGludmFs
aWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsK
KyAgICAgICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlKHZtLCBv
d25lciwgb2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOiB7CisgICAgICAgIHJl
c3VsdCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKAorICAgICAgICAgICAgdm0s
IG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBl
T2JqZWN0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRp
dGlvbjo6QWJzZW5jZU9mU2V0dGVyOiB7CisgICAgICAgIHJlc3VsdCA9IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVj
dCwgdWlkLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24o
KTsKKyAgICB9CisKKyAgICBpZiAoIXJlc3VsdC5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRvIGNyZWF0ZSBjb25kaXRpb246ICIsIHJlc3Vs
dCwgIlxuIik7CisgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAg
IH0KKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJOZXcgY29uZGl0aW9uOiAi
LCByZXN1bHQsICJcbiIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2VudW0gQ29uY3VycmVu
Y3kgeworICAgIE1haW5UaHJlYWQsCisgICAgQ29uY3VycmVudAorfTsKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlv
bnMoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvciwK
KyAgICBDb25jdXJyZW5jeSBjb25jdXJyZW5jeSA9IE1haW5UaHJlYWQpCit7CisgICAgVmVjdG9y
PE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiBjb25kaXRpb25zOworICAgIAorICAgIGZvciAoOzsp
IHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmlu
ZyBzdHJ1Y3R1cmU6ICIsIHBvaW50ZXJEdW1wKHN0cnVjdHVyZSksICJcbiIpOworICAgICAgICAK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKSB7CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJdCdzIGEgcHJveHksIHNvIGludmFsaWQu
XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52
YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Ry
dWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgCisgICAg
ICAgIGlmICh2YWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAgaWYgKCFwcm90b3R5cGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiUmVhY2hlZCBlbmQgdXAgcHJvdG90eXBlIGNoYWluIGFzIGV4cGVjdGVkLCBkb25lLlxuIik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkbHkgcmVhY2hlZCBl
bmQgb2YgcHJvdG90eXBlIGNoYWluLCBzbyBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVl
KTsKKyAgICAgICAgc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAK
KyAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIHJlcGVhdGVkbHks
IGl0J3MgYSBnb29kIGJldCB0aGF0IGl0IHNob3VsZCBub3QgYmUKKyAgICAgICAgLy8gdHJlYXRl
ZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KSB7CisgICAgICAgICAgICBpZiAoY29uY3VycmVuY3kgPT0gTWFpblRocmVhZCkKKyAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBvYmplY3Qp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkNhbm5vdCBmbGF0dGVuIGRpY3Rpb25hcnkgd2hlbiBu
b3Qgb24gbWFpbiB0aHJlYWQsIHNvIGludmFsaWQuXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghZnVuY3Rvcihjb25kaXRpb25zLCBvYmplY3QpKSB7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJGdW5j
dG9yIGZhaWxlZCwgaW52YWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChvYmplY3QgPT0gcHJvdG90eXBlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJSZWFjaGVkIGRlc2lyZWQgcHJvdG90eXBlLCBkb25lLlxu
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nKCJSZXR1cm5pbmcgY29uZGl0aW9uczogIiwgbGlzdER1bXAo
Y29uZGl0aW9ucyksICJcbiIpOworICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6bm9uRW1wdHkoY29uZGl0aW9ucyk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eU1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1
cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBoZWFkU3RydWN0dXJlLCBudWxscHRyLAorICAgICAgICBbJl0gKFZlY3RvcjxPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlvbnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJv
b2wgeworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0KKyAgICAg
ICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBQcm9w
ZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworfQorCitPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRl
ck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1
cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBoZWFkU3RydWN0dXJlLCBudWxscHRyLAorICAgICAgICBbJl0gKFZlY3RvcjxPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlvbnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJv
b2wgeworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0KKyAgICAg
ICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBQcm9w
ZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbmRpdGlvbnMu
YXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7Cit9
CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Rv
dHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25z
KAorICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJl
LCBwcm90b3R5cGUsCisgICAgICAgIFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
PiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICBQ
cm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kID0KKyAgICAgICAgICAgICAgICBvYmplY3QgPT0g
cHJvdG90eXBlID8gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlIDogUHJvcGVydHlDb25kaXRp
b246OkFic2VuY2U7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQg
PQorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1
aWQsIGtpbmQpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQocmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKK30KKworT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20o
CisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlwZSwKKyAg
ICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBK
U09iamVjdCogb2JqZWN0KSAtPiBib29sIHsKKyAgICAgICAgICAgIGlmIChvYmplY3QgPT0gcHJv
dG90eXBlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0KKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRp
dGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSk7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0pOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAg
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29u
ZGl0aW9ucygKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0
ciwKKyAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiBjb25kaXRp
b25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsKKyAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24o
dm0sIG51bGxwdHIsIG9iamVjdCwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0
dGVyKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwgQ29uY3VycmVudCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisKKyNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHNldCBpcyB1
c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGFkZGl0aW9uYWwgY29uZGl0aW9ucworLy8gdGhh
dCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBoZWFwIGFjY2VzcyB0byBiZSB2YWxpZC4gVGhlIHNl
dCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmVzdGluZyBzdGF0ZXM6CisvLworLy8g
RW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFsIGNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1l
dC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFjY2VzcyBpcyBuZXZlciB2YWxpZC4KKy8vIE5vbi1l
bXB0eTogVGhlcmUgYXJlIHNvbWUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25zIHRoYXQgbmVlZCB0
byBiZSB2YWxpZC4KKworY2xhc3MgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgeworcHVibGlj
OgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkgeyB9CisgICAgCisgICAgc3RhdGlj
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGludmFsaWQoKQorICAgIHsKKyAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0g
YWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBub25FbXB0eShjb25zdCBW
ZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBp
ZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCgpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7
CisgICAgICAgIHJlc3VsdC5tX2RhdGEtPnZlY3RvciA9IHZlY3RvcjsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhbV9kYXRhIHx8ICFtX2RhdGEtPnZlY3Rvci5pc0VtcHR5KCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
IW1fZGF0YTsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiogaXRlcmF0b3I7CisgICAgCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmJlZ2luKCk7CisgICAgfQorICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRhLT52ZWN0b3IuZW5kKCk7CisgICAg
fQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvck9iamVjdChKU09iamVjdCog
b2JqZWN0KSBjb25zdDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JDb25kaXRpb25L
aW5kKFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bWJl
ck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kKSBjb25zdDsKKwor
ICAgIGJvb2wgaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAvLyBJ
ZiB0aGlzIGlzIGEgY29uZGl0aW9uIHNldCBmb3IgYSBwcm90b3R5cGUgaGl0LCB0aGVuIHRoaXMg
aXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlCisgICAgLy8gY29uZGl0aW9uIG9uIHRoZSBwcm90
b3R5cGUgaXRzZWxmLiBUaGlzIGFsbG93cyB5b3UgdG8gZ2V0IHRoZSBvYmplY3QsIG9mZnNldCwg
YW5kCisgICAgLy8gYXR0cmlidXRlcyBmb3IgdGhlIHByb3RvdHlwZS4gVGhpcyB3aWxsIFJFTEVB
U0VfQVNTRVJUIHRoYXQgdGhlcmUgaXMgZXhhY3RseSBvbmUgUHJlc2VuY2UKKyAgICAvLyBpbiB0
aGUgc2V0LCBhbmQgaXQgd2lsbCByZXR1cm4gdGhhdCBwcmVzZW5jZS4KKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0OworICAgIAorICAgIC8vIEF0
dGVtcHQgdG8gY3JlYXRlIGEgbmV3IGNvbmRpdGlvbiBzZXQgYnkgbWVyZ2luZyB0aGlzIG9uZSB3
aXRoIHRoZSBvdGhlciBvbmUuIFRoaXMgd2lsbAorICAgIC8vIGZhaWwgaWYgYW55IG9mIHRoZSBj
b25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyLiBXaGVuIGlmIGZhaWxz
LCBpdCByZXR1cm5zCisgICAgLy8gaW52YWxpZCgpLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IG1lcmdlZFdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIG90aGVy
KSBjb25zdDsKKyAgICAKKyAgICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpIGNvbnN0
OworICAgIGJvb2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSBjb25zdDsKKyAgICAKKyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSBjb25zdDsKKyAgICBib29sIGFyZVN0aWxsTGl2ZSgpIGNvbnN0OworICAgIAor
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gSGVscGVy
cyBmb3IgdXNpbmcgdGhpcyBpbiBhIHVuaW9uLgorICAgIHZvaWQqIHJlbGVhc2VSYXdQb2ludGVy
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4obV9kYXRhLmxlYWtS
ZWYoKSk7CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBhZG9w
dFJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVm
KHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBmcm9tUmF3UG9p
bnRlcih2b2lkKiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gc3RhdGljX2Nhc3Q8RGF0
YSo+KHJhd1BvaW50ZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgLy8gSW50ZXJuYWxseSwgdGhpcyByZXByZXNlbnRzIEludmFsaWQgdXNpbmcg
YSBwb2ludGVyIHRvIGEgRGF0YSB0aGF0IGhhcyBhbiBlbXB0eSB2ZWN0b3IuCisgICAgCisgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXBhY3QgYnkgaGF2aW5nIGl0IGlu
dGVybmFsbHkgdXNlIGEgdmVjdG9yIHRoYXQganVzdCBoYXMKKyAgICAvLyB0aGUgbm9uLXVpZCBw
b3J0aW9uIG9mIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBhbmQgdGhlbiByZXF1aXJpbmcgdGhh
dCB0aGUgY2FsbGVycyBvZiBhbGwKKyAgICAvLyBvZiB0aGUgQVBJcyBzdXBwbHkgdGhlIHVpZC4K
KyAgICAKKyAgICBjbGFzcyBEYXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGE+
IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YSk7CisgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIERhdGEoKSB7
IH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gdmVj
dG9yOworICAgIH07CisgICAgCisgICAgUmVmUHRyPERhdGE+IG1fZGF0YTsKK307CisKK09iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygK
KyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0
cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBw
cm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CitPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3Rv
bSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVh
ZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKTsKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4
NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5
SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTQgKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAogICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1
bnNpZ25lZCBjaGFpbkNvdW50KQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogICAgIDogbV90eXBlKHR5cGUp
Ci0gICAgLCBtX2NoYWluQ291bnQoY2hhaW5Db3VudCkKICAgICAsIG1fc3RydWN0dXJlKHZtLCBv
d25lciwgc3RydWN0dXJlKQorICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQogICAg
ICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKIHsKLSAgICBpZiAoY2hhaW4pCi0gICAgICAg
IG1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwogfQogCiBHZXRCeUlkQWNjZXNzOjp+R2V0
QnlJZEFjY2VzcygpCkBAIC03MSw3ICs2OSw3IEBAIGJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRX
ZWFrKFJlcGF0Y2hCdWYKIHsKICAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2Vk
KG1fc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2No
YWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKKyAgICBpZiAoIW1fY29uZGl0
aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFt
X3N0dWJSb3V0aW5lLT52aXNpdFdlYWsocmVwYXRjaEJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
aCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CkBAIC01MywxMyArNTQsMTIgQEAgcHVibGljOgogICAgIAogICAgIEdl
dEJ5SWRBY2Nlc3MoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hh
aW5Db3VudCgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygKICAgICAg
ICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qID0gMCwgdW5zaWduZWQg
Y2hhaW5Db3VudCA9IDApOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKICAgICAKICAgICB+R2V0QnlJZEFj
Y2VzcygpOwogICAgIApAQCAtNzIsOCArNzIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQogICAg
IAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0
KCk7IH0KLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbkNv
dW50OyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgSklUU3R1YlJv
dXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkBAIC05MSw5ICs5MCw4IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1f
dHlwZTsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2No
YWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OyAvLyBG
SVhNRSB3aGF0IGFib3V0IGJhcnJpZXJzPwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9z
dHViUm91dGluZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4NzYw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBQdXRCeUlk
QWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAgICAgIHJlc3VsdC5tX3R5cGUg
PSBUcmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1
YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIHJl
c3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZvLnUu
cHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAorICAgICAgICAg
ICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwogICAgICAg
ICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCkBAIC02NCw2ICs2NSw5IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHUKIAogYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVwYXRj
aEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikgY29uc3QKIHsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgc3dpdGNo
IChtX3R5cGUpIHsKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJr
ZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQpAQCAtNzQsMTUgKzc4LDExIEBAIGJvb2wgUHV0QnlJ
ZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9jaGFp
bi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU2V0dGVyOgogICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgogICAgICAgICBpZiAoIUhlYXA6
OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1
ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRQcm9wZXJ0
eVNsb3QuaCIKQEAgLTUzLDcgKzU0LDYgQEAgcHVibGljOgogICAgIAogICAgIFB1dEJ5SWRBY2Nl
c3MoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3VudChV
SU5UX01BWCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNjIsMTQgKzYyLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
CiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQsCiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
KQogICAgIHsKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5t
X3R5cGUgPSBUcmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgb2xkU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNl
dCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLnNldCh2
bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwogICAgICAgICByZXN1
bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtOTUsOCArOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0g
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5Db3Vu
dCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwKICAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAog
ICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CkBA
IC0xMDQsMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7
CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUp
OwogICAgICAgICByZXN1bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGNoYWlu
KSB7Ci0gICAgICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Ci0g
ICAgICAgICAgICByZXN1bHQubV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKLSAgICAgICAgfQor
ICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIHJl
c3VsdC5tX2N1c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKICAgICAgICAgcmVzdWx0Lm1fc3R1
YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0Niwx
NyArMTQyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0KCk7
CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgp
KTsKLSAgICAgICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHVuc2ln
bmVkIGNoYWluQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0dGVyKCkg
fHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluQ291bnQ7Ci0gICAgfQorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7
IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHVi
Um91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtMTc4LDggKzE2NCw3IEBAIHByaXZhdGU6CiAgICAg
QWNjZXNzVHlwZSBtX3R5cGU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1
Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOwotICAgIHVuc2lnbmVkIG1fY2hh
aW5Db3VudDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKICAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29u
ZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Rh
dGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAor
eworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQobV9raW5kLCAiIG9mICIs
IG1fdWlkKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAg
ICAgIG91dC5wcmludCgiIGF0ICIsIG9mZnNldCgpLCAiIHdpdGggYXR0cmlidXRlcyAiLCBhdHRy
aWJ1dGVzKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2Ug
QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRoIHByb3RvdHlwZSAiLCBp
bkNvbnRleHQoSlNWYWx1ZShwcm90b3R5cGUoKSksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiIHdpdGggIiwgaW5D
b250ZXh0KHJlcXVpcmVkVmFsdWUoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHJvcGVydHlD
b25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250
ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxW
YWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QKK3sKKyAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkRldGVybWluaW5nIHZhbGlkaXR5IG9mICIsICp0
aGlzLCAiIHdpdGggc3RydWN0dXJlICIsIHBvaW50ZXJEdW1wKHN0cnVjdHVyZSksICIgYW5kIGJh
c2UgIiwKKyAgICAgICAgICAgIEpTVmFsdWUoYmFzZSksICIgYXNzdW1pbmcgaW1wdXJlIHByb3Bl
cnR5IHdhdGNocG9pbnRzIGFyZSBzZXQuXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKCEqdGhp
cykgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQg
YmVjYXVzZSB1bnNldC5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2Ug
YWNjZXNzZXMgYXJlIG5vdCBjYWNoZWFibGUuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6IHsK
KyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSwgY3Vy
cmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY3VycmVudE9mZnNldCAhPSBvZmZzZXQoKSB8
fCBjdXJyZW50QXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAg
IkludmFsaWQgYmVjYXVzZSB3ZSBuZWVkIG9mZnNldCwgYXR0cmlidXRlcyB0byBiZSAiLCBvZmZz
ZXQoKSwgIiwgIiwgYXR0cmlidXRlcygpLAorICAgICAgICAgICAgICAgICAgICAiIGJ1dCB0aGV5
IGFyZSAiLCBjdXJyZW50T2Zmc2V0LCAiLCAiLCBjdXJyZW50QXR0cmlidXRlcywgIlxuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFic2VuY2U6IHsKKyAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSBpdCdzIGEg
ZGljdGlvbmFyeS5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCgpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgIT0gaW52YWxpZE9m
ZnNldCkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiSW52YWxpZCBiZWNhdXNlIHRoZSBwcm9wZXJ0eSBleGlzdHMgYXQgb2Zmc2V0OiAiLCBjdXJy
ZW50T2Zmc2V0LCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkg
IT0gcHJvdG90eXBlKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB0aGUg
cHJvdG90eXBlIGlzICIsIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksICIgZXZlbiB0aG91
Z2ggIgorICAgICAgICAgICAgICAgICAgICAiaXQgc2hvdWxkIGhhdmUgYmVlbiAiLCBKU1ZhbHVl
KHByb3RvdHlwZSgpKSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjogeworICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSW52YWxpZCBiZWNhdXNlIGl0J3MgYSBkaWN0aW9uYXJ5LlxuIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50
T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgeworICAg
ICAgICAgICAgaWYgKGN1cnJlbnRBdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgQ3VzdG9tQWNjZXNz
b3IpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2Ugd2Ug
ZXhwZWN0ZWQgbm90IHRvIGhhdmUgYSBzZXR0ZXIsIGJ1dCB3ZSBoYXZlIG9uZSBhdCBvZmZzZXQg
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQsICIgd2l0aCBhdHRyaWJ1
dGVzICIsIGN1cnJlbnRBdHRyaWJ1dGVzLCAiXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSAhPSBw
cm90b3R5cGUoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHRoZSBwcm90
b3R5cGUgaXMgIiwgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgIiBldmVuIHRob3VnaCAi
CisgICAgICAgICAgICAgICAgICAgICJpdCBzaG91bGQgaGF2ZSBiZWVuICIsIEpTVmFsdWUocHJv
dG90eXBlKCkpLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAgIGlmICghYmFzZSB8fCBiYXNl
LT5zdHJ1Y3R1cmUoKSAhPSBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIENvbnNlcnZhdGl2
ZWx5IHJldHVybiBmYWxzZSwgc2luY2Ugd2UgY2Fubm90IHZlcmlmeSB0aGlzIG9uZSB3aXRob3V0
IGhhdmluZyB0aGUKKyAgICAgICAgICAgIC8vIG9iamVjdC4KKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIklu
dmFsaWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgYmFzZSBvciB0aGUgYmFzZSBoYXMgdGhlIHdy
b25nIHN0cnVjdHVyZTogIiwKKyAgICAgICAgICAgICAgICAgICAgUmF3UG9pbnRlcihiYXNlKSwg
IlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJhY3ksIGFu
ZCBtYXliZSBtb3JlIHJpc2t5IHRoYW4gd2Ugd2FudC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQorICAgICAgICAKKyAgICAgICAgUHJv
cGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVp
ZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUgPSBiYXNlLT5nZXREaXJlY3QoY3Vy
cmVudE9mZnNldCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gcmVxdWlyZWRWYWx1ZSgp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2UgdGhlIHZhbHVlIGlzICIsIGN1
cnJlbnRWYWx1ZSwgIiBidXQgd2UgcmVxdWlyZSAiLCByZXF1aXJlZFZhbHVlKCksCisgICAgICAg
ICAgICAgICAgICAgICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0K
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEVxdWl2
YWxlbmNlOgorICAgICAgICByZXR1cm4gc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzU3RpbGxWYWxpZEFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgYmFzZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBhbiBpbXB1cmUg
cHJvcGVydHkgY2FuIGNhdXNlIGEgcHJvcGVydHkgdG8gYXBwZWFyLCBhbmQgY2FuIGFsc28KKyAg
ICAvLyAic2hhZG93IiBhbiBleGlzdGluZyBKUyBwcm9wZXJ0eSBvbiB0aGUgc2FtZSBvYmplY3Qu
IEhlbmNlIGl0IGFmZmVjdHMgYm90aCBwcmVzZW5jZSBhbmQKKyAgICAvLyBhYnNlbmNlLiBJdCBk
b2Vzbid0IGFmZmVjdCBBYnNlbmNlT2ZTZXR0ZXIgYmVjYXVzZSBpbXB1cmUgcHJvcGVydGllcyBh
cmVuJ3QgZXZlciBzZXR0ZXJzLgorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVz
ZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdoZW5WYWxpZCgKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgV2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAo
c3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBj
YXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHNvbWUgdmFyaWFudCBvZiBpc1ZhbGlk
IHJldHVybmVkIHRydWUsIHdoaWNoCisgICAgICAgIC8vIGltcGxpZXMgdGhhdCB3ZSBhbHJlYWR5
IGNvbmZpcm1lZCB0aGF0IHRoZSBzdHJ1Y3R1cmUga25vd3Mgb2YgdGhlIHByb3BlcnR5LiBXZSBz
aG91bGQKKyAgICAgICAgLy8gYWxzbyBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlIFN0cnVjdHVyZSBp
cyBhIGNhY2hlYWJsZSBkaWN0aW9uYXJ5LCB3aGljaCBtZWFucyB3ZQorICAgICAgICAvLyBzaG91
bGRuJ3QgaGF2ZSBhIFRPQ1RPVSByYWNlIGVpdGhlci4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgV2F0Y2hwb2ludFNl
dCogc2V0OworICAgICAgICBzd2l0Y2ggKGVmZm9ydCkgeworICAgICAgICBjYXNlIE1ha2VOb0No
YW5nZXM6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRX
YXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
bnN1cmVXYXRjaGFiaWxpdHk6CisgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1cmUtPmVuc3VyZVBy
b3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KAorICAgICAgICAgICAgICAgICpIZWFwOjpo
ZWFwKHN0cnVjdHVyZSktPnZtKCksIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFzZXQgfHwgIXNldC0+aXNTdGlsbFZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFi
bGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSwgYmFzZSkKKyAgICAgICAgJiYgaXNXYXRjaGFibGVXaGVuVmFsaWQoc3RydWN0
dXJlLCBlZmZvcnQpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVm
Zm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUs
IGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0
KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAorewor
ICAgIGlmIChoYXNQcm90b3R5cGUoKSAmJiBwcm90b3R5cGUoKSAmJiAhSGVhcDo6aXNNYXJrZWQo
cHJvdG90eXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGhhc1Jl
cXVpcmVkVmFsdWUoKQorICAgICAgICAmJiByZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVx
dWlyZWRWYWx1ZSgpLmlzQ2VsbCgpCisgICAgICAgICYmICFIZWFwOjppc01hcmtlZChyZXF1aXJl
ZFZhbHVlKCkuYXNDZWxsKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNl
cyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoaGFz
UHJvdG90eXBlKCkpCisgICAgICAgIHRyYWNrZWQuY2hlY2socHJvdG90eXBlKCkpOworICAgIAor
ICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkpCisgICAgICAgIHRyYWNrZWQuY2hlY2socmVxdWly
ZWRWYWx1ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbjo6S2luZCBjb25kaXRpb24pCit7CisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBj
YXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQo
IlByZXNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25k
aXRpb246OkFic2VuY2U6CisgICAgICAgIG91dC5wcmludCgiQWJzZW5jZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6
CisgICAgICAgIG91dC5wcmludCgiQWJzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnByaW50
KCJFcXVpdmFsZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25k
aXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFByb3BlcnR5Q29uZGl0aW9u
X2gKKyNkZWZpbmUgUHJvcGVydHlDb25kaXRpb25faAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJh
Y2tlZFJlZmVyZW5jZXM7CisKK2NsYXNzIFByb3BlcnR5Q29uZGl0aW9uIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIEtpbmQgeworICAgICAgICBQcmVzZW5jZSwKKyAgICAgICAgQWJzZW5jZSwKKyAgICAg
ICAgQWJzZW5jZU9mU2V0dGVyLAorICAgICAgICBFcXVpdmFsZW5jZSAvLyBBbiBhZGFwdGl2ZSB3
YXRjaHBvaW50IG9uIHRoaXMgd2lsbCBiZSBhIHBhaXIgb2Ygd2F0Y2hwb2ludHMsIGFuZCB3aGVu
IHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMsIHdlIHdpbGwgc2V0IHRoZSByZXBsYWNlbWVudCB3
YXRjaHBvaW50IG9uIHRoZSBuZXcgc3RydWN0dXJlLgorICAgIH07CisgICAgCisgICAgUHJvcGVy
dHlDb25kaXRpb24oKQorICAgICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5k
KFByZXNlbmNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAg
IH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCisgICAgICAgIDogbV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tpbmQoQWJzZW5j
ZSkKKyAgICB7CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlV2l0aG91dEJhcnJpZXIoVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAg
ICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQcmVzZW5jZTsK
KyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2Uub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXN1
bHQudS5wcmVzZW5jZS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNl
KAorICAgICAgICBWTSYsIEpTQ2VsbCosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIHJldHVy
biBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICB9
CisKKyAgICAvLyBOT1RFOiBUaGUgcHJvdG90eXBlIGlzIHRoZSBzdG9yZWRQcm90b3R5cGUgbm90
IHRoZSBwcm90b3R5cGVGb3JMb29rdXAuCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFi
c2VuY2VXaXRob3V0QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAg
ICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBYnNlbmNlOwor
ICAgICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9u
IGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikK
KyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJu
IGFic2VuY2VXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcigK
KyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
dWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gQWJzZW5jZU9mU2V0dGVyOworICAg
ICAgICByZXN1bHQudS5hYnNlbmNlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFi
c2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93
bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICBy
ZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VXaXRob3V0
QmFycmllcigKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gRXF1aXZhbGVuY2U7CisgICAg
ICAgIHJlc3VsdC51LmVxdWl2YWxlbmNlLnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgIAorICAgIHN0YXRpYyBQcm9w
ZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpICYmIG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcih1
aWQsIHZhbHVlKTsKKyAgICB9CisgICAgICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICAKKyAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAKKyAgICBib29sIGhhc09mZnNldCgp
IGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzT2Zm
c2V0KCkpOworICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgfQorICAgIGJv
b2wgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IFBy
ZXNlbmNlOyB9OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0F0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLmF0
dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUHJvdG90eXBlKCkgY29uc3QgeyBy
ZXR1cm4gISEqdGhpcyAmJiAobV9raW5kID09IEFic2VuY2UgfHwgbV9raW5kID09IEFic2VuY2VP
ZlNldHRlcik7IH0KKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNQcm90b3R5cGUoKSk7CisgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJv
dG90eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1JlcXVpcmVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsgfQorICAgIEpTVmFsdWUg
cmVxdWlyZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUmVxdWlyZWRW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh1LmVxdWl2YWxlbmNlLnZh
bHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwg
RHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IFdURjo6UHRySGFzaDxVbmlxdWVkU3RyaW5nSW1wbCo+OjpoYXNoKG1fdWlkKSAr
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2tpbmQpOworICAgICAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHUucHJlc2Vu
Y2Uub2Zmc2V0OworICAgICAgICAgICAgcmVzdWx0ICs9IHUucHJlc2VuY2UuYXR0cmlidXRlczsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFic2VuY2U6CisgICAgICAgIGNhc2Ug
QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU09i
amVjdCo+OjpoYXNoKHUuYWJzZW5jZS5wcm90b3R5cGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgICAgICByZXN1bHQgKz0gRW5jb2RlZEpT
VmFsdWVIYXNoOjpoYXNoKHUuZXF1aXZhbGVuY2UudmFsdWUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChtX3VpZCAhPSBvdGhlci5tX3VpZCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKG1fa2luZCAhPSBvdGhlci5tX2tpbmQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgUHJl
c2VuY2U6CisgICAgICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5vZmZzZXQgPT0gb3RoZXIudS5w
cmVzZW5jZS5vZmZzZXQKKyAgICAgICAgICAgICAgICAmJiB1LnByZXNlbmNlLmF0dHJpYnV0ZXMg
PT0gb3RoZXIudS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgICAgICBjYXNlIEFic2VuY2U6Cisg
ICAgICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHUuYWJzZW5j
ZS5wcm90b3R5cGUgPT0gb3RoZXIudS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICAgICAgY2FzZSBF
cXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LmVxdWl2YWxlbmNlLnZhbHVlID09IG90
aGVyLnUuZXF1aXZhbGVuY2UudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhbV91aWQgJiYgbV9raW5kID09IEFic2VuY2U7CisgICAgfQorICAgIAorICAgIC8vIFR3
byBjb25kaXRpb25zIGFyZSBjb21wYXRpYmxlIGlmIHRoZXkgYXJlIGlkZW50aWNhbCBvciBpZiB0
aGV5IHNwZWFrIG9mIGRpZmZlcmVudCB1aWRzLiBJZgorICAgIC8vIGZhbHNlIGlzIHJldHVybmVk
LCB5b3UgaGF2ZSB0byBkZWNpZGUgaG93IHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0IC0gZm9yIGV4
YW1wbGUgaWYgdGhlcmUgaXMKKyAgICAvLyBhIFByZXNlbmNlIGFuZCBhbiBFcXVpdmFsZW5jZSB0
aGVuIGluIHNvbWUgY2FzZXMgeW91J2xsIHdhbnQgdGhlIG1vcmUgZ2VuZXJhbCBvZiB0aGUgdHdv
CisgICAgLy8gd2hpbGUgaW4gb3RoZXIgY2FzZXMgeW91J2xsIHdhbnQgdGhlIG1vcmUgc3BlY2lm
aWMgb2YgdGhlIHR3by4gVGhpcyB3aWxsIGFsc28gcmV0dXJuIGZhbHNlCisgICAgLy8gZm9yIGNv
bnRyYWRpY3Rpb25zLCBsaWtlIFByZXNlbmNlIGFuZCBBYnNlbmNlIG9uIHRoZSBzYW1lIHVpZC4g
QnkgY29udmVudGlvbiwgaW52YWxpZAorICAgIC8vIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGli
bGUgd2l0aCBhbnl0aGluZy4KKyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgUHJvcGVy
dHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAh
b3RoZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9
PSBvdGhlciB8fCB1aWQoKSAhPSBvdGhlci51aWQoKTsKKyAgICB9CisgICAgCisgICAgLy8gQ2hl
Y2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3BlcnR5IHdv
bid0IGJlIGludGVyY2VwdGVkLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyKSBj
b25zdDsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJv
cGVydHkgd2F0Y2hwb2ludCB0byBlbnN1cmUgdmFsaWRpdHkgZXZlbiBpZgorICAgIC8vIGlzU3Rp
bGxWYWxpZEFjY29yZGluZ1RvU3RydWN0dXJlKCkgcmV0dXJuZWQgdHJ1ZS4KKyAgICBib29sIHZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7
CisgICAgCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBjb25kaXRpb24gaXMgc3RpbGwgdmFsaWQgcmln
aHQgbm93IGZvciB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCBzdHJ1Y3R1cmUuCisgICAgLy8gTWF5IGNv
bnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgaWYgdGhlIG9iamVjdCBhbmQgc3RydWN0dXJlIGFs
b25lIGRvbid0IGd1YXJhbnRlZSB0aGUKKyAgICAvLyBjb25kaXRpb24uIFRoaXMgaGFwcGVucyBm
b3IgYW4gQWJzZW5jZSBjb25kaXRpb24gb24gYW4gb2JqZWN0IHRoYXQgbWF5IGhhdmUgaW1wdXJl
CisgICAgLy8gcHJvcGVydGllcy4gSWYgdGhlIG9iamVjdCBpcyBub3Qgc3VwcGxpZWQsIHRoZW4g
YSAidHJ1ZSIgcmV0dXJuIGluZGljYXRlcyB0aGF0IGNoZWNraW5nIGlmCisgICAgLy8gYW4gb2Jq
ZWN0IGhhcyB0aGUgZ2l2ZW4gc3RydWN0dXJlIGd1YXJhbnRlZXMgdGhlIGNvbmRpdGlvbiBzdGls
bCBob2xkcy4gSWYgYW4gb2JqZWN0IGlzCisgICAgLy8gc3VwcGxpZWQsIHRoZW4geW91IG1heSBu
ZWVkIHRvIHVzZSBzb21lIG90aGVyIHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QgdG8gZ3VhcmFu
dGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbiBpbiBhZGRpdGlvbiB0byB0aGUgc3RydWN0dXJlIGNo
ZWNrLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0g
bnVsbHB0cikgY29uc3Q7CisgICAgCisgICAgLy8gSW4gc29tZSBjYXNlcywgdGhlIGNvbmRpdGlv
biBpcyBub3Qgd2F0Y2hhYmxlLCBidXQgY291bGQgYmUgbWFkZSB3YXRjaGFibGUgYnkgZW5hYmxp
bmcgdGhlCisgICAgLy8gYXBwcm9wcmlhdGUgd2F0Y2hwb2ludC4gRm9yIGV4YW1wbGUsIHJlcGxh
Y2VtZW50IHdhdGNocG9pbnRzIGFyZSBlbmFibGVkIG9ubHkgd2hlbiBzb21lCisgICAgLy8gYWNj
ZXNzIGlzIGNhY2hlZCBvbiB0aGUgcHJvcGVydHkgaW4gc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMg
bWFpbmx5IHRvIHNhdmUgc3BhY2UgZm9yCisgICAgLy8gZGljdGlvbmFyeSBwcm9wZXJ0aWVzIG9y
IHByb3BlcnRpZXMgdGhhdCBuZXZlciBnZXQgdmVyeSBob3QuIEJ1dCwgaXQncyBhbHdheXMgc2Fm
ZSB0bworICAgIC8vIGVuYWJsZSB3YXRjaGluZywgcHJvdmlkZWQgdGhhdCB0aGlzIGlzIGNhbGxl
ZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBlbnVtIFdhdGNoYWJpbGl0eUVmZm9ydCB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZmF1bHQuIEl0IG1lYW5zIHRoYXQgd2UgZG9uJ3QgY2hh
bmdlIHRoZSBzdGF0ZSBvZiBhbnkgU3RydWN0dXJlIG9yCisgICAgICAgIC8vIG9iamVjdCwgYW5k
IGltcGxpZXMgdGhhdCBpZiB0aGUgcHJvcGVydHkgaGFwcGVucyBub3QgdG8gYmUgd2F0Y2hhYmxl
IHRoZW4gd2UgZG9uJ3QgbWFrZQorICAgICAgICAvLyBpdCB3YXRjaGFibGUuIFRoaXMgaXMgbWFu
ZGF0b3J5IGlmIGNhbGxpbmcgZnJvbSBhIEpJVCB0aHJlYWQuIFRoaXMgaXMgYWxzbyBzb21ld2hh
dAorICAgICAgICAvLyBwcmVmZXJhYmxlIHdoZW4gZmlyc3QgZGVjaWRpbmcgd2hldGhlciB0byB3
YXRjaCBhIGNvbmRpdGlvbiBmb3IgdGhlIGZpcnN0IHRpbWUgKGkuZS4KKyAgICAgICAgLy8gbm90
IGZyb20gYSB3YXRjaHBvaW50IGZpcmUgdGhhdCBjYXVzZXMgdXMgdG8gc2VlIGlmIHdlIHNob3Vs
ZCBhZGFwdCksIHNpbmNlIGEKKyAgICAgICAgLy8gd2F0Y2hwb2ludCBub3QgYmVpbmcgaW5pdGlh
bGl6ZWQgZm9yIHdhdGNoaW5nIGltcGxpZXMgdGhhdCBtYXliZSB3ZSBkb24ndCBrbm93IGVub3Vn
aAorICAgICAgICAvLyB5ZXQgdG8gbWFrZSBpdCBwcm9maXRhYmxlIHRvIHdhdGNoIC0tIGFzIGlu
LCB0aGUgdGhpbmcgYmVpbmcgd2F0Y2hlZCBtYXkgbm90IGhhdmUKKyAgICAgICAgLy8gc3RhYmls
aXplZCB5ZXQuIFdlIHByZWZlciB0byBvbmx5IGFzc3VtZSB0aGF0IGEgY29uZGl0aW9uIHdpbGwg
aG9sZCBpZiBpdCBoYXMgYmVlbgorICAgICAgICAvLyBrbm93biB0byBob2xkIGZvciBhIHdoaWxl
IGFscmVhZHkuCisgICAgICAgIE1ha2VOb0NoYW5nZXMsCisgICAgICAgIAorICAgICAgICAvLyBE
byB3aGF0IGl0IHRha2VzIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9wZXJ0eSBjYW4gYmUgd2F0Y2hl
ZCwgaWYgZG9pbmcgc28gaGFzIG5vCisgICAgICAgIC8vIHVzZXItb2JzZXJ2YWJsZSBlZmZlY3Qu
IEZvciBub3cgdGhpcyBqdXN0IG1lYW5zIHRoYXQgd2Ugd2lsbCBlbnN1cmUgdGhhdCBhIHByb3Bl
cnR5CisgICAgICAgIC8vIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgaXMgZW5hYmxlZCBpZiBpdCBo
YWRuJ3QgYmVlbiBlbmFibGVkIGFscmVhZHkuIERvIG5vdCB1c2UgdGhpcworICAgICAgICAvLyBm
cm9tIEpJVCB0aHJlYWRzLCBzaW5jZSB0aGUgYWN0IG9mIGVuYWJsaW5nIHdhdGNocG9pbnRzIGlz
IG5vdCB0aHJlYWQtc2FmZS4KKyAgICAgICAgRW5zdXJlV2F0Y2hhYmlsaXR5CisgICAgfTsKKyAg
ICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQg
ZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9p
bnQgb24gdGhlIHN0cnVjdHVyZSBhbmQgcG9zc2libHkgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNo
cG9pbnQuCisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIsIFdhdGNo
YWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5
IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0
dXJlLgorICAgIGJvb2wgaXNXYXRjaGFibGUoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0
KiBiYXNlID0gbnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29u
c3Q7CisgICAgCisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gQ3VycmVudGx5LCB0aGlzIGlzIHJl
cXVpcmVkIGZvciBhbGwgb2Ygb3VyIGNvbmRpdGlvbnMuCisgICAgICAgIHJldHVybiAhISp0aGlz
OworICAgIH0KKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2
YWxlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdHMg
aW52b2x2ZWQgaW4gdGhpcyBhcmUgc3RpbGwgbGl2ZS4KKyAgICBib29sIGlzU3RpbGxMaXZlKCkg
Y29uc3Q7CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJl
ZmVyZW5jZXMmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIGlzV2F0Y2hhYmxlV2hlblZh
bGlkKFN0cnVjdHVyZSosIFdhdGNoYWJpbGl0eUVmZm9ydCkgY29uc3Q7CisKKyAgICBVbmlxdWVk
U3RyaW5nSW1wbCogbV91aWQ7CisgICAgS2luZCBtX2tpbmQ7CisgICAgdW5pb24geworICAgICAg
ICBzdHJ1Y3QgeworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgfSBwcmVzZW5jZTsKKyAgICAgICAgc3Ry
dWN0IHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGU7CisgICAgICAgIH0gYWJzZW5j
ZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEVuY29kZWRKU1ZhbHVlIHZhbHVlOwor
ICAgICAgICB9IGVxdWl2YWxlbmNlOworICAgIH0gdTsKK307CisKK3N0cnVjdCBQcm9wZXJ0eUNv
bmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bCgKKyAgICAgICAgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IFByb3BlcnR5Q29u
ZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpLaW5kKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OlByb3BlcnR5Q29uZGl0
aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gUHJvcGVydHlDb25k
aXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
OTAsMTkgKzkwLDIyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20K
ICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShv
cF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmUpKTsKICAgICAKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IGluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlLmdldCgp
OwotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGluc3RydWN0aW9uWzddLnUuc3RydWN0dXJl
Q2hhaW4uZ2V0KCk7Ci0gICAgQVNTRVJUKG5ld1N0cnVjdHVyZSk7Ci0gICAgQVNTRVJUKGNoYWlu
KTsKICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAKLSAgICBSZWZQdHI8
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gaW50ZW5kZWRDaGFpbjsKLSAgICBpZiAoY2hhaW4pCi0g
ICAgICAgIGludGVuZGVkQ2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bihwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGNoYWluKSk7CisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmIChpbnN0cnVjdGlvblswXS51Lm9wY29k
ZSA9PSBMTEludDo6Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbCkKKyAg
ICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmUpKSB7CisgICAgICAgIGNvbmRp
dGlvblNldCA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRl
ck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZh
cmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGludGVuZGVkQ2hhaW4u
Z2V0KCksIG9mZnNldCk7CisgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiB9CiAKIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCkBAIC0xNjUsMTYgKzE2OCwxNCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAogICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAg
ICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKSB7Ci0gICAgICAgICAg
ICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAg
ICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRp
b24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAogICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwK
LSAgICAgICAgICAgICAgICBjaGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBj
b25kaXRpb25TZXQsIG9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpAQCAtMjE5LDE1ICsyMjAsMTEgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBh
Y2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAg
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vz
cy5jaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJs
b2NrLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5jaGFpbigpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQo
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1Bh
dGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vz
cy5uZXdTdHJ1Y3R1cmUoKSwgY2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAg
ICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRp
b25TZXQsIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCkBAIC0yMzUsNyArMjMyLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYWNjZXNzLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNv
bXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwg
YWNjZXNzLmNoYWluKCksIGFjY2Vzcy5jaGFpbkNvdW50KCksIHVpZCk7CisgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CkBA
IC0yNTMsNyArMjUwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ss
ICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojpz
ZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0
dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0
YXR1cy5jb25kaXRpb25TZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6bW92ZShj
YWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzY4LDIyICszNjUsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgp
KQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAg
Ci0gICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAgICBpZiAoIWlz
RGlyZWN0KSB7Ci0gICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAg
ICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFkLW9ubHkgcHJv
cGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNl
cHRTdG9yZVRvKHVpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBj
aGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9yIGRp
Y3Rpb25hcmllcykKLSAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhlIGRpY3Rpb25hcnkg
Y2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbm90IGJlZW4KLSAg
ICAgICAgICAgIC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0cmFuc2l0aW9uLiBB
bmQgcmVhbGx5IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKLSAgICAgICAgICAgIC8vIGJh
aWwgaGVyZSBpcyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9wdGlt
aXppbmcgSklUIGdvIGFuZCBmbGF0dGVuCi0gICAgICAgICAgICAvLyBkaWN0aW9uYXJpZXMgaWYg
d2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3ZXJlIG5ldmVy
IHVzZWQgYXMKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUgcHJvdG90
eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBvZgotICAg
ICAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwuCi0gICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6ZWQoKSkKKyAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgICAgICB9CiAgICAgCkBAIC0zOTQsNyArMzgwLDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQu
YXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4uZ2V0KCksIG9mZnNldCkpOworICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRp
b25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNp
b24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0
QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9raW5kID0gb3RoZXIubV9raW5kOwogICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CiAgICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9j
b25zdGFudENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJh
c2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29m
ZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQog
ICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1
cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNjQsMjkgKzYzLDI2IEBAIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGMKIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gVHJhbnNpdGlvbjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7
CiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgIGlmIChzdHJ1
Y3R1cmVDaGFpbikKLSAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQu
bV9jb25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gU2V0dGVyOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBp
ZiAoY2hhaW4pIHsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9jb25zdGFu
dENoZWNrcyk7Ci0gICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBjaGFpbi0+dGVybWlu
YWxQcm90b3R5cGUoKTsKLSAgICB9CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxs
TGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTEzNCwxOCArMTMwLDYgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygp
IGNvbnN0CiAgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKLVN0cnVjdHVyZVNldCBQ
dXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGtpbmQo
KSA9PSBTZXR0ZXIpOwotICAgIAotICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlKCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KIGJvb2wgUHV0
QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikK
IHsKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCkBAIC0xNTUsOCArMTM5LDgg
QEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogICAgIGNhc2UgUmVw
bGFjZToKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBSZXBs
YWNlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudENoZWNrcy5pc0VtcHR5KCkpOwot
ICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uc3RhbnRDaGVja3MuaXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAg
QVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTk2LDYgKzE4MCw3IEBAIGJvb2wgUHV0QnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFj
ZS5tX29mZnNldCk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7CiAg
ICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAgICBBU1NFUlQocmVw
bGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwogICAgIAogICAgIC8vIFRoaXMgc29ydCBv
ZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdl
IGFkZCBhIG5ldyBmaWVsZCB3aGljaAogICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBT
IHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRv
ZXNuJ3QKQEAgLTIzMiwxNSArMjE3LDEzIEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNv
bnRleHQoUHJpbnQKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9u
OiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAg
ICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsi
LAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29udGV4
dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29udGV4
dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4i
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoKICAgICAgICAg
b3V0LnByaW50KAogICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUo
KSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3Rh
bnRDaGVja3MoKSwgY29udGV4dCksICJdIik7Ci0gICAgICAgIGlmIChtX2FsdGVybmF0ZUJhc2Up
Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChK
U1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKKyAgICAgICAgICAgIGluQ29udGV4
dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdIik7CiAgICAgICAgIG91dC5wcmludCgiLCBv
ZmZzZXQgPSAiLCBtX29mZnNldCk7CiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1f
Y2FsbExpbmtTdGF0dXMpOwogICAgICAgICBvdXQucHJpbnQoIj4iKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBQdXRCeUlkVmFyaWFudF9o
CiAjZGVmaW5lIFB1dEJ5SWRWYXJpYW50X2gKIAotI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1
ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCiAKQEAgLTQ2
LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAgICAgICAgOiBtX2tp
bmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCi0gICAgICAgICwg
bV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNl
dCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYgKzUzLDE1IEBAIHB1YmxpYzoKICAgICBQdXRCeUlk
VmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVy
YXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFu
dCByZXBsYWNlKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25z
dCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5
SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7Cisg
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQp
OwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgICAg
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtT
dGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwogICAgIAogICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIApAQCAtNzYsNiArNzQsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CiAgICAgfQogICAgIAor
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCiAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwpA
QCAtMTAwLDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2Uo
KSBjb25zdDsKICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKLSAgICBjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9jb25zdGFudENoZWNrczsKLSAgICB9CisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QK
ICAgICB7CkBAIC0xMTEsMTQgKzExMSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2Zm
c2V0OwogICAgIH0KICAgICAKLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBt
X2FsdGVybmF0ZUJhc2U7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0
dXJlKCkgY29uc3Q7Ci0gICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKQEAgLTEzNiw4
ICsxMjgsNyBAQCBwcml2YXRlOgogICAgIEtpbmQgbV9raW5kOwogICAgIFN0cnVjdHVyZVNldCBt
X29sZFN0cnVjdHVyZTsKICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwotICAgIENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCog
bV9hbHRlcm5hdGVCYXNlOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0
aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDMzICszNyw0NiBAQCBuYW1lc3BhY2UgSlNDIHsKIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6On5TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
KCkgeyB9CiAKIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSwKICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlciwKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4mIGhlYWQp
CiB7Ci0gICAgaGVhZCA9IHN0ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludD4oaG9sZGVyLCBXVEY6Om1vdmUoaGVhZCkpOworICAgIGhlYWQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+KGtleSwgaG9sZGVyLCBXVEY6
Om1vdmUoaGVhZCkpOwogICAgIHJldHVybiBoZWFkLmdldCgpOwogfQogCiB2b2lkIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikK
IHsKLSAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVtaXNlOiBzdHVi
IHJlc2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgotICAgIC8vIFRoYXQgd29ya3MsIGJlY2F1
c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3MgbGlzdCwg
YW5kCi0gICAgLy8gdGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0
IGFnYWluc3QgdGhlIHNldCBjaGFuZ2luZy4KLSAgICBtX2hvbGRlci5jb2RlQmxvY2soKS0+cmVz
ZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICBpZiAoIW1fa2V5IHx8ICFtX2tleS5p
c1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAg
ICAgICAvLyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVtaXNlOiBzdHViIHJl
c2V0IHJlbW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgICAgICAvLyBUaGF0IHdvcmtzLCBiZWNh
dXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3Qs
IGFuZAorICAgICAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9yIGZpcmluZyBpcyBy
b2J1c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgorICAgICAgICBtX2hvbGRlci5jb2RlQmxv
Y2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5zdHViSW5mbygpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChtX2tleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNl
bmNlKSB7CisgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgcHJlc2VuY2UgY29uZGl0aW9uLCBsZXQn
cyB3YXRjaCB0aGUgcHJvcGVydHkgZm9yIHJlcGxhY2VtZW50cy4gVGhpcyBpcyBwcm9maXRhYmxl
CisgICAgICAgIC8vIGZvciB0aGUgREZHLCB3aGljaCB3aWxsIHdhbnQgdGhlIHJlcGxhY2VtZW50
IHNldCB0byBiZSB2YWxpZCBpbiBvcmRlciB0byBkbyBjb25zdGFudCBmb2xkaW5nLgorICAgICAg
ICBWTSYgdm0gPSAqSGVhcDo6aGVhcChtX2tleS5vYmplY3QoKSktPnZtKCk7CisgICAgICAgIG1f
a2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBtX2tleS5vZmZzZXQoKSk7CisgICAgfQorCisgICAgbV9rZXkub2JqZWN0KCkt
PnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCh0aGlzKTsKIH0KIAogV2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjp+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZv
KCkKIHsKIH0KIAotU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNP
blN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KCkKK1N0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2lu
dChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewotICAgIHJldHVybiBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKCp0aGlzLCBtX2hlYWQpOworICAgIHJl
dHVybiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKGtleSwgKnRoaXMsIG1f
aGVhZCk7CiB9CiAKIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKICAg
ICBSZWZQdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVmLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCisgICAg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5KQogewogICAgIGlmICghaG9sZGVyUmVmKQogICAgICAgICBob2xkZXJSZWYgPSBhZG9w
dFJlZihuZXcgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKGNvZGVCbG9jaywgc3R1Yklu
Zm8pKTsKQEAgLTcyLDcgKzg1LDcgQEAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCog
V2F0Y2hwbwogICAgICAgICBBU1NFUlQoaG9sZGVyUmVmLT5tX3N0dWJJbmZvID09IHN0dWJJbmZv
KTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludCgpOwor
ICAgIHJldHVybiBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoa2V5KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHJldmlzaW9u
IDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5k
ZWYgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludF9oCiAjZGVmaW5lIFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnRfaAogCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNDYs
MTUgKzQ3LDExIEBAIGNsYXNzIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQgOiAKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KAotICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8m
IGhvbGRlcikKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAogICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJl
U3R1YkluZm8mIGhvbGRlciwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQ+IG5leHQpCi0gICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQorICAg
ICAgICA6IG1fa2V5KGtleSkKKyAgICAgICAgLCBtX2hvbGRlcihob2xkZXIpCiAgICAgICAgICwg
bV9uZXh0KFdURjo6bW92ZShuZXh0KSkKICAgICB7CiAgICAgfQpAQCAtNjIsNiArNTksNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgpOwog
ICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBwdXNoKAor
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAogICAgICAgICBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlciwKICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+JiBoZWFkKTsKIApAQCAtNjksNiAr
NjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBG
aXJlRGV0YWlsJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CisgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gbV9rZXk7CiAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBtX2hvbGRl
cjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4g
bV9uZXh0OwogfTsKQEAgLTgzLDExICs4MiwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgfldhdGNo
cG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygpOwogICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoKTsKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXkpOwogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
KiBlbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAogICAgICAgICBSZWZQdHI8V2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVmLAotICAgICAgICBDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyopOworICAgICAgICBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpOwogICAgIAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8oKSBjb25zdCB7IHJldHVybiBtX3N0dWJJbmZvOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4LDkgKzQ4LDEyIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKICAgICAg
ICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fZGlyZWN0OgorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQ
b2ludGVyKHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKKyAgICAgICAgdS5w
dXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBudWxscHRyOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3JlcGxhY2U6CiAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CiAgICAgICAgIC8vIFRoZXNl
IGluc3RydWN0aW9ucyBkb24ndCBoYXZlIHRvIHJlbGVhc2UgYW55IGFsbG9jYXRlZCBtZW1vcnkK
QEAgLTc1LDggKzc4LDEwIEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVy
ZW4KICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgogICAgICAgICBpZiAoIUhlYXA6
OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCkpCi0g
ICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1
cmUuZ2V0KCkpCi0gICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNp
dGlvbi5jaGFpbi5nZXQoKSkpCisgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5wdXRC
eUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIU9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRl
cigKKyAgICAgICAgICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCku
YXJlU3RpbGxMaXZlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9u
IDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5zdHJ1
Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNs
dWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qu
aCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgpAQCAtMTEzLDcgKzExNCw3IEBAIHN0cnVjdCBT
dHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAgICAvLyBQdXRCeUlkKgogCi0gICAgdm9pZCBpbml0UHV0
QnlJZFRyYW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3Vz
U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBi
b29sIGlzRGlyZWN0KQorICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCwgYm9vbCBpc0Rp
cmVjdCkKICAgICB7CiAgICAgICAgIGlmIChpc0RpcmVjdCkKICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OwpAQCAtMTIyLDcgKzEyMyw3
IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAgICAgICAgdS5wdXRCeUlkVHJhbnNp
dGlvbi5wcmV2aW91c1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBwcmV2aW91c1N0cnVjdHVyZSk7
CiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0
cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uc2V0KHZtLCBvd25l
ciwgY2hhaW4pOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCA9
IGNvbmRpdGlvblNldC5yZWxlYXNlUmF3UG9pbnRlcigpOwogICAgIH0KIAogICAgIHZvaWQgaW5p
dFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2Jq
ZWN0U3RydWN0dXJlKQpAQCAtMTc1LDEwICsxNzYsMTEgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJ
bmZvIHsKICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgfQogICAgICAgICAKLSAgICBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KENvZGVCbG9jayogY29kZUJs
b2NrKQorICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQo
CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYgY29uZGl0aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5j
ZUFuZEFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0
aGlzKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRpdGlv
bik7CiAgICAgfQogICAgIAogICAgIGludDhfdCBhY2Nlc3NUeXBlOwpAQCAtMjE3LDIzICsyMTks
MTIgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwogICAgICAgICB9IGdldEJ5SWRT
ZWxmOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1
Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFN0cnVjdHVyZT4gcHJvdG90eXBlU3RydWN0dXJlOwotICAgICAgICAgICAgYm9vbCBpc0RpcmVj
dDsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG87Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAg
ICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgOiAxOwot
ICAgICAgICB9IGdldEJ5SWRDaGFpbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFBv
bHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gZ2V0QnlJZExpc3Q7CiAgICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJl
dmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
c3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4g
Y2hhaW47CisgICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7CiAgICAgICAgIH0gcHV0
QnlJZFRyYW5zaXRpb247CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3OSw3ICsx
Nzc5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgICAgICAvLyBzb21ldGhpbmcgbW9yZSBzdWJ0bGU/CiAgICAgICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rh
dHVzLm51bVZhcmlhbnRzKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCAhc3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgdGhpbmcgd29uJ3QgZ2l2ZSB1cyBhIHZhcmlhbnQgdGhhdCBpbnZv
bHZlcyBwcm90b3R5cGVzLiBJZiBpdCBkaWQsIHdlJ2QKKyAgICAgICAgICAgICAgICAgICAgLy8g
aGF2ZSBtb3JlIHdvcmsgdG8gZG8gaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCBzdGF0dXNbaV0uY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRS
ZXN1bHQgPQogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFBy
b3BlcnR5KHZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNvbnN0YW50UmVzdWx0KSB7CkBAIC0yMDYwLDMwICsyMDYzLDIyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0
OwogICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9m
ZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSB2
YXJpYW50LnN0cnVjdHVyZVNldCgpOworICAgICAgICBmb3IgKGNvbnN0IE11bHRpR2V0QnlPZmZz
ZXRDYXNlJiBnZXRDYXNlIDogbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5jYXNlcykgewor
ICAgICAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IGdldENhc2Uuc2V0KCk7CiAgICAgICAgICAg
ICBzZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgYmFzZUZvckxvYWQ7Ci0gICAgICAgICAg
ICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAgICAgICAgICAgICAgYmFzZUZvckxv
YWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2UubV92YWx1ZTsKLSAgICAgICAgICAgIEpTVmFsdWUg
Y29uc3RhbnRSZXN1bHQgPQotICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQ
cm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAgYmFzZUZvckxvYWQsIHZhcmlhbnQuYmFzZVN0
cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIGlmICghY29uc3RhbnRS
ZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRC
eU9mZnNldE1ldGhvZDo6Q29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhl
YXBUb3AoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwogICAgICAgICAg
ICAgdGhpc1Jlc3VsdC5zZXQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAg
ICAgICAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAorICAgICAgICAgICAgICAgICpn
ZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3Vs
dCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtl
eSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChr
ZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSk7Cit9CisKK3ZvaWQg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5v
YmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3N0cnVjdHVy
ZVdhdGNocG9pbnQpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fa2V5Lm9i
amVjdCgpLT5zdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KG1fa2V5LnVpZCgpKTsKKyAgICBX
YXRjaHBvaW50U2V0KiBzZXQgPSBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPnByb3BlcnR5
UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgc2V0LT5hZGQoJm1fcHJvcGVy
dHlXYXRjaHBvaW50KTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQ6OmZpcmUoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIC8vIE9uZSBv
ZiB0aGUgd2F0Y2hwb2ludHMgZmlyZWQsIGJ1dCB0aGUgb3RoZXIgb25lIGRpZG4ndC4gTWFrZSBz
dXJlIHRoYXQgbmVpdGhlciBvZiB0aGVtIGFyZQorICAgIC8vIGluIGFueSBzZXQgYW55bW9yZS4g
VGhpcyBzaW1wbGlmaWVzIHRoaW5ncyBieSBhbGxvd2luZyB1cyB0byByZWluc3RhbGwgdGhlIHdh
dGNocG9pbnRzCisgICAgLy8gd2hlcmV2ZXIgZnJvbSBzY3JhdGNoLgorICAgIGlmIChtX3N0cnVj
dHVyZVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAgICAgICAgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50
LnJlbW92ZSgpOworICAgIGlmIChtX3Byb3BlcnR5V2F0Y2hwb2ludC5pc09uTGlzdCgpKQorICAg
ICAgICBtX3Byb3BlcnR5V2F0Y2hwb2ludC5yZW1vdmUoKTsKKyAgICAKKyAgICBpZiAobV9rZXku
aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAg
ICAgICAgaW5zdGFsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChE
Rkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAg
ICAgICAiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiAoIiwgbV9rZXks
ICIpIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgfQorICAgIAorICAgIFN0cmluZ1By
aW50U3RyZWFtIG91dDsKKyAgICBvdXQucHJpbnQoIkFkYXB0YXRpb24gb2YgIiwgbV9rZXksICIg
ZmFpbGVkOiAiLCBkZXRhaWwpOworICAgIAorICAgIFN0cmluZ0ZpcmVEZXRhaWwgc3RyaW5nRGV0
YWlsKG91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5qZXR0
aXNvbigKKyAgICAgICAgUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJnN0cmluZ0RldGFpbCk7Cit9CisKK3ZvaWQgQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIHB0cmRp
ZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAgQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3N0cnVjdHVyZVdhdGNocG9pbnQpOworICAgIAor
ICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCogcGFyZW50ID0KKyAg
ICAgICAgYml0d2lzZV9jYXN0PEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dCo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIG15T2Zmc2V0KTsK
KyAgICAKKyAgICBwYXJlbnQtPmZpcmUoZGV0YWlsKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hwb2ludDo6ZmlyZUludGVy
bmFsKAorICAgIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBwdHJkaWZmX3QgbXlP
ZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoCisgICAgICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludCwgbV9wcm9wZXJ0eVdhdGNocG9pbnQpOworICAgIAorICAgIEFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCogcGFyZW50ID0KKyAgICAgICAgYml0
d2lzZV9jYXN0PEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCo+KAorICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIG15T2Zmc2V0KTsKKyAgICAKKyAg
ICBwYXJlbnQtPmZpcmUoZGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworCitwdWJsaWM6CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisgICAgCisgICAgdm9pZCBpbnN0
YWxsKCk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1Ymxp
YyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0cnVjdHVyZVdhdGNocG9pbnQo
KSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwo
Y29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisgICAgY2xhc3MgUHJvcGVydHlX
YXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUHJv
cGVydHlXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZv
aWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9OworICAg
IAorICAgIHZvaWQgZmlyZShjb25zdCBGaXJlRGV0YWlsJik7CisgICAgCisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBT
dHJ1Y3R1cmVXYXRjaHBvaW50IG1fc3RydWN0dXJlV2F0Y2hwb2ludDsKKyAgICBQcm9wZXJ0eVdh
dGNocG9pbnQgbV9wcm9wZXJ0eVdhdGNocG9pbnQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgKKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDog
bV9rZXkoa2V5KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGtleS53YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQo
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWtleS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRX
YXRjaHBvaW50KCkpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5z
dGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRjaGFibGUoKSk7CisgICAg
CisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2lu
dCh0aGlzKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRl
cm5hbChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgaWYgKG1fa2V5LmlzV2F0Y2hh
YmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGlu
c3RhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91
bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZp
cmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAi
LCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgIH0KKyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVh
bSBvdXQ7CisgICAgb3V0LnByaW50KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDog
IiwgZGV0YWlsKTsKKyAgICAKKyAgICBTdHJpbmdGaXJlRGV0YWlsIHN0cmluZ0RldGFpbChvdXQu
dG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisg
ICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50
UmVvcHRpbWl6YXRpb24sICZzdHJpbmdEZXRhaWwpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworcHVibGljOgorICAgIEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtl
eSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAgIAor
ICAgIHZvaWQgaW5zdGFsbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGZpcmVJ
bnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyArMjAzLDIyIEBAIHByaXZhdGU6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZUNv
bnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlv
biosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3Mp
OwogICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSogaGFuZGxlR2V0
QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSBvcCA9
IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQs
IE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7
CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZz
ZXQpOworCisgICAgLy8gQXR0ZW1wdCB0byB3YXRjaCB0aGUgcHJlc2VuY2Ugb2YgYSBwcm9wZXJ0
eS4gSXQgd2lsbCB3YXRjaCB0aGF0IHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50IGluIHRoZSBzYW1l
CisgICAgLy8gd2F5IGFzIGluIGFsbCBvZiB0aGUgc3RydWN0dXJlcyBpbiB0aGUgc2V0LiBJdCBt
YXkgZW1pdCBjb2RlIGluc3RlYWQgb2YganVzdCBzZXR0aW5nIGEgd2F0Y2hwb2ludC4KKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhpcyBhbGwgd29ya3Mgb3V0LgorICAgIGJvb2wgY2hlY2tQcmVz
ZW5jZUxpa2UoSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0
eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgdm9pZCBjaGVja1ByZXNlbmNlTGlr
ZShOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBT
dHJ1Y3R1cmVTZXQmKTsKKyAgICAKKyAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlJZFZhcmlh
bnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFyaWFudC4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYXJpYW50VHlwZT4KKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYpOwor
CisgICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3Qg
UHV0QnlJZFZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgICAgIAogICAgIHZvaWQgaGFuZGxl
R2V0QnlJZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUs
IE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdl
dEJ5SWRTdGF0dXMmKTsKQEAgLTIxMiw3ICsyMjcsMzIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhh
bmRsZVB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0Rp
cmVjdCk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tW
ZWN0b3ImKTsKKyAgICAKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVt
aXQgYSBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uIFJldHVybnMgZmFsc2UgaWYgdGhlCisgICAg
Ly8gY29uZGl0aW9uIG5vIGxvbmdlciBob2xkcywgYW5kIHRoZXJlZm9yZSBubyByZWFzb25hYmxl
IGNoZWNrIGNhbiBiZSBlbWl0dGVkLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mKTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwcm9tb3RlVG9Db25z
dGFudChHZXRCeU9mZnNldE1ldGhvZCk7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEg
d2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBJdCBtdXN0IGJl
IGEgUHJlc2VuY2UKKyAgICAvLyBjb25kaXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byBwcm9tb3Rl
IGEgUHJlc2VuY2UgY29uZGl0aW9uIHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbi4KKyAgICAv
LyBFbWl0cyBjb2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNvbmRpdGlvbiBndWFy
ZHMsIGFuZCByZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1
ZS4gUmV0dXJucyBudWxsIGlmIHRoZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLgorICAgIEdl
dEJ5T2Zmc2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7
CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAg
ICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNrKCkg
Zm9yIGVhY2ggY29uZGl0aW9uIGluIHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVpdGhlciBlbWl0cyBj
aGVja3Mgb3IgcmVnaXN0ZXJzCisgICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEgY29tYmluYXRpb24g
b2YgdGhlIHR3bykgdG8gbWFrZSB0aGUgY29uZGl0aW9ucyBob2xkLiBJZiBhbnkgb2YgdGhvc2UK
KyAgICAvLyBjb25kaXRpb25zIGFyZSBubyBsb25nZXIgY2hlY2thYmxlLCByZXR1cm5zIGZhbHNl
LgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAg
ICAKKyAgICAvLyBDYWxscyBjaGVjaygpIGZvciB0aG9zZSBjb25kaXRpb25zIHRoYXQgYXJlbid0
IHRoZSBzbG90IGJhc2UsIGFuZCBjYWxscyBsb2FkKCkgZm9yIHRoZSBzbG90CisgICAgLy8gYmFz
ZS4gRG9lcyBhIGNvbWJpbmF0aW9uIG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBjaGVj
ayBlbWlzc2lvbiB0byBndWFyZCB0aGUKKyAgICAvLyBjb25kaXRpb25zLCBhbmQgZW1pdHMgY29k
ZSB0byBsb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzbG90IGJhc2UuIFJldHVybnMgYSBub2RlIGNv
bnRhaW5pbmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgYW55IG9m
IHRoZSBjb25kaXRpb25zIHdlcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAgICBHZXRCeU9mZnNl
dE1ldGhvZCBwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOworICAg
IE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICB2b2lkIHByZXBhcmVUb1BhcnNl
QmxvY2soKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiArNzQ2LDkgQEAgcHJp
dmF0ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlND
ZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVy
IHdheSBhcm91bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9m
aXQgZnJvbSB1c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2
ZWx5IHdhdGNoIHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3
ZSBtYWtlIGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3
ZWFrSlNDb25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUp
OwogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKQEAgLTIyMjEsMTUgKzIyNjQsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9k
ZVR5cGUgb3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAgICBpZiAoYmFzZS0+
aGFzQ29uc3RhbnQoKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgu
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBv
ZmZzZXQpKSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOwotICAgICAg
ICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0yMjQ1LDYgKzIy
ODEsMTggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIHJl
dHVybiBnZXRCeU9mZnNldDsKIH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQoreworICAgIGlmIChiYXNlLT5oYXNDb25zdGFu
dCgpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25z
dGFudFByb3BlcnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQsIG9mZnNldCkpIHsK
KyAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAgICByZXR1
cm4gd2Vha0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCBvZmZzZXQsIG9wKTsKK30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgTm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMjI2
MiwxMCArMjMxMCwzMDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0
KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVj
a3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKQorYm9vbCBCeXRl
Q29kZVBhcnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
bikKK3sKKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlv
bi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5z
dXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBhZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3ZWFrSlNDb25zdGFu
dChjb25kaXRpb24ub2JqZWN0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZz
ZXRNZXRob2QgQnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0
aG9kIG1ldGhvZCkKK3sKKyAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhv
ZDo6TG9hZEZyb21Qcm90b3R5cGUKKyAgICAgICAgJiYgbWV0aG9kLnByb3RvdHlwZSgpLT5zdHJ1
Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFu
dCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShtZXRob2QucHJvdG90eXBlKCktPnZh
bHVlKCksIG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCksIG1ldGhvZC5vZmZzZXQoKSkp
CisgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGgu
ZnJlZXplKGNvbnN0YW50KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBtZXRob2Q7Cit9CisK
K0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKCJQbGFubmluZyBhIGxvYWQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CisgICAgCisg
ICAgLy8gV2UgbWlnaHQgcHJvbW90ZSB0aGlzIHRvIEVxdWl2YWxlbmNlLCBhbmQgYSBsYXRlciBE
RkcgcGFzcyBtaWdodCBhbHNvIGRvIHN1Y2ggcHJvbW90aW9uCisgICAgLy8gZXZlbiBpZiB3ZSBm
YWlsLCBidXQgZm9yIHNpbXBsaWNpdHkgdGhpcyBjYW5ub3QgYmUgYXNrZWQgdG8gbG9hZCBhbiBl
cXVpdmFsZW5jZSBjb25kaXRpb24uCisgICAgLy8gTm9uZSBvZiB0aGUgY2xpZW50cyBvZiB0aGlz
IG1ldGhvZCB3aWxsIHJlcXVlc3QgYSBsb2FkIG9mIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbiBh
bnl3YXksCisgICAgLy8gYW5kIHN1cHBvcnRpbmcgaXQgd291bGQgY29tcGxpY2F0ZSB0aGUgaGV1
cmlzdGljcyBiZWxvdy4KKyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IFBy
b3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgCisgICAgLy8gSGVyZSdzIHRoZSByYW5r
aW5nIG9mIGhvdyB0byBoYW5kbGUgdGhpcywgZnJvbSBtb3N0IHByZWZlcnJlZCB0byBsZWFzdCBw
cmVmZXJyZWQ6CisgICAgLy8KKyAgICAvLyAxKSBXYXRjaHBvaW50IG9uIGFuIGVxdWl2YWxlbmNl
IGNvbmRpdGlvbiBhbmQgcmV0dXJuIGEgY29uc3RhbnQgbm9kZSBmb3IgdGhlIGxvYWRlZCB2YWx1
ZS4KKyAgICAvLyAgICBObyBvdGhlciBjb2RlIGlzIGVtaXR0ZWQsIGFuZCB0aGUgc3RydWN0dXJl
IG9mIHRoZSBiYXNlIG9iamVjdCBpcyBuZXZlciByZWdpc3RlcmVkLgorICAgIC8vICAgIEhlbmNl
IHRoaXMgcmVzdWx0cyBpbiB6ZXJvIGNvZGUgYW5kIHdlIHdvbid0IGpldHRpc29uIHRoaXMgY29t
cGlsYXRpb24gaWYgdGhlIG9iamVjdAorICAgIC8vICAgIHRyYW5zaXRpb25zLCBldmVuIGlmIHRo
ZSBzdHJ1Y3R1cmUgaXMgd2F0Y2hhYmxlIHJpZ2h0IG5vdy4KKyAgICAvLworICAgIC8vIDIpIE5l
ZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2Ug
aXMgZ29pbmcgdG8gYmUgd2F0Y2hlZCBieSB0aGUKKyAgICAvLyAgICBERkcgYW55d2F5IChpLmUu
IGRmZ1Nob3VsZFdhdGNoKS4gV2F0Y2ggdGhlIHN0cnVjdHVyZSBhbmQgZW1pdCB0aGUgbG9hZC4g
RG9uJ3Qgd2F0Y2ggdGhlCisgICAgLy8gICAgY29uZGl0aW9uLCBzaW5jZSB0aGUgYWN0IG9mIHR1
cm5pbmcgdGhlIGJhc2UgaW50byBhIGNvbnN0YW50IGluIElSIHdpbGwgY2F1c2UgdGhlIERGRyB0
bworICAgIC8vICAgIHdhdGNoIHRoZSBzdHJ1Y3R1cmUgYW55d2F5IGFuZCBkb2luZyBzbyB3b3Vs
ZCBzdWJzdW1lIHdhdGNoaW5nIHRoZSBjb25kaXRpb24uCisgICAgLy8KKyAgICAvLyAzKSBOZWVk
IHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlz
IHdhdGNoYWJsZSBidXQgbm90IGJ5IHRoZQorICAgIC8vICAgIERGRyAoaS5lLiB0cmFuc2l0aW9u
V2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpIGFuZCAhZGZnU2hvdWxkV2F0Y2hJZlBvc3NpYmxl
KCkpLiBXYXRjaAorICAgIC8vICAgIHRoZSBjb25kaXRpb24sIGFuZCBlbWl0IGEgbG9hZC4KKyAg
ICAvLworICAgIC8vIDQpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1
Y3R1cmUgb2YgdGhlIGJhc2UgaXMgbm90IHdhdGNoYWJsZS4gRW1pdCBhCisgICAgLy8gICAgc3Ry
dWN0dXJlIGNoZWNrLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA1KSBUaGUgY29u
ZGl0aW9uIGRvZXMgbm90IGhvbGQuIEdpdmUgdXAgYW5kIHJldHVybiBudWxsLgorICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB3ZSBhZ3JlZSBvbiB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZm9yIHRoZSBw
dXJwb3NlIG9mIGVtaXR0aW5nIHRoZXNlIHZhcmlvdXMKKyAgICAvLyBjaGVja3MuCisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAg
IAorICAgIC8vIEZpcnN0LCB0cnkgdG8gcHJvbW90ZSBQcmVzZW5jZSB0byBFcXVpdmFsZW5jZS4g
V2UgZG8gdGhpcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZQorICAgIC8vIGJlY2F1c2UgaXQn
cyB0aGUgbW9zdCBwcm9maXRhYmxlLiBBbHNvLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIHBy
ZXNlbmNlIGlzIHdhdGNoYWJsZSBidXQKKyAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHdhdGNoIGl0
IHVubGVzcyBpdCBiZWNhbWUgYW4gZXF1aXZhbGVuY2UgKHNlZSB0aGUgcmVsYXRpb25zaGlwIGJl
dHdlZW4KKyAgICAvLyAoMSksICgyKSwgYW5kICgzKSBhYm92ZSkuCisgICAgaWYgKHN0cnVjdHVy
ZS0+aXNWYWxpZE9mZnNldChjb25kaXRpb24ub2Zmc2V0KCkpKSB7CisgICAgICAgIC8vIFRoaXMg
bG9hZCBpcyBmaW5lIGJlY2F1c2Ugb25seSB0aGUgR0MgY2FuIGNhdXNlIGEgZGVsZXRlZCBwcm9w
ZXJ0eSB0byBoYXZlIGEgZ2FyYmFnZQorICAgICAgICAvLyB2YWx1ZS4KKyAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+Z2V0RGlyZWN0KGNvbmRpdGlvbi5vZmZzZXQo
KSk7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlQ29uZGl0aW9u
ID0KKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhv
dXRCYXJyaWVyKAorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5vYmplY3QoKSwgY29uZGl0aW9u
LnVpZCgpLCB2YWx1ZSk7CisgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGVxdWl2
YWxlbmNlQ29uZGl0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZDo6
Y29uc3RhbnQobV9ncmFwaC5mcmVlemUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgLy8gQXQg
dGhpcyBwb2ludCwgd2UnbGwgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgY29uZGl0aW9uJ3MgYmFz
ZSBhcyBhIGNvbnN0YW50IGluIERGRyBJUi4gT25jZQorICAgIC8vIHdlIGRvIHRoaXMsIHRoZSBm
cm96ZW4gdmFsdWUgd2lsbCBoYXZlIGl0cyBvd24gaWRlYSBvZiB3aGF0IHRoZSBzdHJ1Y3R1cmUg
aXMuIFVzZSB0aGF0IGZyb20KKyAgICAvLyBub3cgb24ganVzdCBiZWNhdXNlIGl0J3MgbGVzcyBj
b25mdXNpbmcuCisgICAgRnJvemVuVmFsdWUqIGJhc2UgPSBtX2dyYXBoLmZyZWV6ZShjb25kaXRp
b24ub2JqZWN0KCkpOworICAgIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOworICAgIAor
ICAgIC8vIENoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSd2ZSByZWdpc3RlcmVkIG1ha2Vz
IHRoZSBjb25kaXRpb24gaG9sZC4gSWYgbm90LCBqdXN0IGdpdmUKKyAgICAvLyB1cC4gVGhpcyBp
cyBjYXNlICg1KSBhYm92ZS4KKyAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFs
aWRpdHkoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7Cisg
ICAgCisgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRjaGVkIGJ5IHRoZSBERkcgYWxyZWFk
eSwgdGhlbiBqdXN0IHVzZSB0aGlzIGZhY3QgdG8gZW1pdCB0aGUgbG9hZC4KKyAgICAvLyBUaGlz
IGlzIGNhc2UgKDIpIGFib3ZlLgorICAgIGlmIChzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkp
CisgICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZDo6bG9h
ZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7CisgICAgCisgICAgLy8g
SWYgd2UgY2FuIHdhdGNoIHRoZSBjb25kaXRpb24gcmlnaHQgbm93LCB0aGVuIHdlIGNhbiBlbWl0
IHRoZSBsb2FkIGFmdGVyIHdhdGNoaW5nIGl0LiBUaGlzCisgICAgLy8gaXMgY2FzZSAoMykgYWJv
dmUuCisgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAg
cmV0dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3Rv
dHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBXZSBjYW4ndCB3
YXRjaCBhbnl0aGluZyBidXQgd2Uga25vdyB0aGF0IHRoZSBjdXJyZW50IHN0cnVjdHVyZSBzYXRp
c2ZpZXMgdGhlIGNvbmRpdGlvbi4gU28sCisgICAgLy8gY2hlY2sgZm9yIHRoYXQgc3RydWN0dXJl
IGFuZCB0aGVuIGVtaXQgdGhlIGxvYWQuCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tT
dHJ1Y3R1cmUsIAorICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0
dXJlKSksCisgICAgICAgIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGJhc2UpKSk7Cisg
ICAgcmV0dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVBy
b3RvdHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKK30KKworTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCwKKyAgICBOb2Rl
VHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICBjYXNlIEdldEJ5
T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjYXNl
IEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgo
SlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CisgICAgY2FzZSBHZXRCeU9m
ZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKKyAgICAgICAgTm9kZSogYmFzZU5vZGUg
PSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKKyAg
ICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVu
dGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICB9CisgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9t
IHBsYW5Mb2FkKCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNl
cjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBOb2RlVHlwZSBvcCkKK3sKKyAgICBHZXRCeU9mZnNl
dE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgIHJldHVybiBsb2FkKHBy
ZWRpY3Rpb24sIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0aW9uLnVpZCgpKSwg
bWV0aG9kLCBvcCk7Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKKyAgICAg
ICAgaWYgKCFjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJz
ZXI6OnBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coImNvbmRpdGlvblNldCA9
ICIsIGNvbmRpdGlvblNldCwgIlxuIik7CisgICAgCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVz
dWx0OworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDog
Y29uZGl0aW9uU2V0KSB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFyZXN1bHQpOyAvLyBTaG91bGQgb25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhl
c2UuCisgICAgICAgICAgICByZXN1bHQgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9k
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlm
ICghY2hlY2soY29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRN
ZXRob2QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUKCEhcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOb2RlKiBCeXRl
Q29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBOb2RlVHlwZSBvcCkKIHsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAg
ICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sodmVjdG9yW2ldLmNvbnN0YW50KCksIHZl
Y3RvcltpXS5zdHJ1Y3R1cmUoKSk7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxh
bkxvYWQoY29uZGl0aW9uU2V0KTsKKyAgICByZXR1cm4gbG9hZCgKKyAgICAgICAgcHJlZGljdGlv
biwKKyAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS51aWQoKSksCisgICAgICAgIG1ldGhvZCwgb3ApOworfQorCitib29s
IEJ5dGVDb2RlUGFyc2VyOjpjaGVja1ByZXNlbmNlTGlrZSgKKyAgICBKU09iamVjdCoga25vd25C
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0
IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBQcm9wZXJ0eU9mZnNl
dCBmaXJzdE9mZnNldCA9IHNldFswXS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7
CisgICAgaWYgKGZpcnN0T2Zmc2V0ICE9IG9mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
dW5zaWduZWQgb3RoZXJBdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvdGhlck9m
ZnNldCA9IHNldFtpXS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgb3RoZXJBdHRyaWJ1dGVzKTsKKyAg
ICAgICAgaWYgKG90aGVyT2Zmc2V0ICE9IG9mZnNldCB8fCBvdGhlckF0dHJpYnV0ZXMgIT0gYXR0
cmlidXRlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gY29uZGl0aW9uID0KKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIoa25vd25CYXNlLCB1aWQsIG9mZnNldCwgYXR0cmli
dXRlcyk7CisgICAgaWYgKGNoZWNrKGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2tQcmVzZW5j
ZUxpa2UoCisgICAgTm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBpZiAoSlNPYmpl
Y3QqIGtub3duQmFzZSA9IGJhc2UtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNPYmplY3QqPigpKSB7
CisgICAgICAgIGlmIChjaGVja1ByZXNlbmNlTGlrZShrbm93bkJhc2UsIHVpZCwgb2Zmc2V0LCBz
ZXQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFkZFRvR3JhcGgoQ2hlY2tT
dHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzZXQpKSwgYmFzZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmIHZhcmlhbnQpCit7CisgICAg
Ly8gTWFrZSBzdXJlIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiBrbm93cyB0aGF0IHdlJ3ZlIHVzZWQg
YmFzZS4KKyAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOworICAgIAorICAgIGJvb2wgbmVl
ZFN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoSlNPYmplY3QqIGtub3duQmFz
ZSA9IGJhc2UtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNPYmplY3QqPigpKSB7CisgICAgICAgIC8v
IFRyeSB0byBvcHRpbWl6ZSBhd2F5IHRoZSBzdHJ1Y3R1cmUgY2hlY2suIE5vdGUgdGhhdCBpdCdz
IG5vdCB3b3J0aCBkb2luZyBhbnl0aGluZyBhYm91dCB0aGlzCisgICAgICAgIC8vIGlmIHRoZSBi
YXNlJ3Mgc3RydWN0dXJlIGlzIHdhdGNoZWQuCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYmFzZS0+Y29uc3RhbnQoKS0+c3RydWN0dXJlKCk7CisgICAgICAgIGlmICghc3RydWN0dXJl
LT5kZmdTaG91bGRXYXRjaCgpKSB7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
ID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIGxvYWRpbmcgZnJvbSBhIHBy
b3RvdHlwZS4gV2UgZXhwZWN0IHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZQorICAgICAgICAgICAg
ICAgIC8vIHByb3BlcnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
aWYgYWxsIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIHZhcmlh
bnQuc3RydWN0dXJlU2V0KCkgYWdyZWUgb24gdGhlIHByb3RvdHlwZSAoaXQgd291bGQgYmUgaGls
YXJpb3VzbHkgcmFyZSBpZiB0aGV5CisgICAgICAgICAgICAgICAgLy8gZGlkbid0KS4gTm90ZSB0
aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0cnVjdHVyZVNldCgpIGhhdmluZyBhdCBsZWFzdCBvbmUg
ZWxlbWVudC4gVGhhdAorICAgICAgICAgICAgICAgIC8vIHdpbGwgYWx3YXlzIGJlIHRydWUgaGVy
ZSBiZWNhdXNlIG9mIGhvdyBHZXRCeUlkU3RhdHVzL1B1dEJ5SWRTdGF0dXMgd29yay4KKyAgICAg
ICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKVsw
XS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgYm9vbCBhbGxBZ3Jl
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHZhcmlh
bnQuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcmlhbnQuc3RydWN0dXJlU2V0KClbaV0tPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpICE9IHBy
b3RvdHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWxsQWdyZWUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhbGxBZ3JlZSkgeworICAgICAgICAg
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICAgICAgICAgICAg
ICAgICAga25vd25CYXNlLCB1aWQsIHByb3RvdHlwZSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFN0cnVjdHVy
ZUNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlJ3JlIGxvYWRpbmcgZGlyZWN0bHkgZnJv
bSBiYXNlLiBXZSBjYW4gYXZvaWQgYWxsIG9mIHRoZSBjb2RlIHRoYXQgZm9sbG93cworICAgICAg
ICAgICAgICAgIC8vIGlmIHdlIGNhbiBwcm92ZSB0aGF0IHRoZSBwcm9wZXJ0eSBpcyBhIGNvbnN0
YW50LiBPdGhlcndpc2UsIHdlIHRyeSB0byBwcm92ZSB0aGF0IHRoZQorICAgICAgICAgICAgICAg
IC8vIHByb3BlcnR5IGlzIHdhdGNoYWJseSBwcmVzZW50LCBpbiB3aGljaCBjYXNlIHdlIGdldCBy
aWQgb2YgdGhlIHN0cnVjdHVyZSBjaGVjay4KKworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzVmFsaWRPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGtub3duQmFzZS0+Z2V0RGlyZWN0KHZhcmlhbnQub2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5j
ZUNvbmRpdGlvbiA9CisgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrbm93bkJhc2UsIHVpZCwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQodmFsdWUpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBhdHRyaWJ1dGVzIHdlJ3Jl
IGludGVyZXN0ZWQgaW4uIEhvcGVmdWxseSBhbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCisg
ICAgICAgICAgICAgICAgLy8gc3RydWN0dXJlIHNldCBhZ3JlZS4KKyAgICAgICAgICAgICAgICBp
ZiAoY2hlY2tQcmVzZW5jZUxpa2Uoa25vd25CYXNlLCB1aWQsIHZhcmlhbnQub2Zmc2V0KCksIHZh
cmlhbnQuc3RydWN0dXJlU2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBuZWVkU3RydWN0dXJl
Q2hlY2sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChuZWVkU3RydWN0dXJlQ2hlY2spCisgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUs
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSks
IGJhc2UpOworICAgIAorICAgIFNwZWN1bGF0ZWRUeXBlIGxvYWRQcmVkaWN0aW9uOworICAgIE5v
ZGVUeXBlIGxvYWRPcDsKKyAgICBpZiAodmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CisgICAg
ICAgIGxvYWRQcmVkaWN0aW9uID0gU3BlY0NlbGxPdGhlcjsKKyAgICAgICAgbG9hZE9wID0gR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZFByZWRpY3Rp
b24gPSBwcmVkaWN0aW9uOworICAgICAgICBsb2FkT3AgPSBHZXRCeU9mZnNldDsKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWU7CisgICAgaWYgKCF2YXJpYW50LmNvbmRpdGlvblNl
dCgpLmlzRW1wdHkoKSkKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBsb2FkKGxvYWRQcmVkaWN0aW9u
LCB2YXJpYW50LmNvbmRpdGlvblNldCgpLCBsb2FkT3ApOworICAgIGVsc2UgeworICAgICAgICBs
b2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgbG9hZFByZWRpY3Rp
b24sIGJhc2UsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlh
bnQub2Zmc2V0KCksCisgICAgICAgICAgICBsb2FkT3ApOworICAgIH0KKworICAgIHJldHVybiBs
b2FkZWRWYWx1ZTsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCBOb2Rl
KiB2YWx1ZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6UmVwbGFjZSk7CisKKyAgICBjaGVja1ByZXNlbmNlTGlrZShiYXNlLCBtX2dyYXBo
LmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3Ry
dWN0dXJlKCkpOworICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVy
LCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5SWQoCkBAIC0yMjg4LDE4ICsyNjM1LDM2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBtX2dyYXBo
LmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7Ci0gICAgCisgICAgICAgIFZl
Y3RvcjxNdWx0aUdldEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7CisgICAgICAgIAogICAgICAgICAv
LyAxKSBFbWl0IHByb3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwgY2hhaW5zLiBUaGlz
IGNvdWxkIHNvcnQgb2YgbWF5YmUgbm90IGJlCiAgICAgICAgIC8vICAgIG9wdGltYWwsIGlmIHRo
ZXJlIGlzIHNvbWUgcmFyZWx5IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNoYWluIHRoYXQgcmVxdWly
ZXMgYSBsb3QKICAgICAgICAgLy8gICAgb2YgY2hlY2tzIGFuZCB0aG9zZSBjaGVja3MgYXJlIG5v
dCB3YXRjaHBvaW50YWJsZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBn
ZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykKLSAgICAgICAgICAg
IGVtaXRDaGVja3MoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkp
OwotICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IGdldEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQuY29u
ZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKAor
ICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBHZXRCeU9mZnNldE1ldGhvZDo6bG9hZCh2YXJpYW50Lm9mZnNldCgpKSkpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZCh2YXJpYW50LmNvbmRpdGlvblNl
dCgpKTsKKyAgICAgICAgICAgIGlmICghbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBiYXNlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoTXVsdGlHZXRCeU9mZnNldENh
c2UodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgbWV0aG9kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOworICAgIAogICAgICAgICAvLyAyKSBFbWl0
IGEgTXVsdGlHZXRCeU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSA9
IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFy
aWFudHMgPSBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPmNhc2VzID0g
Y2FzZXM7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVy
OwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksCiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKE11bHRpR2V0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBiYXNlKSk7CkBAIC0yMzA5LDMwICsyNjc0LDE2IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgQVNTRVJUKGdldEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKSA9PSAxKTsKICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZ2V0QnlJZFN0YXR1
c1swXTsKICAgICAgICAgICAgICAgICAKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQocHJl
ZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CisgICAgaWYgKCFsb2Fk
ZWRWYWx1ZSkgeworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFu
ZCksCisgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVt
YmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICBtX2dyYXBoLmNvbXBp
bGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7CiAgICAgCi0gICAgTm9kZSogb3JpZ2lu
YWxCYXNlID0gYmFzZTsKLSAgICAgICAgICAgICAgICAKLSAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKSkpLCBiYXNlKTsKLSAgICAKLSAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVj
a3MoKSk7Ci0KLSAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAgICAgIGJhc2Ug
PSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgCi0gICAgLy8g
VW5sZXNzIHdlIHdhbnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04ODc4Mywgd2UgbmVlZCB0bwotICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBiYXNlIG9m
IHRoZSBvcmlnaW5hbCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdp
dGgKLSAgICAvLyBhbGwgb2YgdGhlIHNwZWN1bGF0aW9ucy4gV2Ugb25seSBpbnNlcnQgdGhlIFBo
YW50b20gaWYgdGhlcmUgaGFkIGJlZW4gYSBDaGVja1N0cnVjdHVyZQotICAgIC8vIG9uIHNvbWV0
aGluZyBvdGhlciB0aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tTdHJ1Y3R1cmUgb24g
YmFzZS4KLSAgICBpZiAob3JpZ2luYWxCYXNlICE9IGJhc2UpCi0gICAgICAgIGFkZFRvR3JhcGgo
UGhhbnRvbSwgb3JpZ2luYWxCYXNlKTsKLSAgICAKLSAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhh
bmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVj
Q2VsbE90aGVyIDogcHJlZGljdGlvbiwKLSAgICAgICAgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0
dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgIHZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZz
ZXQpOwotICAgIAogICAgIGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CiAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgbG9hZGVkVmFsdWUpOwog
ICAgICAgICByZXR1cm47CkBAIC0yMzY5LDcgKzI3MjAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVHZXRCeUlkKAogICAgIC8vICAgIHNpbmNlIHdlIG9ubHkgcmVhbGx5IGNhcmUgYWJv
dXQgJ3RoaXMnIGluIHRoaXMgY2FzZS4gQnV0IHdlJ3JlIG5vdCBnb2luZyB0byB0YWtlIHRoYXQK
ICAgICAvLyAgICBzaG9ydGN1dC4KICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZz
ZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIobmV4dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFr
ZWRTZXQpOwogICAgIAogICAgIGhhbmRsZUNhbGwoCiAgICAgICAgIGRlc3RpbmF0aW9uT3BlcmFu
ZCwgQ2FsbCwgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsLCBPUENPREVfTEVOR1RIKG9wX2dl
dF9ieV9pZCksCkBAIC0yNDAzLDE3ICsyNzU0LDIwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmNv
bXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Ci0gICAgICAgIAogICAgICAgICBp
ZiAoIWlzRGlyZWN0KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9
IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJ
ZFZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIGVtaXRDaGVja3MocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbnN0
YW50Q2hlY2tzKCkpOworICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlJZFN0YXR1c1t2
YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBlbWl0
UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNE
aXJlY3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9ncmFwaC5j
b21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJ
bmxpbmVkUHV0QnlJZCgpOworICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAgICAgIGRh
dGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5p
ZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKQEAgLTI0MjYsOCArMjc4MCw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgc3dpdGNoICh2
YXJpYW50LmtpbmQoKSkgewogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKLSAg
ICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgIGhhbmRsZVB1dEJ5
T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsK
KyAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwog
ICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICAgICAgbV9ncmFwaC5j
b21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogICAgICAgICByZXR1cm47CkBA
IC0yNDM1LDcgKzI3ODgsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgK
ICAgICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBlbWl0Q2hlY2tzKHZhcmlh
bnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRp
b25TZXQoKSkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwog
ICAgIApAQCAtMjQ4NiwxOSArMjg0MiwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeUlkKAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVy
OiB7Ci0gICAgICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgIAotICAgICAg
ICBhZGRUb0dyYXBoKAotICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBo
LmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAK
LSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotICAgICAgICAK
LSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgYmFzZSA9
IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAgCi0gICAg
ICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICBT
cGVjQ2VsbE90aGVyLCBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIEdldEdldHRlclNldHRlckJ5T2Zm
c2V0KTsKKyAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgICAgICBpZiAoIWxvYWRlZFZhbHVl
KSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1
ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRUb0dyYXBoKEdldFNldHRl
ciwgbG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI1MjYsNyArMjg3NCw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKICAgICAKICAgICAgICAgaW50IG5leHRS
ZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
LSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIG9yaWdpbmFsQmFz
ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRS
ZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAg
ICAKICAgICAgICAgaGFuZGxlQ2FsbCgKQEAgLTM0NjYsNiArMzgxNCw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQ
cmVkaWN0aW9uKCk7CisKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Ioc3RydWN0dXJlLCB1aWQpOwogICAgICAgICAgICAgICAg
IGlmIChzdGF0dXMuc3RhdGUoKSAhPSBHZXRCeUlkU3RhdHVzOjpTaW1wbGUKICAgICAgICAgICAg
ICAgICAgICAgfHwgc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMQpAQCAtMzQ3Myw5ICszODIyLDEx
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdldEJ5SWRGbHVz
aCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUpKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25zdGFudFdp
dGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKS5v
bmx5U3RydWN0dXJlKCkpOworCisgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IHdlYWtKU0Nv
bnN0YW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICAgICAgTm9kZSogcmVzdWx0ID0gbG9h
ZChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0dXNbMF0pOwogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkp
KTsKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGhhbmRsZUdldEJ5
T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKSwgaWRlbnRp
Zmllck51bWJlciwgb3BlcmFuZCkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoZHN0KSwgcmVzdWx0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMzYxOSwxMCArMzk3MCw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGdldChWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFT
U0VSVChzdGF0dXNbMF0uc3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVD
aGVjayhnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwotICAgICAgICAgICAgICAg
IGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHN0YXRpY19jYXN0PFBy
b3BlcnR5T2Zmc2V0PihvcGVyYW5kKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gd2Vha0pTQ29uc3RhbnQoZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0dXNbMF0s
IGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBz
Y29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQ
aGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
CShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw5IEBAIHZvaWQgQ29tbW9uRGF0
YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJl
bmNlcy5jaGVjayhpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwog
ICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZvciAoQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50KiB3YXRjaHBvaW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cykKKyAgICAgICAg
d2F0Y2hwb2ludC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw4IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuaCIKICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVD
YWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk4LDYgKzEwMCw4IEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOwog
ICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8U3RydWN0dXJlPj4gd2Vha1N0cnVjdHVyZVJlZmVyZW5j
ZXM7CiAgICAgQmFnPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gd2F0Y2hwb2ludHM7
CisgICAgQmFnPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gYWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50PiBhZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOwogICAgIFZlY3Rv
cjxKdW1wUmVwbGFjZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7CiAgICAgCiAgICAgUmVmUHRyPFBy
b2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNp
b24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCwyMSArMjk0LDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8v
IFB1c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgog
ICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhl
IGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZh
cmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5zdHJ1Y3R1cmVTZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRzLmxhc3QoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEudmFyaWFudHMucmVtb3ZlTGFzdCgpOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNlID0gZGF0
YS5jYXNlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0Q2FzZS5zZXQoKS5maWx0ZXIoYmFz
ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdldENhc2Uuc2V0KCkuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzW2ktLV0gPSBkYXRhLmNhc2Vz
Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMucmVtb3ZlTGFzdCgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGRhdGEudmFyaWFudHMuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgaWYg
KGRhdGEuY2FzZXMuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldCgKLSAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIGRhdGEudmFyaWFudHNb
MF0sIGRhdGEuaWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAgZW1pdEdldEJ5T2Zm
c2V0KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBkYXRhLmNhc2VzWzBdLCBkYXRhLmlk
ZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzc0LDggKzM3Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzW2ldLmNvbnN0YW50Q2hlY2tzKCkuaXNF
bXB0eSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbaV0uYWx0ZXJuYXRlQmFz
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzW2ldLmNvbmRpdGlvblNldCgp
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IGhhbmRsZSBwcm90b3R5cGUgY2FzZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzg2CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTM5Miw3ICszOTAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTXVs
dGlHZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEu
YWRkKCk7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBzdGF0dXMudmFyaWFudHMo
KTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDog
c3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+Y2FzZXMuYXBw
ZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZDo6bG9hZCh2YXJpYW50Lm9mZnNl
dCgpKSkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkYXRhLT5pZGVudGlm
aWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9NdWx0aUdldEJ5T2Zmc2V0KGRhdGEpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOwpAQCAtNDMyLDkgKzQzNSwzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0
dXMubnVtVmFyaWFudHMoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgYWRkQ2hlY2tzKG9y
aWdpbiwgaW5kZXhJbkJsb2NrLCBzdGF0dXNbaV0uY29uc3RhbnRDaGVja3MoKSk7CisKKyAgICAg
ICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1Zh
bGlkaXR5KHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29k
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRG
b3JVc2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9k
ZS0+b3JpZ2luLCBjb25kaXRpb24ub2JqZWN0KCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFh
bGxHb29kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkgewogICAgICAgICAg
ICAgICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUs
IHN0YXR1c1swXSwgaWRlbnRpZmllck51bWJlcik7CkBAIC01MjksNDEgKzU1NCw3MiBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQorICAgIAorICAg
IHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwg
Y29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZSYgZ2V0Q2FzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB7CisgICAgICAgIC8v
IFdoZW4gd2UgZ2V0IHRvIGhlcmUgd2UgaGF2ZSBhbHJlYWR5IGVtaXR0ZWQgYWxsIG9mIHRoZSBy
ZXF1aXNpdGUgY2hlY2tzIGZvciBldmVyeXRoaW5nLgorICAgICAgICAvLyBTbywgd2UganVzdCBu
ZWVkIHRvIGVtaXQgd2hhdCB0aGUgbWV0aG9kIG9iamVjdCB0ZWxscyB1cyB0byBlbWl0LgogICAg
ICAgICAKKyAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVl
LCBnZXRDYXNlLnNldCgpKTsKKworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBn
ZXRDYXNlLm1ldGhvZCgpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgp
KSB7CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAg
ICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBtZXRob2QuY29uc3RhbnQo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleElu
QmxvY2ssIG5vZGUsIG5vZGUtPmNoaWxkMSgpLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zm
c2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
R2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7CisgICAgICAgICAgICBOb2Rl
KiBjaGlsZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgbm9kZS0+b3JpZ2luLCBtZXRob2QucHJvdG90eXBlKCkpOworICAgICAg
ICAgICAgZW1pdEdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9k
ZSwgRWRnZShjaGlsZCwgS25vd25DZWxsVXNlKSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9m
ZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSB9CisgICAgICAgIAorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKICAgICB2b2lk
IGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0
IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCiAgICAgewotICAgICAgICBOb2RlT3JpZ2luIG9y
aWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGls
ZDEoKTsKIAogICAgICAgICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFs
dWUsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBi
YXNlRm9yTG9hZDsKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAg
ICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlVmFsdWUubV92YWx1ZTsKLSAgICAgICAg
aWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZUZv
ckxvYWQsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKSkgeworICAg
ICAgICAvLyBXZSBhcmVuJ3Qgc2V0IHVwIHRvIGhhbmRsZSBwcm90b3R5cGUgc3R1ZmYuCisgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0Vt
cHR5KCkpOworCisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25z
dGFudFByb3BlcnR5KGJhc2VWYWx1ZS5tX3ZhbHVlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpLCB2
YXJpYW50Lm9mZnNldCgpKSkgewogICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFu
dChub2RlLCBtX2dyYXBoLmZyZWV6ZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsK
LSAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQo
aW5kZXhJbkJsb2NrLCBvcmlnaW4sIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAg
ICAgIGNoaWxkRWRnZSA9IEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVzZSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAg
ICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgY2hpbGRFZGdlLCBpZGVudGlm
aWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbWl0
R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBFZGdlIGNoaWxk
RWRnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAg
ICAgCiAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAKLSAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgR2V0QnV0dGVyZmx5LCBvcmlnaW4sIGNoaWxkRWRnZSkpOworICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgbm9kZS0+b3JpZ2luLCBjaGls
ZEVkZ2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEm
IGRhdGEgPSAqbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwotICAgICAgICBkYXRh
Lm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CisgICAgICAgIGRhdGEub2Zmc2V0ID0gb2Zmc2V0
OwogICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAg
ICAgICAKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlT
dG9yYWdlKTsKQEAgLTY0MywxNSArNjk5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydENoZWNrKGluZGV4SW5CbG9jaywgbm9kZS0+b3JpZ2luLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYWRkQ2hlY2tzKAotICAgICAgICBOb2Rl
T3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBjb25zdCBDb25zdGFudFN0cnVj
dHVyZUNoZWNrVmVjdG9yJiBjaGVja3MpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY2hlY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssIGNo
ZWNrc1tpXS5jb25zdGFudCgpLCBjaGVja3NbaV0uc3RydWN0dXJlKCkpOwotICAgICAgICB9Ci0g
ICAgfQotCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soTm9kZU9yaWdpbiBv
cmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgSlNDZWxsKiBjZWxsLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGNl
bGwtPnN0cnVjdHVyZSgpKSA9PSBTdHJ1Y3R1cmVSZWdpc3RlcmVkQW5kV2F0Y2hlZCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEFycmF5QnVmZmVyVmlld1dh
dGNocG9pbnRBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlC
dWZmZXJWaWV3KiB2aWV3LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQog
eworICAgIFdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNv
ZGVCbG9jayk7CiAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50KiBuZXV0ZXJpbmdX
YXRjaHBvaW50ID0KICAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50OjpjcmVh
dGUoKmNvZGVCbG9jay0+dm0oKSk7CiAgICAgbmV1dGVyaW5nV2F0Y2hwb2ludC0+c2V0KCktPmFk
ZCh3YXRjaHBvaW50KTsKQEAgLTQ1LDEwICs0NiwyMyBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dh
dGNocG9pbnRBZGFwdG9yOjphCiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwg
V2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJy
ZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgQ29tbW9uRGF0YSYgY29tbW9uKQogewogICAgIGNvZGVC
bG9jay0+YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0
IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2Vz
IHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBpbmZlcnJlZFZhbHVlLT5hZGQo
d2F0Y2hwb2ludCk7CisgICAgaW5mZXJyZWRWYWx1ZS0+YWRkKGNvbW1vbi53YXRjaHBvaW50cy5h
ZGQoY29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRh
cHRvcjo6YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAgc3dpdGNoIChrZXku
a2luZCgpKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAg
ICAgIGNvbW1vbi5hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmFkZChr
ZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgY29tbW9uLmFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29k
ZUJsb2NrKS0+aW5zdGFsbCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIERlc2lyZWRX
YXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CkBAIC03NCw2ICs4OCwxMSBAQCB2
b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJyCiAgICAgbV9idWZmZXJWaWV3
cy5hZGRMYXppbHkodmlldyk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXpp
bHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sKKyAgICBtX2FkYXB0aXZl
U3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2lu
dHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJl
LT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtODgsNiArMTA3LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hw
b2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJs
b2NrLCBjb21tb25EYXRhKTsKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxv
Y2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywg
Y29tbW9uRGF0YSk7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVC
bG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGls
bFZhbGlkKCkgY29uc3QKQEAgLTk1LDcgKzExNSwxOCBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50
czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgcmV0dXJuIG1fc2V0cy5hcmVTdGlsbFZhbGlkKCkKICAg
ICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2luZmVy
cmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0
aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCkKKyAg
ICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOworfQorCit2
b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkRlc2lyZWQgd2F0
Y2hwb2ludHM6XG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBXYXRjaHBvaW50IHNldHM6ICIsIGlu
Q29udGV4dChtX3NldHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmxp
bmUgd2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9pbmxpbmVTZXRzLCBjb250ZXh0KSwg
IlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdmFsdWVzOiAiLCBpbkNvbnRleHQo
bV9pbmZlcnJlZFZhbHVlcywgY29udGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIEJ1
ZmZlciB2aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3MsIGNvbnRleHQpLCAiXG4iKTsK
KyAgICBvdXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29uZGl0aW9uczogIiwgaW5Db250
ZXh0KG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRl
ICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIK
KyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNDAsMzMgKzQyLDU2IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotc3RydWN0IEdlbmVyaWNTZXRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBh
ZGQoQ29kZUJsb2NrKiwgVCBzZXQsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCitzdHJ1Y3QgU2V0
UG9pbnRlckFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgVCBzZXQsIENvbW1vbkRhdGEmIGNvbW1vbikKICAgICB7Ci0gICAgICAgIHJldHVybiBzZXQt
PmFkZCh3YXRjaHBvaW50KTsKKyAgICAgICAgcmV0dXJuIHNldC0+YWRkKGNvbW1vbi53YXRjaHBv
aW50cy5hZGQoY29kZUJsb2NrKSk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZh
bGlkYXRlZChUIHNldCkgeyByZXR1cm4gc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsgfQorICAg
IHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgVCBzZXQsIER1bXBD
b250ZXh0KikKKyAgICB7CisgICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKHNldCkpOworICAg
IH0KIH07CiAKIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQg
YWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBXYXRjaHBvaW50Kik7CisgICAgc3RhdGlj
IHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBDb21tb25EYXRhJik7CiAgICAg
c3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFs
dWUpCiAgICAgewogICAgICAgICByZXR1cm4gaW5mZXJyZWRWYWx1ZS0+aGFzQmVlbkludmFsaWRh
dGVkKCk7CiAgICAgfQorICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgRHVtcENvbnRleHQqKQorICAgIHsK
KyAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoaW5mZXJyZWRWYWx1ZSkpOworICAgIH0KIH07
CiAKIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvciB7Ci0gICAgc3RhdGlj
IHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgV2F0Y2hwb2ludCopOwor
ICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIENvbW1v
bkRhdGEmKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZl
clZpZXcqIHZpZXcpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9ICF2aWV3LT5sZW5ndGgo
KTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiAhdmlldy0+bGVuZ3RoKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcs
IER1bXBDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4
dChKU1ZhbHVlKHZpZXcpLCBjb250ZXh0KSk7CisgICAgfQorfTsKKworc3RydWN0IEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvbW1vbkRhdGEmKTsKKyAgICBz
dGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAha2V5LmlzV2F0Y2hhYmxlKCk7CisgICAg
fQorICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoCisgICAgICAgIFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIER1bXBDb250ZXh0KiBjb250
ZXh0KQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsK
ICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5h
bWUgQWRhcHRvciA9IEdlbmVyaWNTZXRBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KK3RlbXBs
YXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBlLCB0eXBlbmFtZSBBZGFwdG9yID0gU2V0UG9p
bnRlckFkYXB0b3I8V2F0Y2hwb2ludFNldFR5cGU+PgogY2xhc3MgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50cyB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHR5cGVkZWYgSGFzaE1hcDxXYXRj
aHBvaW50U2V0VHlwZSwgYm9vbD4gU3RhdGVNYXA7CkBAIC04Nyw3ICsxMTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKICAgICAgICAgCiAgICAg
ICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQotICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNv
ZGVCbG9jaywgc2V0LCBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworICAgICAg
ICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24pOwogICAgICAgICAKICAg
ICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQpAQCAtMTA3LDYgKzEzMiwxNSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX3NldHMuY29udGFpbnMoc2V0KTsKICAgICB9CiAKKyAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZv
ciAoY29uc3QgV2F0Y2hwb2ludFNldFR5cGUmIGVudHJ5IDogbV9zZXRzKSB7CisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgQWRhcHRvcjo6ZHVtcEluQ29udGV4dChv
dXQsIGVudHJ5LCBjb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKwogcHJpdmF0ZToKICAgICBI
YXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlPiBtX3NldHM7CiAgICAgYm9vbCBtX3JlYWxseUFkZGVk
OwpAQCAtMTIyLDYgKzE1NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMYXppbHkoSW5mZXJy
ZWRWYWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAg
CisgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0
bHkuIFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9lcworICAgIC8vIHRoZSBy
ZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCisgICAg
dm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKICAg
ICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENv
ZGVCbG9jayosIENvbW1vbkRhdGEmKTsKQEAgLTE0NCwxMiArMTgyLDIwIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9
CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQo
a2V5KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1w
Q29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
IAogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPFdhdGNocG9pbnRTZXQq
PiBtX3NldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmxpbmVXYXRjaHBvaW50
U2V0Kj4gbV9pbmxpbmVTZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5mZXJy
ZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFsdWVzOwogICAgIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZp
ZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKKyAgICBHZW5lcmljRGVzaXJlZFdh
dGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCwxNCBAQCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6On5E
ZXNpcmVkV2Vha1JlZmVyCiAKIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXppbHko
SlNDZWxsKiBjZWxsKQogewotICAgIG1fcmVmZXJlbmNlcy5hZGQoY2VsbCk7CisgICAgaWYgKGNl
bGwpCisgICAgICAgIG1fcmVmZXJlbmNlcy5hZGQoY2VsbCk7Cit9CisKK3ZvaWQgRGVzaXJlZFdl
YWtSZWZlcmVuY2VzOjphZGRMYXppbHkoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUu
aXNDZWxsKCkpCisgICAgICAgIGFkZExhemlseSh2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKIGJvb2wg
RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpjb250YWlucyhKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgCiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQ2VsbDsKK2NsYXNz
IEpTVmFsdWU7CiBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCkBAIC00OCw2ICs0OSw3
IEBAIHB1YmxpYzoKICAgICB+RGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7CiAKICAgICB2b2lkIGFk
ZExhemlseShKU0NlbGwqKTsKKyAgICB2b2lkIGFkZExhemlseShKU1ZhbHVlKTsKICAgICBib29s
IGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9u
RGF0YSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTcsOCArMjU3LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChub2RlLT5oYXNNdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
KSB7CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBkYXRhLmlkZW50
aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdLCAi
fSIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KGRhdGEudmFy
aWFudHNbaV0sIGNvbnRleHQpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRh
dGEuY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29u
dGV4dChkYXRhLmNhc2VzW2ldLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhJiBk
YXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKQEAgLTUzMCw2ICs1MzAsOCBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgICAgIGlmICh2YWx1
ZS0+cG9pbnRzVG9IZWFwKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbkNvbnRl
eHQoKnZhbHVlLCAmbXlDb250ZXh0KSwgIlxuIik7CiAgICAgfQorCisgICAgb3V0LnByaW50KGlu
Q29udGV4dCh3YXRjaHBvaW50cygpLCAmbXlDb250ZXh0KSk7CiAgICAgCiAgICAgaWYgKCFteUNv
bnRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIG15Q29udGV4dC5kdW1wKG91dCk7CkBAIC04NDgs
NiArODUwLDMwIEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVGbGEKICAg
ICB9CiB9CiAKK2Jvb2wgR3JhcGg6OndhdGNoQ29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNXYXRjaGFibGUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHko
a2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5Lmhhc1Byb3RvdHlwZSgpKQorICAgICAgICBtX3Bs
YW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5wcm90b3R5cGUoKSk7CisgICAgaWYgKGtl
eS5oYXNSZXF1aXJlZFZhbHVlKCkpCisgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRM
YXppbHkoa2V5LnJlcXVpcmVkVmFsdWUoKSk7CisgICAgCisgICAgbV9wbGFuLndhdGNocG9pbnRz
LmFkZExhemlseShrZXkpOworCisgICAgaWYgKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRp
b246OlByZXNlbmNlKQorICAgICAgICBtX3NhZmVUb0xvYWQuYWRkKHN0ZDo6bWFrZV9wYWlyKGtl
eS5vYmplY3QoKSwga2V5Lm9mZnNldCgpKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgR3JhcGg6OmlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQoreworICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtlX3Bh
aXIoYmFzZSwgb2Zmc2V0KSk7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2
ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sq
LCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9
IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkBAIC0xMDIwLDggKzEwNDYsMTIg
QEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKUwogSlNWYWx1ZSBHcmFw
aDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJhc2UsIGNvbnN0IFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewot
ICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkKKyAg
ICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IElmIHdlIGp1c3QgY29udmVydGVkIHRoZSBvZmZzZXQgdG8gYSB1aWQs
IHdlIGNvdWxkIGRvIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uCisgICAgICAgIC8vIHdhdGNoaW5n
IHRvIGNvbnN0YW50LWZvbGQgdGhlIHByb3BlcnR5LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MjcxCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CisgICAgfQogICAgIAogICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2Us
IHN0cnVjdHVyZS5zZXQoKSwgb2Zmc2V0KTsKIH0KQEAgLTExNjcsMTcgKzExOTcsOSBAQCB2b2lk
IEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNl
dERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgR2V0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzW2ldOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCA9IHZh
cmlhbnQuc3RydWN0dXJlU2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IHNldC5zaXplKCk7IGotLTspCi0gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHNldFtqXSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgbmVlZCB0byBtYXJrIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hh
aW4gYmVjYXVzZSB0aGF0IHdvdWxkCi0gICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBk
ZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byBtYXJrIHRoZQot
ICAgICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0
IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAg
Ly8gdmFyaWFudHMgZGlkIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdmFyaWFu
dC5jYWxsTGlua1N0YXR1cygpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE11bHRpR2V0
QnlPZmZzZXRDYXNlJiBnZXRDYXNlIDogbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5jYXNl
cykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogZ2V0
Q2FzZS5zZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRSZWFkT25seVBvaW50ZXIoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NjUsNiArNjY1LDE1
IEBAIHB1YmxpYzoKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1
cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRjaHBv
aW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQogICAgIAorICAgIC8vIFJldHVy
bnMgZmFsc2UgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGludmFsaWQgb3IgdW53YXRjaGFibGUuIElm
IHRoaXMgaXMgYSBQcmVzZW5jZSBjb25kaXRpb24sCisgICAgLy8gdGhpcyBhbHNvIG1ha2VzIGl0
IGNoZWFwIHRvIHF1ZXJ5IGlmIHRoZSBjb25kaXRpb24gaG9sZHMuIEFsc28gbWFrZXMgc3VyZSB0
aGF0IHRoZSBHQyBrbm93cworICAgIC8vIHdoYXQncyBnb2luZyBvbi4KKyAgICBib29sIHdhdGNo
Q29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisKKyAgICAvLyBDaGVj
a3MgaWYgaXQncyBrbm93biB0aGF0IGxvYWRpbmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRo
ZSBnaXZlbiBvZmZzZXQgaXMgZmluZS4gVGhpcyBpcworICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNr
aW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgorICAg
IGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisgICAg
CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayopOwogICAg
IEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKICAg
ICAKQEAgLTg0NCw2ICs4NTMsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxl
RGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7
CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+
IG1fYnl0ZWNvZGVLaWxsczsKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxKU09iamVjdCosIFByb3Bl
cnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOwogICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwog
ICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQb3N0TnVtYmVyaW5nOwogICAgIE5hdHVyYWxMb29w
cyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTXVsdGlHZXRC
eU9mZnNldERhdGEuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRnJv
emVuVmFsdWUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordm9pZCBHZXRCeU9mZnNldE1ldGhvZDo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQobV9raW5kLCAiOiIpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJbnZh
bGlkOgorICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wSW5Db250ZXh0KGNv
bnN0YW50KCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDoKKyAg
ICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9h
ZEZyb21Qcm90b3R5cGU6CisgICAgICAgIG91dC5wcmludChvZmZzZXQoKSwgIkAiLCBwb2ludGVy
RHVtcEluQ29udGV4dChwcm90b3R5cGUoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCit2b2lkIEdldEJ5T2Zmc2V0TWV0aG9kOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIE11
bHRpR2V0QnlPZmZzZXRDYXNlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBD
b250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludChpbkNvbnRleHQobV9zZXQs
IGNvbnRleHQpLCAiOiIsIGluQ29udGV4dChtX21ldGhvZCwgY29udGV4dCkpOworfQorCit2b2lk
IE11bHRpR2V0QnlPZmZzZXRDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBHZXRCeU9mZnNldE1ldGhvZDo6
S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2V0QnlPZmZzZXRN
ZXRob2Q6OkludmFsaWQ6CisgICAgICAgIG91dC5wcmludCgiSW52YWxpZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAgICAgIG91
dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlPZmZz
ZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6CisgICAg
ICAgIG91dC5wcmludCgiTG9hZEZyb21Qcm90b3R5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTXVsdGlHZXRCeU9m
ZnNldERhdGFfaAorI2RlZmluZSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YV9oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBGcm96ZW5WYWx1ZTsKKworY2xhc3MgR2V0QnlPZmZzZXRNZXRo
b2QgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIEludmFsaWQsCisgICAgICAg
IENvbnN0YW50LAorICAgICAgICBMb2FkLAorICAgICAgICBMb2FkRnJvbVByb3RvdHlwZQorICAg
IH07CisgICAgCisgICAgR2V0QnlPZmZzZXRNZXRob2QoKQorICAgICAgICA6IG1fa2luZChJbnZh
bGlkKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEdldEJ5T2Zmc2V0TWV0aG9kIGNv
bnN0YW50KEZyb3plblZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEdldEJ5T2Zmc2V0TWV0
aG9kIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50OworICAgICAgICBy
ZXN1bHQudS5jb25zdGFudCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgR2V0QnlPZmZzZXRNZXRob2QgbG9hZChQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBMb2FkOworICAgICAgICByZXN1bHQudS5sb2FkLm9mZnNldCA9IG9m
ZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEdl
dEJ5T2Zmc2V0TWV0aG9kIGxvYWRGcm9tUHJvdG90eXBlKEZyb3plblZhbHVlKiBwcm90b3R5cGUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9k
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IExvYWRGcm9tUHJvdG90eXBlOworICAg
ICAgICByZXN1bHQudS5sb2FkLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0
LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFs
aWQ7IH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAg
ICAKKyAgICBGcm96ZW5WYWx1ZSogY29uc3RhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiB1LmNvbnN0YW50OworICAg
IH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZSogcHJvdG90eXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gTG9hZEZyb21Qcm90b3R5cGUpOworICAgICAgICByZXR1cm4g
dS5sb2FkLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gTG9hZCB8fCBraW5kKCkg
PT0gTG9hZEZyb21Qcm90b3R5cGUpOworICAgICAgICByZXR1cm4gdS5sb2FkLm9mZnNldDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgdW5pb24geworICAgICAgICBGcm96ZW5WYWx1ZSogY29uc3RhbnQ7CisgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogcHJvdG90eXBlOworICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICB9IGxvYWQ7CisgICAgfSB1Owor
ICAgIEtpbmQgbV9raW5kOworfTsKKworY2xhc3MgTXVsdGlHZXRCeU9mZnNldENhc2UgeworcHVi
bGljOgorICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IE11bHRpR2V0QnlPZmZzZXRDYXNlKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBjb25zdCBHZXRC
eU9mZnNldE1ldGhvZCYgbWV0aG9kKQorICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgLCBt
X21ldGhvZChtZXRob2QpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIHNl
dCgpIHsgcmV0dXJuIG1fc2V0OyB9CisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQoKSBjb25z
dCB7IHJldHVybiBtX3NldDsgfQorICAgIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2Qo
KSBjb25zdCB7IHJldHVybiBtX21ldGhvZDsgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RydWN0dXJlU2V0IG1fc2V0OworICAg
IEdldEJ5T2Zmc2V0TWV0aG9kIG1fbWV0aG9kOworfTsKKworc3RydWN0IE11bHRpR2V0QnlPZmZz
ZXREYXRhIHsKKyAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOworICAgIFZlY3RvcjxNdWx0
aUdldEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTXVsdGlHZXRC
eU9mZnNldERhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNp
bmNsdWRlICJERkdFcG9jaC5oIgogI2luY2x1ZGUgIkRGR0xhenlKU1ZhbHVlLmgiCisjaW5jbHVk
ZSAiREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIK
ICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKQEAg
LTY1LDExICs2Niw2IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlcjsKIH07CiAKLXN0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7Ci0g
ICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKLSAgICBWZWN0b3I8R2V0QnlJZFZhcmlhbnQs
IDI+IHZhcmlhbnRzOwotfTsKLQogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwogICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMj4g
dmFyaWFudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwxMCArMzI0LDE4IEBAIGJv
b2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgogICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CiAgICAgY2FzZSBQdXRCeU9m
ZnNldDogeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YSgpLm9mZnNldDsKKworICAgICAgICBpZiAoc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQpIHsKKyAgICAgICAgICAgIGlmIChKU09iamVj
dCoga25vd25CYXNlID0gbm9kZS0+Y2hpbGQxKCktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNPYmpl
Y3QqPigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdyYXBoLmlzU2FmZVRvTG9hZChrbm93bkJh
c2UsIG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlOwogICAg
ICAgICBpZiAodmFsdWUuaXNJbmZpbml0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgp
Lm9mZnNldDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUuc2l6ZSgpOyBpLS07KSB7
CiAgICAgICAgICAgICBpZiAoIXZhbHVlW2ldLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM3LDQyICszNDUsMjggQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICAKICAgICBjYXNlIE11bHRp
R2V0QnlPZmZzZXQ6IHsKICAgICAgICAgLy8gV2UgY2FuJ3QgYWx3YXlzIGd1YXJhbnRlZSB0aGF0
IHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGlzIHNhZmUgdG8gZXhlY3V0ZSBpZiBpdAotICAgICAgICAv
LyBjb250YWlucyBsb2FkcyBmcm9tIHByb3RvdHlwZXMuIFdlIGtub3cgdGhhdCBpdCB3b24ndCBs
b2FkIGZyb20gdGhvc2UgcHJvdG90eXBlcyBpZgotICAgICAgICAvLyB3ZSB3YXRjaCB0aGUgbXV0
YWJpbGl0eSBvZiB0aGUgcHJvcGVydGllcyBiZWluZyBsb2FkZWQuIFNvLCBoZXJlIHdlIHRyeSB0
bwotICAgICAgICAvLyBjb25zdGFudC1mb2xkIHByb3RvdHlwZSBsb2FkcywgYW5kIGlmIHRoYXQg
ZmFpbHMsIHdlIGNsYWltIHRoYXQgd2UgY2Fubm90IGhvaXN0LiBXZQotICAgICAgICAvLyBhbHNv
IGtub3cgdGhhdCBhIGxvYWQgaXMgc2FmZSB0byBleGVjdXRlIGlmIHdlIGFyZSB3YXRjaGluZyB0
aGUgcHJvdG90eXBlJ3MKLSAgICAgICAgLy8gc3RydWN0dXJlLgotICAgICAgICBmb3IgKGNvbnN0
IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52
YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCF2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkgewot
ICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgcHJvdG90eXBlIGxvYWQuCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEpTVmFsdWUgYmFzZSA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwotICAgICAgICAgICAgRnJv
emVuVmFsdWUqIGZyb3plbiA9IGdyYXBoLmZyZWV6ZShiYXNlKTsKLSAgICAgICAgICAgIGlmIChz
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZAotICAg
ICAgICAgICAgICAgICYmIGZyb3plbi0+c3RydWN0dXJlKCktPmRmZ1Nob3VsZFdhdGNoKCkKLSAg
ICAgICAgICAgICAgICAmJiBmcm96ZW4tPnN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KHZhcmlh
bnQub2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB3YXRjaGlu
ZyB0aGF0IGl0J3Mgc2FmZSB0byBsb2FkIGZyb20gdGhpcy4KLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZSBj
b25zdGFudFJlc3VsdCA9IGdyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAgICAg
ICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2
YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKLSAg
ICAgICAgICAgICAgICAvLyBDb3VsZG4ndCBjb25zdGFudC1mb2xkIGEgcHJvdG90eXBlIGxvYWQu
IFRoZXJlZm9yZSwgd2Ugc2hvdWxkbid0IGhvaXN0Ci0gICAgICAgICAgICAgICAgLy8gYmVjYXVz
ZSB0aGUgc2FmZXR5IG9mIHRoZSBsb2FkIGRlcGVuZHMgb24gc3RydWN0dXJlIGNoZWNrcyBvbiB0
aGUgcHJvdG90eXBlLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSdyZSB0b28gY2hlYXAgdG8g
dmVyaWZ5IHRoYXQgaGVyZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IC8vIGNvbnRhaW5zIGxvYWRzIGZyb20gcHJvdG90eXBlcy4gSWYgdGhlIGxvYWQgcmVxdWlyZXMg
YSBjaGVjayBpbiBJUiwgd2hpY2ggaXMgcmFyZSwgdGhlbgorICAgICAgICAvLyB3ZSBjdXJyZW50
bHkgY2xhaW0gdGhhdCB3ZSBkb24ndCBrbm93IGlmIGl0J3Mgc2FmZSB0byBleGVjdXRlIGJlY2F1
c2UgZmluZGluZyB0aGF0CisgICAgICAgIC8vIGNoZWNrIGluIHRoZSBhYnN0cmFjdCBzdGF0ZSB3
b3VsZCBiZSBoYXJkLiBJZiB0aGUgbG9hZCByZXF1aXJlcyB3YXRjaHBvaW50cywgd2UganVzdAor
ICAgICAgICAvLyBjaGVjayBpZiB3ZSdyZSBub3QgaW4gYSBjbG9iYmVyZWQgc3RhdGUgKGkuZS4g
aW4gYmV0d2VlbiBhIHNpZGUgZWZmZWN0IGFuZCBhbgorICAgICAgICAvLyBpbnZhbGlkYXRpb24g
cG9pbnQpLgorICAgICAgICBmb3IgKGNvbnN0IE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNl
IDogbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5jYXNlcykgeworICAgICAgICAgICAgR2V0
QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsKKyAgICAgICAgICAgIHN3
aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1l
dGhvZDo6Q29uc3RhbnQ6IC8vIE9LIGJlY2F1c2UgY29uc3RhbnRzIGFyZSBhbHdheXMgc2FmZSB0
byBleGVjdXRlLgorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDogLy8g
T0sgYmVjYXVzZSB0aGUgTXVsdGlHZXRCeU9mZnNldCBoYXMgaXRzIG93biBjaGVja3MgZm9yIGxv
YWRpbmcgZnJvbSBzZWxmLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6CisgICAgICAgICAgICAgICAg
Ly8gT25seSBPSyBpZiB0aGUgc3RhdGUgaXNuJ3QgY2xvYmJlcmVkLiBUaGF0J3MgYWxtb3N0IGFs
d2F5cyB0aGUgY2FzZS4KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3RydWN0dXJlQ2xvYmJl
clN0YXRlKCkgIT0gU3RydWN0dXJlc0FyZVdhdGNoZWQpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIWdyYXBoLmlzU2FmZVRvTG9hZChtZXRo
b2QucHJvdG90eXBlKCktPmNhc3Q8SlNPYmplY3QqPigpLCBtZXRob2Qub2Zmc2V0KCkpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2Ug
d2lsbCBlaXRoZXI6Ci0gICAgICAgICAgICAvLyAtIE5vdCBsb2FkIGZyb20gdGhlIHByb3RvdHlw
ZSBiZWNhdXNlIGNvbnN0YW50IGZvbGRpbmcgd2lsbCBzdWNjZWVkIGluIHRoZQotICAgICAgICAg
ICAgLy8gICBiYWNrZW5kLCBvcgotICAgICAgICAgICAgLy8gLSBFbWl0IGludmFsaWQgY29kZSB0
aGF0IGZhaWxzIHdhdGNocG9pbnQgY2hlY2tzLiBUaGlzIGNvdWxkIGhhcHBlbiBpZiB0aGUKLSAg
ICAgICAgICAgIC8vICAgcHJvcGVydHkgYmVjb21lcyBtdXRhYmxlIGFmdGVyIHRoaXMgcG9pbnQs
IHNpbmNlIHdlIGFscmVhZHkgc2V0IHRoZSB3YXRjaHBvaW50Ci0gICAgICAgICAgICAvLyAgIGFi
b3ZlLiBUaGlzIGNhc2UgaXMgT0sgc2luY2UgdGhlIGNvZGUgd2lsbCBmYWlsIHdhdGNocG9pbnQg
Y2hlY2tzIGFuZCBuZXZlcgotICAgICAgICAgICAgLy8gICBnZXQgaW5zdGFsbGVkLgogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTUgKzg2
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRz
W2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmVzKHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0
byB3YXRjaCBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3Vs
ZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBD
aGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlH
ZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB2YXJp
YW50cyBkaWQgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdmFyaWFudC5j
YWxsTGlua1N0YXR1cygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNlIDogbm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKS5jYXNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lz
dGVyU3RydWN0dXJlcyhnZXRDYXNlLnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgzNywyNCArMzgzNywy
NCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRh
dGEgPSBtX25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAKLSAgICAgICAgaWYgKGRhdGEu
dmFyaWFudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChkYXRhLmNhc2VzLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGNyZWF0aW5nIGEgUGhpIGZ1bmN0aW9u
IHdpdGggemVybyBpbnB1dHMuIExMVk0gZG9lc24ndCBsaWtlIHRoYXQuCiAgICAgICAgICAgICB0
ZXJtaW5hdGUoQmFkQ2FjaGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2NrcyhkYXRhLnZhcmlhbnRz
LnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KQorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2NrcyhkYXRhLmNhc2Vz
LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBp
LS07KQogICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0
aUdldEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOwogICAgICAgICBMQmFzaWNCbG9jayBleGl0ID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGZhaWwiKSk7CiAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRC
eU9mZnNldCBjb250aW51YXRpb24iKSk7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8U3dpdGNo
Q2FzZSwgMj4gY2FzZXM7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpLnNpemUoKTsgai0tOykg
ewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFyaWFudC5zdHJ1Y3R1
cmVTZXQoKVtqXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRh
LmNhc2VzW2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZ2V0Q2FzZS5zZXQoKS5z
aXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdl
dENhc2Uuc2V0KClbal07CiAgICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0dXJlKTsK
ICAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlSUQo
c3RydWN0dXJlKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAgICAgICAgIH0KQEAgLTM4
NjUsMjkgKzM4NjUsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21C
bG9jaywgMj4gcmVzdWx0czsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwg
aSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOworICAg
ICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8
IGRhdGEuY2FzZXMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsK
LSAgICAgICAgICAgIGJhc2VTZXQubWVyZ2UodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3Vs
dDsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0YW50UmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAot
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5iYXNl
U3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGNvbnN0YW50UmVzdWx0KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50UmVzdWx0KSk7Ci0gICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgpKSB7
CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpDb25zdGFudDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpT
VmFsdWU6OmVuY29kZShtZXRob2QuY29uc3RhbnQoKS0+dmFsdWUoKSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6TG9hZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRG
cm9tUHJvdG90eXBlOiB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5QmFzZTsKLSAg
ICAgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2ludGVyKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KTsKLSAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5raW5k
KCkgPT0gR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQpCiAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5QmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0lubGluZU9mZnNldCh2YXJp
YW50Lm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5QmFzZSA9IHdlYWtQb2ludGVyKG1ldGhvZC5wcm90b3R5cGUoKS0+dmFsdWUoKS5h
c0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc0lubGluZU9mZnNldChtZXRob2Qub2Zm
c2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBtX291dC5sb2FkUHRy
KHByb3BlcnR5QmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGxvYWRQcm9wZXJ0eShwcm9wZXJ0eUJhc2UsIGRhdGEuaWRlbnRpZmllck51
bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gbG9hZFByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2Us
IGRhdGEuaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXN1
bHRzLmFwcGVuZChtX291dC5hbmNob3IocmVzdWx0KSk7CiAgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgdm9pZCByZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLAog
ICAgIGJvb2wgY29tcGFjdCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0lt
cHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50
Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNv
ZGVCbG9jaykpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxv
Y2spOwpAQCAtMTMyLDQ3ICsxMzIsMzMgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNj
ZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCitzdGF0aWMgdm9pZCBjaGVj
a09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sCiAgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChvYmplY3Qt
PnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9u
V2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlz
IGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3Nl
cnQKLSAgICAgICAgICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gYnJhbmNoU3RydWN0dXJlKAot
ICAgICAgICAgICAgICAgIGppdCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5lZmZlY3RpdmVXYXRj
aHBvaW50KTsKLSAgICAgICAgICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KKyAgICBpZiAo
Y29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkg
eworICAgICAgICBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9u
V2F0Y2hwb2ludCgKKyAgICAgICAgICAgIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2Nr
LCBjb25kaXRpb24pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKKwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUo
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7CisgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2Ny
YXRjaEdQUik7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKLSAgICAgICAgYnJhbmNoU3RydWN0
dXJlKGppdCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgYnJhbmNoU3Ry
dWN0dXJlKAorICAgICAgICAgICAgaml0LCBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmUpKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgIEpTVmFsdWUgcHJvdG90eXBlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorc3RhdGljIHZvaWQgY2hlY2tP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIHNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywKICAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHByb3RvdHlwZS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXND
ZWxsKCkpOwotICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAg
cHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7
CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogc2V0
KSB7CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb24oCisgICAgICAgICAgICBj
b25kaXRpb24sIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNo
R1BSKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCkBAIC0yOTYsMTEgKzI4MiwxMyBAQCBzdGF0aWMg
RnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1dFByCiAKIHN0YXRpYyBib29sIGdlbmVyYXRl
QnlJZFN0dWIoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBCeUlkU3R1YktpbmQga2luZCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLAotICAgIEZ1bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3Vu
dCwKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBib29s
IGxvYWRUYXJnZXRGcm9tUHJveHksIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsCi0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2Fz
ZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKKyAgICBGdW5jdGlv
blB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBKU09iamVjdCogYWx0ZXJuYXRl
QmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBs
b2FkVGFyZ2V0RnJvbVByb3h5LAorICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIENv
ZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VM
YWJlbCwKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKLQorICAg
IEFTU0VSVChjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CisgICAgCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IEpTVmFsdWVSZWdzKApAQCAt
MzQ2LDM3ICszMzQsMzEgQEAgc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKICAgICB9CiAK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIGlmIChz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkp
CisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IGNv
bmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAgICAgICAgIHZtLT5y
ZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZv
LmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKICAgICBpZiAod2F0Y2hwb2ludFNldCkKICAg
ICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2Nr
KSk7CiAKLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7IAotICAgIEpT
T2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgaWYgKGNoYWluKSB7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgICAgICBwcm90b09i
amVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0gcHJvdG9PYmplY3QtPnN0
cnVjdHVyZSgpOwotICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygpLm5l
d0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgICAgIHZtLT5y
ZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZv
LmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG9PYmplY3QsIHByb3RvU3RydWN0dXJl
LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgp
OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCghcHJvdG9PYmplY3QgfHwgcHJvdG9PYmplY3Qt
PnN0cnVjdHVyZSgpID09IGN1cnJTdHJ1Y3R1cmUpOworICAgIGNoZWNrT2JqZWN0UHJvcGVydHlD
b25kaXRpb25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0
dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisKKyAgICBpZiAoaXNWYWxpZE9mZnNl
dChvZmZzZXQpKSB7CisgICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICAgICAg
aWYgKGNvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gY29u
ZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAg
ICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMo
KnZtLCBvZmZzZXQpOwogICAgIH0KICAgICAKLSAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNo
aW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOwogICAgIEdQUlJlZyBiYXNl
Rm9yQWNjZXNzR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICBpZiAoa2luZCAhPSBHZXRVbmRlZmlu
ZWQpIHsKLSAgICAgICAgaWYgKGNoYWluKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRj
aEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRo
ZSB0YXJnZXQuCiAgICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIHN0
dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGJhc2VG
b3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gRm9yIHByb3h5IG9iamVjdHMsIHdlIG5lZWQgdG8gZG8gYWxsIHRoZSBTdHJ1Y3R1cmUgY2hl
Y2tzIGJlZm9yZSBtb3ZpbmcgdGhlIGJhc2VHUFIgaW50bwpAQCAtNjI1LDkgKzYwNyw4IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFYKICAgICAgICAgYXNPYmplY3Qo
Y2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKICAgICB9Ci0gICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpOwogICAgIAotICAgIGlmICh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9w
ZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRz
KCkpCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkK
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICByZXR1cm4gQXR0ZW1wdFRvQ2Fj
aGU7CkBAIC04MjUsMjEgKzgwNiwyMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVp
bGRHZXRCeUlECiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vu
c2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBTdHJ1Y3R1
cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgIHNpemVfdCBjb3VudCA9IDA7CiAgICAg
CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgIGlmIChz
bG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAgICAgICAg
IGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCBzdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICAg
ICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90
b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0g
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKCp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nl
c3MoCi0gICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlk
ZW50LCBvZmZzZXQpOwotICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQorICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKworICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4
ZWMpOworCisgICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6
IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwogICAgIH0KICAgICAK
ICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6ZnJvbShzdHViSW5mbyk7CkBAIC04NTAsNyArODMxLDcgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmU7CiAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAg
ICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywg
cHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIAorICAgICAgICBleGVjLCBraW5kRm9yKHNs
b3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90
LnNsb3RCYXNlKCksIG9mZnNldCwgCiAgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Q
cm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAog
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1
YkluZm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAtODY5LDcgKzg1MCw3IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0
QnlJZEFjY2VzcygKICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBh
Y2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0dXJlLAotICAgICAgICBwcm90b3R5cGVDaGFp
biwgY291bnQpKTsKKyAgICAgICAgY29uZGl0aW9uU2V0KSk7CiAgICAgCiAgICAgcGF0Y2hKdW1w
VG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAg
ICAgCkBAIC05OTEsMjYgKzk3MiwyOCBAQCBzdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIo
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0
aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0
dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCkKK3N0YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgCisgICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1
Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAg
UHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgaWYgKCFvbGRT
dHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBw
YXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwogICAgIHN0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZz
ZXQpOwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEg
cmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFr
ZSBpdCBoYXBwZW4uCiAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgogICAg
ICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVk
IHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwpAQCAtMTAxOCwxNCArMTAwMSwxNCBAQCBz
dGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEKICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CiAgICAgaWYgKG9sZFN0cnVjdHVyZS0+
Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKSA9PSBJbnZhbGlk
UHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgU3RydWN0dXJl
Q2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gZW1pdFB1dFRyYW5zaXRpb25TdHViCisg
ICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICp2bSwg
ZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWls
dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwpAQCAtMTA4MSwxNyArMTA2
NCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgCiAgICAgICAgIG9sZFN0cnVjdHVyZSkpOwogICAgIAotICAgIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKLSAgICAgICAgb2xkU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwg
ZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAg
ICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIAotICAgIGlmIChwdXRLaW5kID09IE5vdERp
cmVjdCkgewotICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3Rv
dHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUo
KSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0g
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICB9Ci0gICAgfQorICAgIGNoZWNr
T2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7
CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCkBAIC0xMjI2
LDcgKzEyMDAsNyBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAg
ICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVC
bG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9E
b25lKSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQpAQCAtMTI1NCw4
ICsxMjI4LDggQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAg
ICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAg
ICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gb2xk
U3RydWN0dXJlOworICAgIAorICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQgcHV0S2luZCkKQEAgLTEyNzksMTIgKzEyNTMsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYg
c2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQ
cm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJlKGV4ZWMs
IHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgICAg
ICAgICBpZiAoIW9sZFN0cnVjdHVyZSkKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVj
dHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVj
dHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldCgKQEAgLTEyOTIsNyArMTI2NSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVw
YXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHBy
b3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBw
cm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgc3R1YkluZm8u
aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
b2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3Qp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAg
ICAgICB9CkBAIC0xMzEwLDIwICsxMjgzLDMxIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERv
bnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwog
Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVf
dCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAg
ICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vzcyhl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgICAg
IGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgICAgICAgICBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0
dXJlLCBzbG90LmJhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LmltcGwoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90
b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IGludmFsaWRP
ZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCiAg
ICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3QgPSBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAgICAgICBi
b29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9y
KHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4s
IGNvdW50LAorICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZv
cihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNlKCksCiAgICAgICAgICAg
ICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0RvbmUpLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSksCkBAIC0xMzM0LDcg
KzEzMTgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAg
ICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2Fj
aGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpD
dXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3Vu
dCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwog
CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBAIC0xMzc4LDE3ICsxMzYyLDE2IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAgICAgIGlmIChs
aXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8g
V2lsbCBnZXQgaGVyZSBkdWUgdG8gcmVjdXJzaW9uLgogCi0gICAgICAgICAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShl
eGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5k
KTsKLQotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUpIAorICAgICAgICAgICAgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1Yihl
eGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5k
LCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
biA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgICAgICAgICBzdHViUm91
dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNz
KAogICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24oCiAgICAgICAgICAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAg
ICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LAogICAg
ICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkpOwogCiAgICAgICAgIH0gZWxzZSB7CkBAIC0x
NDIxLDIxICsxNDA0LDMyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5
SWQKICAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxl
U2V0dGVyKCkpCiAgICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3Bp
bGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50
ID0gMDsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZSAhPSBzbG90LmJhc2UoKSkgewotICAgICAgICAg
ICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0
cnVjdHVyZSwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKLSAgICAgICAgICAg
IGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KICAgICAgICAgCisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7Cisg
ICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgICAgICAgICAgICAgICAgICAgICAq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5i
YXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAg
ICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQo
CisgICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IGlu
dmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgp
OworCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3Qg
PSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAogICAg
ICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBr
aW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHBy
b3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHBy
b3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90
LmJhc2UoKSwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwK
ICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCkBAIC0xNDQ2LDcgKzE0NDAsNyBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgIGxpc3Qt
PmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0
dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0
ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5j
dXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCiAgICAgICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBAIC0xNDg1LDExICsxNDc5LDE3IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKLSAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgIEpTVmFsdWUgZm91bmRTbG90QmFz
ZSA9IHdhc0ZvdW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpOwotICAgIHNpemVfdCBj
b3VudCA9ICFmb3VuZFNsb3RCYXNlIHx8IGZvdW5kU2xvdEJhc2UgIT0gYmFzZSA/IAotICAgICAg
ICBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwg
Zm91bmRTbG90QmFzZSwgaWRlbnQsIG9mZnNldElnbm9yZWQpIDogMDsKLSAgICBpZiAoY291bnQg
PT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKKyAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKHNsb3Quc2xv
dEJhc2UoKSAhPSBiYXNlKSB7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFz
ZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAg
ICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSk7CisgICAgfQorICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CkBAIC0xNTE0LDcgKzE1MTQs
NiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAKICAgICB7CkBAIC0xNTQ1LDE4ICsxNTQ0LDgg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgaWYgKHNs
b3Qud2F0Y2hwb2ludFNldCgpKQogICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCktPmFk
ZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIFN0cnVjdHVy
ZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAg
ICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvdHlwZS0+c3RydWN0dXJl
KCk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgcHJvdG90eXBlLCBwcm90b1N0cnVjdHVyZSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJv
cGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNv
ZGVCbG9jaykpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAg
ICAgfQorICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgICAg
IGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
ICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bi5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgi
Ci0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUo
cHJvdG90eXBlKQotewotICAgIEFTU0VSVChtX3Byb3RvdHlwZS5pc051bGwoKSB8fCBtX3Byb3Rv
dHlwZS5pc09iamVjdCgpKTsKLSAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUp
LT5zdHJ1Y3R1cmUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlw
ZVN0cnVjdHVyZSgpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY3VycmVudCk7Ci19Ci0KLUlu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkKQotICAgIDogbV9nbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3Vw
KG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBpZiAobV9wcm90b3R5cGUuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGFzT2JqZWN0KG1fcHJv
dG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQ
cm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwot
fQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJvdG90eXBlU3Ry
dWN0dXJlKQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkK
LSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVj
dCkpCi17Ci0gICAgbV92ZWN0b3IuYXBwZW5kKHByb3RvdHlwZVN0cnVjdHVyZSk7Ci19Ci0KLUlu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQotICAgIDog
bV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90
eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgY2hhaW4tPmhlYWQoKVtpXTsgKytpKQotICAgICAgICBtX3ZlY3Rv
ci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJl
Q2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCkKLSAgICA6
IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3Rv
dHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBtX3ZlY3Rvci5hcHBl
bmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46
On5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCkKLXsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjppc1N0aWxsVmFsaWQoKSBjb25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3Rv
dHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rv
ci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSkt
PnN0cnVjdHVyZSgpICE9IG1fdmVjdG9yW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjdXJyZW50UHJvdG90eXBlID0gbV92ZWN0b3JbaV0tPnN0b3JlZFByb3RvdHlwZSgp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjptYXRjaGVzKFN0cnVjdHVyZUNoYWluKiBjaGFpbikgY29uc3QKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
dmVjdG9yW2ldICE9IGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmIChjaGFpbi0+aGVhZCgpW21fdmVjdG9yLnNpemUoKV0pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjptYXlJbnRlcmNlcHRTdG9yZVRvKFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsK
LSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3JtYWxp
emVkKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotewotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0KGkp
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSlNPYmplY3QqIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW46OnRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoIW1fdmVjdG9yLmlzRW1wdHkoKSk7Ci0gICAgaWYgKG1fdmVjdG9yLnNpemUoKSA9PSAxKQot
ICAgICAgICByZXR1cm4gYXNPYmplY3QobV9wcm90b3R5cGUpOwotICAgIHJldHVybiBhc09iamVj
dChtX3ZlY3RvclttX3ZlY3Rvci5zaXplKCkgLSAyXS0+c3RvcmVkUHJvdG90eXBlKCkpOwotfQot
Ci1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om9wZXJhdG9yPT0oY29uc3QgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0
ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0Ci0gICAgICAgICYmIG1fcHJvdG90eXBlID09IG90aGVy
Lm1fcHJvdG90eXBlCi0gICAgICAgICYmIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOwotfQot
Ci12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVj
dHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSBjdXJyZW50UHJv
dG90eXBlID0gbV9wcm90b3R5cGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUo
KTsgKytpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gYXNPYmplY3QoY3Vy
cmVudFByb3RvdHlwZSk7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGF0
KGkpOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKENvbnN0YW50U3RydWN0dXJlQ2hlY2soY3VycmVu
dE9iamVjdCwgY3VycmVudFN0cnVjdHVyZSkpOwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0g
Y3VycmVudFN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KTsKLSAg
ICB9Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRl
cigmbV9nbG9iYWxPYmplY3QpOwotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgm
bV9wcm90b3R5cGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0t
OykKLSAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fdmVjdG9yW2ld
KTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIDApOwotfQotCi12b2lkIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KAotICAgICAgICAiKGdsb2Jh
bCA9ICIsIFJhd1BvaW50ZXIobV9nbG9iYWxPYmplY3QpLCAiLCBoZWFkID0gIiwKLSAgICAgICAg
aW5Db250ZXh0KG1fcHJvdG90eXBlLCBjb250ZXh0KSwgIiwgdmVjdG9yID0gWyIpOwotICAgIENv
bW1hUHJpbnRlciBjb21tYTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXBJbkNvbnRl
eHQobV92ZWN0b3JbaV0sIGNvbnRleHQpKTsKLSAgICBvdXQucHJpbnQoIl0pIik7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlbmRlZFN0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAxODc2MDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEludGVuZGVkU3RydWN0dXJlQ2hh
aW5faAotI2RlZmluZSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLQotI2luY2x1ZGUgIkNvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwot
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFZNOwot
c3RydWN0IER1bXBDb250ZXh0OwotCi1jbGFzcyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluIDogcHVi
bGljIFJlZkNvdW50ZWQ8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gewotcHVibGljOgotICAgIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKik7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlw
ZVN0cnVjdHVyZSk7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pOwotICAgIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwg
U3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCk7Ci0gICAgfkludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oKTsKLSAgICAKLSAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OwotICAg
IGJvb2wgbWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiopIGNvbnN0OwotICAgIGJvb2wgbWF5SW50ZXJj
ZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICBib29sIGlzTm9ybWFsaXpl
ZCgpOwotICAgIAotICAgIGJvb2wgdGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHko
KTsKLSAgICAKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90
eXBlOyB9Ci0gICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5z
aXplKCk7IH0KLSAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3JbaW5kZXhdOyB9Ci0gICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgSlNPYmplY3QqIHRlcm1p
bmFsUHJvdG90eXBlKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3IubGFzdCgpOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZ2F0aGVy
Q2hlY2tzKENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKSBjb25zdDsKLSAgICAKLSAgICB2
b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29u
dGV4dCopIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9i
YWxPYmplY3Q7Ci0gICAgSlNWYWx1ZSBtX3Byb3RvdHlwZTsKLSAgICBWZWN0b3I8U3RydWN0dXJl
Kj4gbV92ZWN0b3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW5faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNDggKzE5NCw2IEBA
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0FkZChDYWxsRnJhbWUqIGMKIAogI2RlZmluZSBJbnZh
bGlkUHJvdG90eXBlQ2hhaW4gKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCiAK
LWlubGluZSBzaXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIHNsb3RPZmZz
ZXQpCi17Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwotICAgIHNpemVfdCBjb3VudCA9
IDA7Ci0gICAgICAgIAotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlz
UHJveHkoKSkKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUHJvdG90eXBlQ2hhaW47Ci0KLSAg
ICAgICAgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvID0gc3RydWN0dXJlLT50eXBlSW5mbygpOwot
ICAgICAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5
cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAg
cmV0dXJuIEludmFsaWRQcm90b3R5cGVDaGFpbjsKLSAgICAgICAgICAgIAotICAgICAgICBKU1Zh
bHVlIHYgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpOwotCi0gICAg
ICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHNsb3RCYXNlIGluIHRoZSBiYXNlJ3MgcHJvdG90eXBl
IGNoYWluLCB0aGVuIHRoZSBiYXNlCi0gICAgICAgIC8vIG11c3QgYmUgYSBwcm94eSBmb3IgYW5v
dGhlciBvYmplY3QuCi0KLSAgICAgICAgaWYgKHYuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlm
ICghc2xvdEJhc2UpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4g
SW52YWxpZFByb3RvdHlwZUNoYWluOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNDZWxsKiBjZWxs
ID0gdi5hc0NlbGwoKTsKLSAgICAgICAgc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsK
LSAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwg
aXQncyBhIGdvb2QgYmV0IHRoYXQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVk
IGFzIGEgZGljdGlvbmFyeS4KLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
IHsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0s
IGFzT2JqZWN0KGNlbGwpKTsKLSAgICAgICAgICAgIGlmIChzbG90QmFzZSA9PSBjZWxsKQotICAg
ICAgICAgICAgICAgIHNsb3RPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1l
KTsgCi0gICAgICAgIH0KLSAgICAgICAgKytjb3VudDsKLQotICAgICAgICBpZiAoc2xvdEJhc2Ug
PT0gY2VsbCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJu
IGNvdW50OwotfQotCiBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSYgdm0gPSBj
YWxsRnJhbWUtPnZtKCk7CkBAIC0yNTgsMjMgKzIxNiw2IEBAIGlubGluZSBzaXplX3Qgbm9ybWFs
aXplUHJvdG90eXBlQ2hhaW4oQ2EKICAgICB9CiB9CiAKLWlubGluZSBib29sIGlzUHJvdG90eXBl
Q2hhaW5Ob3JtYWxpemVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQotewotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQ
cm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAg
IEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIGlmICh2LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgc3RydWN0dXJlID0gdi5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIE9wZXJhdGlvbnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEy
LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIGVsc2UK
ICAgICAgICAgbWF4VHJhbnNpdGlvbkxlbmd0aCA9IHNfbWF4VHJhbnNpdGlvbkxlbmd0aDsKICAg
ICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uQ291bnQoKSA+IG1heFRyYW5zaXRpb25MZW5ndGgp
IHsKLSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9u
ID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJl
ZCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CiAgICAgICAgIG9m
ZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAg
ICAgICAgcmV0dXJuIHRyYW5zaXRpb247CkBAIC00ODksMTEgKzQ4OSwxMSBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhCiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0K
IAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCkKK1N0cnVjdHVyZSogU3Ry
dWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIERpY3Rpb25hcnlLaW5kIGtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hl
YWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2
bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRl
ZmVyR0MpOwpAQCAtNTA3LDkgKzUwNyw5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rp
b25hcnlUcmFuc2kKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlU
cmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERlZmVycmVkU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKLSAgICByZXR1cm4gdG9EaWN0
aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCk7Cisg
ICAgcmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgQ2FjaGVkRGlj
dGlvbmFyeUtpbmQsIGRlZmVycmVkKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvVW5j
YWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQpAQCAtNzYxLDYgKzc2MSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6YWxsb2NhdGVSYXJlRGF0YShW
TSYgdm0pCiBXYXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIEFT
U0VSVCghaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisKKyAgICAvLyBJbiBzb21lIHBsYWNl
cyBpdCdzIGNvbnZlbmllbnQgdG8gY2FsbCB0aGlzIHdpdGggYW4gaW52YWxpZCBvZmZzZXQuIFNv
LCB3ZSBkbyB0aGUgY2hlY2sgaGVyZS4KKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQog
ICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKQEAgLTc4MSwxMSArNzg1LDcgQEAgdm9pZCBT
dHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvcgogewogICAgIEFTU0VSVCghaXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIG9mZnNldCk7CisgICAgc3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVw
bGFjZW1lbnRzKHZtLCBnZXQodm0sIHByb3BlcnR5TmFtZSkpOwogfQogCiB2b2lkIFN0cnVjdHVy
ZTo6ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQpAQCAtMTExNyw2ICsxMTE3LDE3IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGMKICAgICAKICAgICBpZiAobV9wcm90b3R5cGUuZ2V0KCkuaXNDZWxsKCkpCiAg
ICAgICAgIG91dC5wcmludCgiLCBQcm90bzoiLCBSYXdQb2ludGVyKG1fcHJvdG90eXBlLmdldCgp
LmFzQ2VsbCgpKSk7CisKKyAgICBzd2l0Y2ggKGRpY3Rpb25hcnlLaW5kKCkpIHsKKyAgICBjYXNl
IE5vbmVEaWN0aW9uYXJ5S2luZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWREaWN0
aW9uYXJ5S2luZDoKKyAgICAgICAgb3V0LnByaW50KCIsIERpY3Rpb25hcnkiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kOgorICAgICAgICBvdXQucHJp
bnQoIiwgVW5jYWNoZWFibGVEaWN0aW9uYXJ5Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KICAg
ICAKICAgICBvdXQucHJpbnQoIl0iKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAy
MDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
U3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNW
YWx1ZSBwcm90b3R5cGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUq
IGF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1
Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rp
b25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9V
bmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogc2VhbFRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVU
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CkBAIC0xOTQsNyArMTk0LDE5IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkg
IT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CiAgICAgYm9vbCBpc1VuY2FjaGVhYmxlRGljdGlvbmFy
eSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgPT0gVW5jYWNoZWREaWN0aW9uYXJ5
S2luZDsgfQogICAKLSAgICBib29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB7IHJl
dHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQgJiYgIXR5cGVJ
bmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCk7IH0KKyAgICBib29sIHByb3BlcnR5QWNj
ZXNzZXNBcmVDYWNoZWFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlLaW5k
KCkgIT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZAorICAgICAgICAgICAgJiYgIXR5cGVJbmZvKCku
cHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkKKyAgICAgICAgICAgICYmICEodHlwZUluZm8oKS5o
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8oKS5uZXdJbXB1cmVQcm9w
ZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgICAgICAgICAmJiB0eXBlSW5mbygpLmhhc0ltcHVyZUdl
dE93blByb3BlcnR5U2xvdCgpCisgICAgICAgICAgICAmJiB0eXBlSW5mbygpLm5ld0ltcHVyZVBy
b3BlcnR5RmlyZXNXYXRjaHBvaW50cygpOworICAgIH0KIAogICAgIC8vIFdlIHVzZSBTbG93UGF0
aCBpbiBHZXRCeUlkU3RhdHVzIGZvciBzdHJ1Y3R1cmVzIHRoYXQgbWF5IGdldCBuZXcgaW1wdXJl
IHByb3BlcnRpZXMgbGF0ZXIgdG8gcHJldmVudAogICAgIC8vIERGRyBmcm9tIGlubGluaW5nIHBy
b3BlcnR5IGFjY2Vzc2VzIHNpbmNlIHN0cnVjdHVyZXMgZG9uJ3QgdHJhbnNpdGlvbiB3aGVuIGEg
bmV3IGltcHVyZSBwcm9wZXJ0eSBhcHBlYXJzLgpAQCAtMjAyLDcgKzIxNCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5
U2xvdCgpOwogICAgIH0KLQorICAgIAogICAgIC8vIFR5cGUgYWNjZXNzb3JzLgogICAgIFR5cGVJ
bmZvIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09
IGluZm8oKSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9
CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3Qo
KTsgfQpAQCAtNTI4LDcgKzU0MCw3IEBAIHByaXZhdGU6CiAgICAgLy8gdG8gdW5sb2NrIGl0Lgog
ICAgIHZvaWQgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oVmVjdG9yPFN0
cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiwgUHJvcGVydHlUYWJsZSomKTsK
ICAgICAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGlj
dGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJy
ZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
OwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzYsNiArNTM2LDcgQEAg
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsKIAog
ICAgIHZvaWQgcmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRp
ZmllciYsIFdhdGNocG9pbnQqKTsKKyAgICAKICAgICAvLyBGSVhNRTogVXNlIEF0b21pY1N0cmlu
ZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlmaWVyLgogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgU3RyaW5nJik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRv
LWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hlY2stbmV3Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZm9sZC1t
dWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1z
dHJ1Y3R1cmUtY2hlY2stbmV3LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNl
dC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay1uZXcuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MiBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOwor
fQorCitmdW5jdGlvbiBiYXIobykgeworICAgIHJldHVybiBvLmc7Cit9CisKK2Z1bmN0aW9uIGJh
eihvLCBwLCBxKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgaWYgKGlzRmluYWxUaWVyKCkp
IHsKKyAgICAgICAgcCA9IG87CisgICAgICAgIHEgPSBvOworICAgICAgICByZXN1bHQgKz0gMTAw
MDA7CisgICAgfQorICAgIHJlc3VsdCArPSBmb28ocCk7CisgICAgcmVzdWx0ICs9IGJhcihxKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGluZShiYXopOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIG8sIHAsIHE7CisgICAgdmFyIGV4cGVjdGVk
MTsKKyAgICB2YXIgZXhwZWN0ZWQyOworICAgIG8gPSB7ZjoxMDAsIGc6MTAxfTsKKyAgICBleHBl
Y3RlZDIgPSAxMDAwMCArIDEwMCArIDEwMTsKKyAgICBpZiAoaSAmIDEpIHsKKyAgICAgICAgcCA9
IHtlOjEsIGY6MiwgZzozfTsKKyAgICAgICAgcSA9IHtlOjQsIGY6NSwgZzo2fTsKKyAgICAgICAg
ZXhwZWN0ZWQxID0gMiArIDY7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcCA9IHtmOjcsIGc6OH07
CisgICAgICAgIHEgPSB7Zzo5LCBmOjEwfTsKKyAgICAgICAgZXhwZWN0ZWQxID0gNyArIDk7Cisg
ICAgfQorICAgIHZhciByZXN1bHQgPSBiYXoobywgcCwgcSk7CisgICAgaWYgKHJlc3VsdCAhPSBl
eHBlY3RlZDEgJiYgcmVzdWx0ICE9IGV4cGVjdGVkMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0ICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkMSArICIgb3Ig
IiArIGV4cGVjdGVkMiArICIpIjsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9tdWx0aS1nZXQtYnktb2Zmc2V0LXNlbGYtb3ItcHJvdG8uanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1nZXQtYnktb2Zm
c2V0LXNlbGYtb3ItcHJvdG8uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL211bHRpLWdldC1ieS1vZmZzZXQtc2VsZi1vci1wcm90by5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACitmdW5jdGlvbiBmb28obywgc3RhcnQpIHsKKyAg
ICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAg
ICAgICByZXN1bHQgKz0gby5mOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZv
byk7CisKK3ZhciBvID0ge307CitvLmYgPSA0MjsKK3ZhciBmID0ge307CitmLmYgPSA0MzsKK2Yu
ZyA9IDQ0OworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgby5mID0gaTsK
K28uZiA9IDQyOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIg
cDsKKyAgICBpZiAoaSAmIDEpCisgICAgICAgIHAgPSBvOworICAgIGVsc2UKKyAgICAgICAgcCA9
IE9iamVjdC5jcmVhdGUobyk7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhwKTsKKyAgICBpZiAocmVz
dWx0ICE9IDEwMCAqIDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Cit9CisKK3ZhciBxID0ge307CitxLmYgPSA0MzsKK3ZhciByZXN1bHQgPSBmb28ocSk7
CitpZiAocmVzdWx0ICE9IDEwMCAqIDQzKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBh
dCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQtZGljdGlvbmFyeS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQt
ZGljdGlvbmFyeS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC1kaWN0aW9uYXJ5LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjcgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsK
K30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIHAgPSB7Zjo0Mn07Cit2YXIgbyA9IE9iamVjdC5j
cmVhdGUocCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBwWyJpIiAr
IGldID0gaTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDEwMDsgKytqKSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSBmb28obyk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gNDIpCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgfQorfQorCisvLyBN
YWtlIHAgYSBub24tZGljdGlvbmFyeS4KK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsK
KyAgICB2YXIgdG1wID0gby5mOworfQorCitwLmYgPSA0MzsKK3ZhciByZXN1bHQgPSBmb28obyk7
CitpZiAocmVzdWx0ICE9IDQzKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6
ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jl
cGxhY2VtZW50LXdhdGNocG9pbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9yZXBsYWNlbWVudC13YXRjaHBvaW50LmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBsYWNlbWVudC13YXRjaHBv
aW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7
CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIHAgPSB7Zjo0Mn07
Cit2YXIgbyA9IE9iamVjdC5jcmVhdGUocCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyAr
K2kpIHsKKyAgICBwWyJpIiArIGldID0gaTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDEwMDsg
KytqKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgICAgIGlmIChyZXN1bHQg
IT0gNDIpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7
CisgICAgfQorfQorCitwLmYgPSA0MzsKK3ZhciByZXN1bHQgPSBmb28obyk7CitpZiAocmVzdWx0
ICE9IDQzKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nl
c3MtZGljdGlvbmFyeS10aGVuLXByb3RvLWNoYW5nZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3MtZGljdGlvbmFyeS10
aGVuLXByb3RvLWNoYW5nZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hh
bmdlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKK2Z1bmN0aW9uIGZvbygpIHsK
KyAgICB2YXIgcCA9IHt9OworICAgIHZhciBvID0ge307CisgICAgby5fX3Byb3RvX18gPSBwOwor
ICAgIHZhciByZXN1bHQ7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAg
ICAgICByZXN1bHQgPSBvLmY7CisgICAgICAgIGlmIChpID09IDUwKQorICAgICAgICAgICAgcC5m
ID0gNDI7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28o
KTsKK2lmIChyZXN1bHQgIT0gNDIpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVm
aW5lZC1hY2Nlc3MtdGhlbi1wcm90by1jaGFuZ2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hh
bmdlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy91bmRlZmluZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hhbmdlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTkgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKwor
bm9JbmxpbmUoZm9vKTsKKwordmFyIHAgPSB7fTsKK3ZhciBvID0gT2JqZWN0LmNyZWF0ZShwKTsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZv
byhvKTsKKyAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdCBpbiBsb29wOiAiICsgcmVzdWx0OworfQorCitwLmYgPSA0MjsKK3ZhciByZXN1
bHQgPSBmb28obyk7CitpZiAocmVzdWx0ICE9PSA0MikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NjA1KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTUtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBERkcg
c2hvdWxkIGhhdmUgYWRhcHRpdmUgc3RydWN0dXJlIHdhdGNocG9pbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY5MjkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBtaWNyb2JlbmNobWFyayB0
aGF0IGlsbHVzdHJhdGVzIHRoZSBuZWVkIGZvciB0aGlzIGZlYXR1cmUuIFRoaXMgYmVuY2htYXJr
IGdldHMgNTh4IGZhc3RlciB3aXRoCisgICAgICAgIHRoaXMgY2hhbmdlLgorCisgICAgICAgICog
anMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdp
dGgtbXV0YXRpbmctcHJvdG90eXBlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuanM6
IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNS0wNy0zMCAgQWFrYXNoIEphaW4gIDxhYWth
c2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBHb29nbGUgQXBwIEVuZ2luZSB3
aXRoIEFwcFNjYWxlCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nl
c3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3Rv
dHlwZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wcm90b3R5cGUtYWNjZXNz
LXdpdGgtbXV0YXRpbmctcHJvdG90eXBlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3Rv
dHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90
b3R5cGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90
eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wcm90b3R5cGUt
YWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0
aW5nLXByb3RvdHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlv
biBmb28obykgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBvLmY7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworbm9JbmxpbmUoZm9vKTsKKwordmFyIHAgPSB7Zjo0Mn07Cit2YXIgbyA9IE9iamVjdC5jcmVh
dGUocCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHBbImkiICsg
aV0gPSBpOworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAq
IDEwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvdW5kZWZpbmVkLXByb3Bl
cnR5LWFjY2Vzcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy91bmRlZmluZWQtcHJvcGVydHktYWNjZXNzLmpzCShyZXZpc2lvbiAxODc2MDUpCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy91bmRlZmluZWQtcHJvcGVydHkt
YWNjZXNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw3ICsxMSw3IEBAIGZ1bmN0aW9uIGZvbygp
IHsKIH0KIHJlc3VsdCA9IGZvbygpOwogaWYgKHJlc3VsdCAhPSB1bmRlZmluZWQpCi0gICAgdGhy
b3cgIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVz
dWx0OiAiICsgcmVzdWx0KTsKIAogLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGEgY2FjaGVkIHBy
b3BlcnR5IGxvb2t1cCBtaXNzIGRvZXNuJ3QgY29udGludWUgdG8gZmlyZSB3aGVuIHRoZSBwcm9w
ZXJ0eSBzdWRkZW5seSBhcHBlYXJzIG9uIHRoZSBvYmplY3QuCiAKQEAgLTI2LDcgKzI2LDcgQEAg
ZnVuY3Rpb24gYmFyKCkgewogfQogdmFyIHJlc3VsdCA9IGJhcigpOwogaWYgKHJlc3VsdCAhPSAx
KQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJv
cigiQmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiBzb21lR2xvYmFsID0gdW5kZWZpbmVkOwogCiAv
LyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgYSBjYWNoZWQgcHJvcGVydHkgbG9va3VwIG1pc3MgZG9l
c24ndCBjb250aW51ZSB0byBmaXJlIHdoZW4gdGhlIHByb3BlcnR5IHN1ZGRlbmx5IGFwcGVhcnMg
b24gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4KQEAgLTQ0LDUgKzQ0LDUgQEAgZnVuY3Rpb24gYmF6
KCkgewogfQogdmFyIHJlc3VsdCA9IGJheigpOwogaWYgKHJlc3VsdCAhPSAyKQotICAgIHRocm93
ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3Vs
dDogIiArIHJlc3VsdCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257913</attachid>
            <date>2015-07-31 00:41:58 -0700</date>
            <delta_ts>2015-07-31 12:16:59 -0700</delta_ts>
            <desc>almost ready</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>319015</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5MiBA
QAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5n
ZSwgaWYgeW91IHdhbnRlZCB0byBlZmZpY2llbnRseSB2YWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVj
dCBoYXMgKG9yIGRvZXNuJ3QgaGF2ZSkgYQorICAgICAgICBwcm9wZXJ0eSwgeW91J2QgY2hlY2sg
dGhhdCB0aGUgb2JqZWN0IHN0aWxsIGhhcyB0aGUgc3RydWN0dXJlIHRoYXQgeW91IGZpcnN0IHNh
dyB0aGUgb2JqZWN0IGhhdmUuIFdlCisgICAgICAgIG9wdGltaXplZCB0aGlzIGEgYml0IHdpdGgg
dHJhbnNpdGlvbiB3YXRjaHBvaW50cyBvbiB0aGUgc3RydWN0dXJlLCB3aGljaCBzb21ldGltZXMg
YWxsb3dlZCB1cyB0bworICAgICAgICBlbGlkZSB0aGUgc3RydWN0dXJlIGNoZWNrLgorCisgICAg
ICAgIEJ1dCB0aGlzIGFwcHJvYWNoIGZhaWxzIHdoZW4gdGhhdCBvYmplY3QgZnJlcXVlbnRseSBo
YXMgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXQuIFRoaXMgd291bGQKKyAgICAgICAgY2hhbmdl
IHRoZSBzdHJ1Y3R1cmUgYW5kIGZpcmUgdGhlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCwgc28gdGhl
IGNvZGUgd2UgZW1pdHRlZCB3b3VsZCBiZSBpbnZhbGlkIGFuZAorICAgICAgICB3ZSdkIGhhdmUg
dG8gcmVjb21waWxlIGVpdGhlciB0aGUgSUMgb3IgYW4gZW50aXJlIGNvZGUgYmxvY2suCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBjb25jZXB0OiBhbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uLiBUaGlzIHZhbHVlIGRlc2NyaWJlcyBzb21lCisgICAgICAgIGNvbmRp
dGlvbiBpbnZvbHZpbmcgYSBwcm9wZXJ0eSBvbiBzb21lIG9iamVjdC4gVGhlcmUgYXJlIGZvdXIg
a2luZHM6IHByZXNlbmNlLCBhYnNlbmNlLAorICAgICAgICBhYnNlbmNlLW9mLXNldHRlciwgYW5k
IGVxdWl2YWxlbmNlLiBGb3IgZXhhbXBsZSwgYSBwcmVzZW5jZSBjb25kaXRpb24gc2F5cyB0aGF0
IHdlIGV4cGVjdCB0aGF0IHRoZQorICAgICAgICBvYmplY3QgaGFzIHNvbWUgcHJvcGVydHkgYXQg
c29tZSBvZmZzZXQgd2l0aCBzb21lIGF0dHJpYnV0ZXMuIFRoaXMgYWxsb3dzIHVzIHRvIGltcGxl
bWVudCBhIG5ldyBraW5kCisgICAgICAgIG9mIHdhdGNocG9pbnQsIHdoaWNoIGtub3dzIGFib3V0
IHRoZSBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHRoYXQgaXQncyBiZWluZyB1c2VkIHRvIGVu
Zm9yY2UuIElmCisgICAgICAgIHRoZSB3YXRjaHBvaW50IGZpcmVzIGJlY2F1c2Ugb2YgYSBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbiwgdGhlIHdhdGNocG9pbnQgbWF5IHNpbXBseSByZWluc3RhbGwgaXRz
ZWxmCisgICAgICAgIG9uIHRoZSBuZXcgc3RydWN0dXJlLgorCisgICAgICAgIE9iamVjdCBwcm9w
ZXJ0eSBjb25kaXRpb25zIGFyZSB1c2VkIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgUHV0QnlJ
ZCB0cmFuc2l0aW9ucywgR2V0QnlJZCBtaXNzZXMsCisgICAgICAgIGFuZCBwcm90b3R5cGUgYWNj
ZXNzZXMuIFRoZXkgYXJlIGFsc28gdXNlZCBmb3IgYW55IERGRyBhY2Nlc3NlcyB0byBvYmplY3Qg
Y29uc3RhbnRzLCBpbmNsdWRpbmcKKyAgICAgICAgZ2xvYmFsIHByb3BlcnR5IGFjY2Vzc2VzLgor
CisgICAgICAgIE1vc3RseSBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gZ2xvYmFsIHByb3BlcnR5
IGFjY2VzcywgdGhpcyBpcyBhIDklIHNwZWVkLXVwIG9uIEtyYWtlbi4gSXQncworICAgICAgICBu
ZXV0cmFsIG9uIG1vc3Qgb3RoZXIgdGhpbmdzLiBJdCdzIGEgNjh4IHNwZWVkLXVwIG9uIGEgbWlj
cm9iZW5jaG1hcmsgdGhhdCBpbGx1c3RyYXRlcyB0aGUgcHJvdG90eXBlCisgICAgICAgIGNoYWlu
IHNpdHVhdGlvbi4gSXQncyBhbHNvIGEgc21hbGwgc3BlZWQtdXAgb24gZ2V0dGVyLXJpY2hhcmRz
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpDb21wbGV4R2V0
U3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6dGFrZXNTbG93UGF0aCk6
CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmtpbmQpOgorICAgICAgICAoSlNDOjpD
b21wbGV4R2V0U3RhdHVzOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVz
Ojpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjphdHRyaWJ1
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6c3BlY2lmaWNW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmNoYWluKTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmg6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0
QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6fkdldEJ5SWRWYXJp
YW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6Okdl
dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRW
YXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpvcGVyYXRvciEpOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6c3RydWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFZhcmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJp
YW50OjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0
dXMpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24pOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmll
cik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0
ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VX
aXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpl
cXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpvcGVy
YXRvciEpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b2JqZWN0KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmNvbmRpdGlvbik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpraW5kKToKKyAgICAgICAgKEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnVpZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246
Omhhc0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNQ
cm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc1JlcXVpcmVk
VmFsdWUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cmVxdWlyZWRW
YWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNDb21wYXRpYmxlV2l0
aCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVp
cmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3QpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yQ29uZGl0aW9uS2luZCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNX
aXRoS2luZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNP
bmVTbG90QmFzZUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjptZXJnZWRXaXRoKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFyZVN0aWxsTGl2ZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXApOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCk6CisgICAgICAgIChKU0M6OmdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSk6CisgICAgICAg
ICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaDogQWRkZWQuCisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmlzVmFsaWQpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aXNFbXB0eSk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpiZWdpbik6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjplbmQpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6cmVsZWFzZVJhd1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OkRhdGE6OkRhdGEpOgorICAgICAgICAq
IGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6
fkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsp
OgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDoKKyAgICAgICAg
KEpTQzo6R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5
SWRBY2Nlc3M6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmNvbmRp
dGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnN0dWJSb3V0aW5lKToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjpjaGFpbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vz
czo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6
dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OlB1dEJ5SWRBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFj
Y2Vzczo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6bmV3U3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpjaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OmNo
YWluQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250
ZXh0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXApOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNXYXRjaGFibGVXaGVuVmFsaWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OlByb3BlcnR5Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2UpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246OmFic2VuY2UpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2UpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmtpbmQpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6dWlkKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246Omhhc09mZnNldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0
aW9uOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzQXR0cmli
dXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjphdHRyaWJ1dGVzKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246Omhhc1Byb3RvdHlwZSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6aGFzUmVxdWlyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjpyZXF1aXJlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246
Omhhc2gpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc0NvbXBhdGlibGVXaXRoKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp3
YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b25IYXNoOjplcXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0pOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpzZXR0ZXIpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bWFr
ZXNDYWxscyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25X
aXRoUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJp
YW50OjpraW5kKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlND
OjpQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvZmZz
ZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0dXMpOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6On5TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludDo6cHVzaCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJl
bmNlQW5kQWRkV2F0Y2hwb2ludCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KToKKyAgICAgICAgKEpT
Qzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpjb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OnN0dWJJbmZvKToKKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjpkZXJlZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpzZXRTZWVuKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omlu
c3RhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludDo6ZmlyZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6UHJvcGVydHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Ojpr
ZXkpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQ
cm9wZXJ0eVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgICogZGZnL0RG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omlu
c3RhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6
ZmlyZUludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludDo6a2V5KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hl
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2hlY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9tb3RlVG9Db25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBsYW5Mb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6ZW1pdENoZWNrcyk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyk6Cisg
ICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
Ojpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFz
ZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6YWRkQmFzZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6YWRkQ2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZl
clZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJl
ZFZhbHVlQWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRj
aHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVk
V2F0Y2hwb2ludHM6OmFkZExhemlseSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNo
cG9pbnRzOjpjb25zaWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRz
OjpyZWFsbHlBZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJl
U3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpkdW1w
SW5Db250ZXh0KToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6U2V0UG9pbnRlckFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U2V0UG9pbnRlckFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U2V0UG9pbnRlckFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkluZmVycmVkVmFsdWVBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAo
SlNDOjpERkc6OkluZmVycmVkVmFsdWVBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFs
aWRhdGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRh
cHRvcjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQp
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hl
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6ZHVtcElu
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNo
ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjphZGQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KToK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKToKKyAg
ICAgICAgKiBkZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmg6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6d2F0Y2hDb25kaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1Nh
ZmVUb0xvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aWRlbnRpZmllcnMpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjp3YXRjaHBvaW50cyk6CisgICAgICAgICogZGZnL0RGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRo
b2Q6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9k
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcElu
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAp
OgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRN
ZXRob2Q6OkdldEJ5T2Zmc2V0TWV0aG9kKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNl
dE1ldGhvZDo6Y29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9k
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Q
cm90b3R5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvcGVyYXRv
ciEpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpraW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6cHJvdG90eXBlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpN
dWx0aUdldEJ5T2Zmc2V0Q2FzZTo6TXVsdGlHZXRCeU9mZnNldENhc2UpOgorICAgICAgICAoSlND
OjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok11
bHRpR2V0QnlPZmZzZXRDYXNlOjptZXRob2QpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZl
VG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4p
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KToKKyAgICAgICAgKEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6CisgICAgICAg
IChKU0M6OmNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKToKKyAgICAgICAgKEpTQzo6cmVw
bGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlkU3R1Yik6CisgICAgICAg
IChKU0M6OmFjdGlvbkZvckNlbGwpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0
KToKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6ZW1p
dFB1dFRyYW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAg
ICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0
Y2hJbik6CisgICAgICAgIChKU0M6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aXNQcm90b3R5
cGVDaGFpbk5vcm1hbGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1nZXQtYnkt
b2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hl
Y2stbmV3LmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vz
cy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qczogQWRkZWQuCisK
IDIwMTUtMDctMzAgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CiAK
ICAgICAgICAgQWRkIHRoZSAid2FzbSIgZGlyZWN0b3J5IHRvIHRoZSBBZGRpdGlvbmFsIEluY2x1
ZGUgRGlyZWN0b3JpZXMgZm9yIGpzYy5leGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTAgKzk3LDEzIEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcAogICAgIGJ5dGVjb2Rl
L0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAogICAgIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCiAgICAgYnl0
ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
CiAgICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKICAgICBieXRlY29kZS9Q
cmVjaXNlSnVtcFRhcmdldHMuY3BwCisgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3Bw
CiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAKICAgICBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcApAQCAtMTI4LDYgKzEz
MSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBkZmcvREZHQWJzdHJhY3RI
ZWFwLmNwcAogICAgIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAorICAgIGRmZy9ERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCisgICAgZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKICAgICBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAogICAgIGRmZy9ERkdB
cml0aE1vZGUuY3BwCkBAIC0xOTYsNiArMjAxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2Rl
LmNwcAogICAgIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAorICAgIGRmZy9ERkdNdWx0
aUdldEJ5T2Zmc2V0RGF0YS5jcHAKICAgICBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmNwcAogICAg
IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAgZGZnL0RGR05vZGUuY3BwCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIx
Mi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWls
ZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KICAg
ICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdTdWZmaXh8V2luMzIiPgpAQCAt
MzM3LDEwICszMzcsMTMgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEp1
bXBUYWJsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wY29k
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFZhcmlhbnQuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUmVkdWNlV2hpdGVzcGFjZS5jcHAiIC8+CkBA
IC0zNjUsNiArMzY4LDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERl
YnVnZ2VyU2NvcGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fi
c3RyYWN0SGVhcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJz
dHJhY3RWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50
c1V0aWxpdGllcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJp
dGhNb2RlLmNwcCIgLz4KQEAgLTQzMyw2ICs0MzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05haXZlRG9taW5hdG9ycy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmF0dXJhbExvb3BzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlLmNwcCIgLz4KQEAgLTEwMDksMTEgKzEwMTUs
MTQgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFs
dWVQcm9maWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMTElu
dENhbGxMaW5rSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGNvZGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wZXJhbmRzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRh
cmdldHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5
Q29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkU3RhdHVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkVmFyaWFudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0
S2luZC5oIiAvPgpAQCAtMTA0OSw2ICsxMDU4LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHQWRqYWNlbmN5TGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0FsbG9jYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FuYWx5
c2lzLmgiIC8+CkBAIC0xMTQxLDYgKzExNTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdNaW5pZmllZE5vZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOYWl2ZURvbWluYXRvcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdOb2RlLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsOCBA
QAogCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNFMDRDMTYxNjRBMUIw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1RjE0QjdBNzNFMDA1
REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1Bh
dGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYxNzI1RkYxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzI1RkUxQjQ4NzE5QTAw
QUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICovOyB9OworCQkwRjE4RDNDRjFCNTVBNkUw
MDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NEMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE4RDNDRTFC
NTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxOTBDQUMxODlE
ODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUExODlEODJGNjAwMEFFNUYw
IC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovOyB9OwogCQkwRjE5MENBRDE4OUQ4MkY2
MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUIxODlEODJGNjAwMEFFNUYwIC8qIFBy
b2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjFERDg0QTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxREQ4NDkx
OEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjkzLDggKzI5NSw2IEBACiAJCTBGM0IzQTJDMTU0
NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlk
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYzQjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1
NiAvKiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzRDBCQkMxOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8q
IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovOyB9OwotCQkwRjNEMEJCRDE5NEE0MTQzMDBG
QzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi87IH07
CiAJCTBGM0UwMUFCMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNFMDFBOTE5RDM1
M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAv
KiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01ODgsNiArNTg4
LDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2
RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAv
KiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJ
CTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAv
KiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFBRjAwQzgwRTFFIC8qIERGR0Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLzsgfTsK
KwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNF
NDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNTFCNjE4
QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwICovOyB9OworCQkw
RkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA2MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDBEMUI2MThCNjYw
MEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVy
dHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBFMUUgLyogUHJv
cGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgxQUQy
MTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERG
R0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFMjExNDE3MkNF
MzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5Miw2ICs3MDAsOCBAQAogCQkwRkYwRjE5RTE2Qjcy
QTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5NkIgLyogREZHRWRnZS5jcHAg
Ki87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCAqLzsg
fTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIy
MTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGMkNENUIxQjYxQTRGODAw
NDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBE
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5
NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MkYx
NThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4RUJENTgwMDRDQjlGRiAvKiBV
RGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxl
ci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2Rl
LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjcz
NDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovOyB9OwpAQCAtMTQxMSw4ICsx
NDIxLDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3MTFC
OThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1h
cERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMxOEM1NTNGRTAwRjEwNjI2IC8q
IFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8qIFNwaWxsUmVnaXN0ZXJzTW9k
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE3
ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1M0Y3MTc5NzI2
MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKLQkJQTc4ODUz
RkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1M0Y4MTc5NzI2MjkwMDE0
NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVy
LmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFs
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4
QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovOyB9OwogCQlB
NzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZFMTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg3OSw2ICsxODg3LDggQEAKIAkJMEYx
M0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyog
REZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZEdyYXBoLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8q
IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBwYXRo
ID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FB
MTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBw
YXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRp
c29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVySmV0
dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8q
IEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA2NCw4ICsyMDc0LDYgQEAKIAkJ
MEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
M0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJp
bmcuY3BwOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51
bWJlcmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVQb3N0TnVt
YmVyaW5nLmg7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVy
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzcwLDYgKzIzNzgsMTQgQEAKIAkJMEZEMkM5
MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBk
ZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIx
NDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDAwMUI2MThBQUYw
MEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNF
NDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQz
RTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFF
IC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1MyAvKiBERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rv
bWluYXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb21pbmF0b3JzLmg7IHBh
dGggPSBkZmcvREZHRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjQ2OSw2ICsyNDg1LDggQEAKIAkJMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
T1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0RjcxQUMzNUI0NDAw
RTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0
YWJsZUFsbG9jYXRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4
ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwOyBwYXRoID0gZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRp
R2V0QnlPZmZzZXREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmg7IHBhdGggPSBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZG
IC8qIERpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNh
c3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRp
c2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVRGlz
ODZEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzM0MTU4RUJEOTQwMDRD
QjlGRiAvKiB1ZGlzODZfZGVjb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9
IHVkaXM4Nl9kZWNvZGUuYzsgcGF0aCA9IGRpc2Fzc2VtYmxlci91ZGlzODYvdWRpczg2X2RlY29k
ZS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzIxMyw4ICszMjMxLDYgQEAKIAkJ
QTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODUwN0Q1
MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4ODUzRjcx
Nzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwOyBw
YXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3OEE5NzZEMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmFpbGVkRmluYWxpemVyLmg7IHBh
dGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3OEE5NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmluYWxpemVyLmNwcDsgcGF0aCA9IGRm
Zy9ERkdGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU1MSw4
ICs0NTY3LDYgQEAKIAkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5Lmgg
Ki8sCiAJCQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywKIAkJ
CQlBN0E4QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICovLAotCQkJCUE3ODg1
M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLywKLQkJ
CQlBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICov
LAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAq
LywKIAkJCQlCQzExNjY3QTBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oICov
LAogCQkJCUExQjlFMjMzMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3IuY3BwICovLApA
QCAtNDk1NSw2ICs0OTY5LDEwIEBACiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAw
Q0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYw
MDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAw
QzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAg
Ki8sCisJCQkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovLAorCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NF
MUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywK
IAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAog
CQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlB
NzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywKQEAgLTUxMTQsNiAr
NTEzMiw4IEBACiAJCQkJMEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9k
ZS5oICovLAogCQkJCTBGOEYxNDMxMUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlLmNwcCAqLywKIAkJCQkwRjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGlu
dFJlbW92YWxQaGFzZS5oICovLAorCQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdN
dWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8sCisJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4
IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAw
NkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQx
MDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVB
MkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLApAQCAtNTM4NSw4ICs1NDA1LDYg
QEAKIAkJCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkw
RjZGQzc0RTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJ
MEY2RkM3NEYxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkw
RjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8s
Ci0JCQkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2su
aCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAog
CQkJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwICovLAogCQkJCTBGQzcxMkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suaCAqLywKQEAgLTU0MTksNiArNTQzNywxMCBAQAogCQkJCTBGQjU0NjdD
MTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywK
IAkJCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZS5oICovLAogCQkJCTE0Q0E5NThDMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5oICovLAorCQkJCTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgw
RTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFC
NjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5
NjlBMDc5NDBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBF
RDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4
OTEwIC8qIE9wZXJhbmRzLmggKi8sCkBAIC01NDMwLDYgKzU0NTIsOCBAQAogCQkJCTBGOUZDOEMw
MTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5
ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJ
MEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJ
CTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJ
CQkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJ
CQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJ
CTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5
M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKQEAgLTU5NDUs
NiArNTk2OSw3IEBACiAJCQkJQzI5ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENC
OUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNF
NDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRn
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjAwLDYgKzYyMjUsNyBAQAogCQkJCUE1MzI0Mzk4MTg1
NkE0ODkwMDJFRDY5MiAvKiBDb21iaW5lZERvbWFpbnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0Mzg4MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0
b3JGcm9udGVuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFB
NEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTUzMjQzOEMxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3Rv
Y29sT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZE
IC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjA5LDcgKzYy
MzUsNiBAQAogCQkJCUE3QThBRjNCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUw
MDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3
QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAt
NjIyMiw2ICs2MjQ3LDcgQEAKIAkJCQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNj
cmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4
OTYxOSAvKiBKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVF
QyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYx
OEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21w
aWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDM4LDcgKzY0NjQs
NiBAQAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGlj
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0
QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QzAwOENFNzE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjUyMiw5ICs2NTQ3LDExIEBACiAJCQkJMkFB
RDk2NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExK
U0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVD
MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFD
N0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0
MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8q
IE1hdGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4
MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3
MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NjAyLDYgKzY2MjksNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1
Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMw
NjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZC
QjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYz
QzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFG
MDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03Mzk3LDYgKzc0MjUsNyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAv
KiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVy
dHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFD
NzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4
QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc0MDcsNiArNzQzNiw3IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8q
IEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJC
NzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMx
QjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExP
U1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAw
QkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0NTgsNiArNzQ4OCw3
IEBACiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JB
Z2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0
MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzQ2OSw3ICs3NTAwLDYgQEAK
IAkJCQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3Rz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3
MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4
NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50
ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0
IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0ODYsNiArNzUx
Niw3IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMz
Ml82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMTU4N0Q2RDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVy
YXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAv
KiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1NDEsNyArNzU3Miw2
IEBACiAJCQkJQTUwM0ZBMUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkExRDE4OEUwRkIwMDAxMTBGMTQgLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Mjgw
ODc1MTA3RUMxM0UwMDEzRTdCMiAvKiBKU0xvY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYz
RDBCQkMxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQzI1RDcwOUIxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3NDExN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFw
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjk1MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01h
cEl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzczNyw2ICs3NzY3LDcgQEAKIAkJCQlC
Q0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwMTNDQThC
MUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQz
ODE1QUU0QTFDMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0NGMEQwQzBFRjBCOEE1MDA0MTNDOEYgLyogU3RydWN0dXJl
U3R1YkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzQ2LDYgKzc3NzcsNyBAQAogCQkJCTcw
NUI0MUIxMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8qIERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkEy
QzE3QjE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDAsNyArMzQwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSAwOwog
ICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gMDsKICAgICAgICAgICAgIFBvbHltb3JwaGljR2V0
QnlJZExpc3QqIGxpc3QgPSAwOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHN0
dWJJbmZvLmFjY2Vzc1R5cGUpIHsKQEAgLTM3MCwxMSArMzY5LDYgQEAgdm9pZCBDb2RlQmxvY2s6
OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAicHJvdG90eXBlU3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNo
YWluLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChsaXN0KSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsiLCBs
aXN0KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIHsKQEAgLTM4Miw5ICszNzYsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRC
eUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIp
OwogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7CiAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGxpc3QtPmF0KGkpLnN0cnVjdHVyZSgpLCBp
ZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5jaGFpbigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghbGlzdC0+YXQoaSkuY29uZGl0aW9uU2V0KCkuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgbGlzdC0+YXQoaSkuY2hhaW4oKSwgaWRl
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KGxpc3QtPmF0KGkpLmNvbmRp
dGlvblNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnRmKCIpIik7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDU2LDEwICs0NTAsOCBAQCB2
b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAg
ZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5w
cmV2aW91c1N0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwogICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCAiKTsKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBzdHVi
SW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAg
ICAgICAgICAgIGlmIChTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgi
LCAiKTsKLSAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnUucHV0QnlJ
ZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KQorICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgIiwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewogICAg
ICAgICAgICAgICAgIG91dC5wcmludGYoImxpc3QgPSBbIik7CkBAIC00ODMsMTAgKzQ3NSw4IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgICAg
ICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJldiIsIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUo
KSwgaWRlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0IiwgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXNz
LmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgYWNjZXNzLmNoYWlu
KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYWNjZXNzLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgYWNjZXNzLmNvbmRpdGlvblNldCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoInVua25vd24iKTsKICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ6OmZpcgogICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAKICAgICBtX2NvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgcmVtb3ZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBs
ZXhHZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUg
YSBzdHJ1Y3R1cmUgdGhhdAogICAgIC8vIGhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpIGJ1
dCBmb3Igd2hpY2ggd2UgZG9uJ3QKQEAgLTQwLDMyICszOSwzNCBAQCBDb21wbGV4R2V0U3RhdHVz
IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgLy8gdGhhdCwgeWV0LgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAKKyAgICBBU1NF
UlQoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSk7CisgICAgCiAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUt
PnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB0
YWtlc1Nsb3dQYXRoKCk7CiAgICAgCiAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CiAgICAg
cmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAgCi0gICAgaWYgKGNoYWluICYmIGNoYWlu
Q291bnQpIHsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGhlYWRTdHJ1Y3R1cmUs
IGNoYWluLCBjaGFpbkNvdW50KSk7CisgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAg
Ci0gICAgICAgIGlmICghcmVzdWx0Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICBp
ZiAoIXJlc3VsdC5tX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAg
ICAgICAgICAgIHJldHVybiBza2lwKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGVhZFN0cnVj
dHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotICAgICAgICAgICAg
fHwgcmVzdWx0Lm1fY2hhaW4tPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTbG90QmFzZXMgPQorICAgICAgICAgICAgcmVz
dWx0Lm1fY29uZGl0aW9uU2V0Lm51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29u
ZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mU2xvdEJh
c2VzIDw9IDEpOworICAgICAgICBpZiAoIW51bWJlck9mU2xvdEJhc2VzKSB7CisgICAgICAgICAg
ICAvLyBDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBtaXNzZXMuIFRoYXQncyBhIGJ1bW1lci4K
KyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMDUyCiAgICAgICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOworICAgICAg
ICB9CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2UgPSByZXN1bHQubV9jb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKTsKKyAgICAgICAgQVNTRVJUKGJhc2Uua2luZCgp
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CiAgICAgICAgIAotICAgICAgICBKU09i
amVjdCogY3VycmVudE9iamVjdCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgp
OwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSByZXN1bHQubV9jaGFpbi0+
bGFzdCgpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBj
dXJyZW50T2JqZWN0KTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJl
bnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwotICAgIH0KKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gYmFzZS5vZmZzZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAg
CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNldCkpCiAgICAgICAgIHJldHVy
biB0YWtlc1Nsb3dQYXRoKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29tcGxleEdldFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDggKzI2LDggQEAKICNpZm5kZWYgQ29tcGxleEdldFN0YXR1c19oCiAjZGVmaW5lIENvbXBs
ZXhHZXRTdGF0dXNfaAogCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
ODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgQ29tcGxleEdldFN0YXR1cygpCiAgICAgICAgIDog
bV9raW5kKFNob3VsZFNraXApCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKLSAg
ICAgICAgLCBtX2F0dHJpYnV0ZXMoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTk3
LDIxICs5NiwxNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBDb21wbGV4R2V0
U3RhdHVzIGNvbXB1dGVGb3IoCi0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlKiBoZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVu
c2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgICAgICBTdHJ1
Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlczsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4o
KSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9u
U2V0OyB9CiAgICAgCiBwcml2YXRlOgogICAgIEtpbmQgbV9raW5kOwogICAgIFByb3BlcnR5T2Zm
c2V0IG1fb2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKLSAgICBKU1ZhbHVlIG1f
c3BlY2lmaWNWYWx1ZTsKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFp
bjsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJl
Q2hlY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
LXsKLSAgICBvdXQucHJpbnQoCi0gICAgICAgICIoQ2hlY2sgaWYgIiwgaW5Db250ZXh0KEpTVmFs
dWUobV9jb25zdGFudCksIGNvbnRleHQpLCAiIGhhcyBzdHJ1Y3R1cmUgIiwKLSAgICAgICAgcG9p
bnRlckR1bXBJbkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKSIpOwotfQotCi12b2lk
IENvbnN0YW50U3RydWN0dXJlQ2hlY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsK
LSAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Ci19Ci0KLVN0cnVjdHVyZSogc3RydWN0
dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvciwgSlNDZWxs
KiBjb25zdGFudCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgIGlmICh2ZWN0b3JbaV0uY29uc3RhbnQoKSA9PSBjb25zdGFudCkKLSAgICAg
ICAgICAgIHJldHVybiB2ZWN0b3JbaV0uc3RydWN0dXJlKCk7Ci0gICAgfQotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYgYSwgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgYikKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBhLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1
cmUqIG90aGVyU3RydWN0dXJlID0gc3RydWN0dXJlRm9yKGIsIGFbaV0uY29uc3RhbnQoKSk7Ci0g
ICAgICAgIGlmICghb3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGFbaV0uc3RydWN0dXJlKCkgIT0gb3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIG1lcmdlSW50
byhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImIHRhcmdldCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzb3Vy
Y2Uuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmVGb3IodGFyZ2V0LCBzb3Vy
Y2VbaV0uY29uc3RhbnQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFyZ2V0
LmFwcGVuZChzb3VyY2VbaV0pOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50
U3RydWN0dXJlQ2hlY2suaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0jZGVmaW5lIENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tfaAotCi0jaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKLSNpbmNsdWRlICJKU0Nl
bGwuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBD
b25zdGFudFN0cnVjdHVyZUNoZWNrIHsKLXB1YmxpYzoKLSAgICBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrKCkKLSAgICAgICAgOiBtX2NvbnN0YW50KG51bGxwdHIpCi0gICAgICAgICwgbV9zdHJ1Y3R1
cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2soSlNDZWxsKiBjb25zdGFudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogbV9j
b25zdGFudChjb25zdGFudCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0gICAg
ewotICAgICAgICBBU1NFUlQoISFtX2NvbnN0YW50ID09ICEhbV9zdHJ1Y3R1cmUpOwotICAgIH0K
LSAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbnN0YW50OyB9
Ci0gICAgCi0gICAgSlNDZWxsKiBjb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnQ7
IH0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJl
OyB9Ci0gICAgCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXBy
aXZhdGU6Ci0gICAgSlNDZWxsKiBtX2NvbnN0YW50OwotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1
cmU7Ci19OwotCi10eXBlZGVmIFZlY3RvcjxDb25zdGFudFN0cnVjdHVyZUNoZWNrLCAyPiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yOwotCi1TdHJ1Y3R1cmUqIHN0cnVjdHVyZUZvcihjb25z
dCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIEpTQ2VsbCogY29uc3RhbnQp
OwotYm9vbCBhcmVDb21wYXRpYmxlKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
LCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7Ci12b2lkIG1lcmdlSW50byhj
b25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIHRhcmdldCk7Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNjksOCArMTY5LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBs
aXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpj
b21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlz
dC0+YXQobGlzdEluZGV4KS5jaGFpbigpLAotICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJ
bmRleCkuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgbGlz
dC0+YXQobGlzdEluZGV4KS5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAg
IGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKQEAgLTIwNiw4ICsyMDUsOCBAQCBH
ZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJp
YW50KAotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxl
eEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAotICAgICAgICAg
ICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCisg
ICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksIFdURjo6
bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMjMgKzM0LDE5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVz
PiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExp
bmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAgLCBtX2Fs
dGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkK
ICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RGOjptb3Zl
KGNhbGxMaW5rU3RhdHVzKSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKICAg
ICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFj
aGFpbik7Ci0gICAgfQotICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAg
ICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3RhbnRDaGVja3MpOworICAgICAgICBBU1NF
UlQoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CiAgICAgfQogfQotCisgICAgICAgICAgICAgICAg
ICAgICAKIEdldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlhbnQoKSB7IH0KIAogR2V0QnlJZFZh
cmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKQEAgLTYy
LDggKzU4LDcgQEAgR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldAogR2V0
QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlh
bnQmIG90aGVyKQogewogICAgIG1fc3RydWN0dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7
Ci0gICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9h
bHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
ICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1
cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKTsKQEAgLTcyLDI4ICs2NywyNCBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6
Om9wZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZh
cmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRlcm5hdGVCYXNl
KQotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNl
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7
Ci19Ci0KIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRW
YXJpYW50JiBvdGhlcikKIHsKLSAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90aGVyLm1fYWx0
ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX29mZnNldCAhPSBv
dGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2NhbGxMaW5r
U3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWFyZUNvbXBhdGlibGUobV9jb25zdGFudENoZWNrcywgb3RoZXIubV9jb25zdGFu
dENoZWNrcykpCisKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1f
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgaWYg
KCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0
ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAg
ICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9u
U2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgIAog
ICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKICAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTExMiwxMCArMTAzLDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
IlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsK
LSAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRl
QmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsK
KyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCkpOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBv
dXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjcsOSArMjcsOCBAQAogI2RlZmluZSBHZXRCeUlkVmFyaWFudF9o
CiAKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0
dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIK
IApAQCAtNDMsNyArNDIsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiBwdWJsaWM6CiAgICAg
R2V0QnlJZFZhcmlhbnQoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
ID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQs
Ci0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwK
KyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQoKSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVz
PiBjYWxsTGlua1N0YXR1cyA9IG51bGxwdHIpOwogICAgIAogICAgIH5HZXRCeUlkVmFyaWFudCgp
OwpAQCAtNTUsOSArNTQsMTAgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudENoZWNrczsgfQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3Qg
eyByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOyB9Ci0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1
cmUoKSBjb25zdDsKKworICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBhIGNvbmRpdGlvbiBzZXQgbWVh
bnMgdGhhdCB0aGlzIGlzIGEgcHJvdG90eXBlIGxvYWQuCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9u
U2V0OyB9CisgICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAgICAgCkBAIC03MCw4ICs3MCw3IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdldEJ5SWRTdGF0dXM7CiAgICAgCiAgICAgU3Ry
dWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0
b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOworICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5
T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9j
YWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2
b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAg
ICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBvdXQucHJpbnQoIjwiLCBpbkNvbnRleHQoSlNWYWx1ZShtX29iamVjdCksIGNvbnRl
eHQpLCAiOiAiLCBpbkNvbnRleHQobV9jb25kaXRpb24sIGNvbnRleHQpLCAiPiIpOworfQorCit2
b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24udmFs
aWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBtX29iamVjdCk7
Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiBpc1N0aWxsVmFsaWQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQo
c3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShtX29i
amVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpp
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9y
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIG1fb2JqZWN0LCBlZmZvcnQpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGUoc3RydWN0dXJlLCBtX29iamVj
dCwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFi
bGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7
CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVy
biBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFIZWFwOjppc01h
cmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4g
bV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2Vk
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0
cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52YWxpZGF0ZVJlZmVyZW5j
ZXModHJhY2tlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9o
CisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRy
YWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJs
aWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6IG1fb2JqZWN0KG51
bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAgICAgIDogbV9vYmplY3Qo
bnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAgICB7CisgICAgfQorICAg
IAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQor
ICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKAor
ICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9i
amVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OnBy
ZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOyAKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0
KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwK
KyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIGlmIChvd25lcikK
KyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJu
IHByZXNlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7
CisgICAgfQorCisgICAgLy8gTk9URTogVGhlIHByb3RvdHlwZSBpcyB0aGUgc3RvcmVkUHJvdG90
eXBlLCBub3QgdGhlIHByb3RvdHlwZUZvckxvb2t1cC4KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2Jq
ZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5
Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVj
dCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJp
ZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwg
dWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJv
cGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90
eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBK
U09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZU9m
U2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRC
YXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
cmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3Vs
dC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJy
aWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxl
bmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisg
ICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJv
cGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0K
KyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0
IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5z
aWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJp
YnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25k
aXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9v
bCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWly
ZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkg
KyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29u
ZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmpl
Y3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAg
CisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRp
Y2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJl
bnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cg
dG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
IGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwg
d2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBj
YXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAg
Ly8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2Vu
Y2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50
aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4K
KyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1
aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9
CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9u
YWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1
Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwg
dGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0
IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9y
IHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9p
ZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0
cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZh
bGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0
LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3Jk
aW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJl
c0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKworICAgIC8v
IENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkgY29uc2VydmF0aXZlbHkg
cmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0cnVjdHVyZSBhbG9uZSBk
b24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiB0
cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJlcyBzb21lIHdhdGNocG9p
bnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhlCisgICAgLy8gc3Ry
dWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9uIGhvbGRzIGJ5IHVz
aW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVjdHVyZUVuc3VyZXNWYWxp
ZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJv
b2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hvcnRoYW5kIGZvciBjb25k
aXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29sIHN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxs
IHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0
aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBp
bXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFBy
b3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6
TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmls
aXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9y
Y2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJl
KiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxl
KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVy
dHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hp
bmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24o
KS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBz
dGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBt
X2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2lu
ZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK3Vuc2lnbmVkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjpudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBr
aW5kKSBjb25zdAoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYg
KGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG51bWJlck9m
Q29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgPT0gMTsKK30K
KworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnNs
b3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBy
ZXN1bHQ7CisgICAgdW5zaWduZWQgbnVtRm91bmQgPSAwOworICAgIGZvciAoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25k
aXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAg
ICAgcmVzdWx0ID0gY29uZGl0aW9uOworICAgICAgICAgICAgbnVtRm91bmQrKzsKKyAgICAgICAg
fQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChudW1Gb3VuZCA9PSAxKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6bWVyZ2VkV2l0aCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKworICAgIFZlY3RvcjxPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbj4gcmVzdWx0OworICAgIAorICAgIGlmICghaXNFbXB0eSgpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kVmVjdG9yKG1fZGF0YS0+dmVjdG9yKTsKKyAgICAKKyAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBuZXdDb25kaXRpb24gOiBvdGhlcikgeworICAg
ICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBleGlzdGluZ0NvbmRpdGlv
biA6ICp0aGlzKSB7CisgICAgICAgICAgICBpZiAobmV3Q29uZGl0aW9uID09IGV4aXN0aW5nQ29u
ZGl0aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFuZXdD
b25kaXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3Q29u
ZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub25FbXB0eShyZXN1bHQp
OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJl
VmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVz
RW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7
CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBm
b3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgewor
ICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAg
aWYgKGNvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExpdmUoKSBjb25zdAor
eworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0
aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAg
ICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgb3V0LnByaW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgb3V0LnByaW50
KGxpc3REdW1wSW5Db250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7CisgICAgb3V0LnBy
aW50KCJdIik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7
Cit9CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNlOworCitPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29u
ZGl0aW9uOjpLaW5kIGNvbmRpdGlvbktpbmQpCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9n
KCJDcmVhdGluZyBjb25kaXRpb24gIiwgY29uZGl0aW9uS2luZCwgIiBmb3IgIiwgcG9pbnRlckR1
bXAoc3RydWN0dXJlKSwgIlxuIik7CisKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgc3dpdGNoIChjb25kaXRpb25LaW5kKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBh
dHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgICAg
ICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgICAgIHJlc3VsdCA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSh2bSwgb3duZXIsIG9iamVjdCwgdWlk
LCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXN1bHQgPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1
aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNl
dHRlcjogeworICAgICAgICByZXN1bHQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5j
ZU9mU2V0dGVyKAorICAgICAgICAgICAgdm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgfQorCisgICAg
aWYgKCFyZXN1bHQuc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIkZhaWxlZCB0byBjcmVhdGUgY29uZGl0aW9uOiAiLCByZXN1bHQsICJcbiIpOworICAgICAg
ICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICB9CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZygiTmV3IGNvbmRpdGlvbjogIiwgcmVzdWx0LCAiXG4iKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitlbnVtIENvbmN1cnJlbmN5IHsKKyAgICBNYWluVGhy
ZWFkLAorICAgIENvbmN1cnJlbnQKK307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zKAorICAgIFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsCisgICAgQ29uY3VycmVuY3kg
Y29uY3VycmVuY3kgPSBNYWluVGhyZWFkKQoreworICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbj4gY29uZGl0aW9uczsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgc3RydWN0dXJlOiAiLCBw
b2ludGVyRHVtcChzdHJ1Y3R1cmUpLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzUHJveHkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSXQncyBhIHByb3h5LCBzbyBpbnZhbGlkLlxuIik7CisgICAgICAgICAg
ICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0cnVjdHVyZS0+cHJvdG90eXBl
Rm9yTG9va3VwKGdsb2JhbE9iamVjdCk7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvdG90eXBlKSB7CisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlYWNoZWQgZW5kIHVw
IHByb3RvdHlwZSBjaGFpbiBhcyBleHBlY3RlZCwgZG9uZS5cbiIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZGx5IHJlYWNoZWQgZW5kIG9mIHByb3RvdHlwZSBj
aGFpbiwgc28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisgICAgICAgIHN0cnVj
dHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNl
IHdlJ3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQg
dGhhdCBpdCBzaG91bGQgbm90IGJlCisgICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5
LgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAg
aWYgKGNvbmN1cnJlbmN5ID09IE1haW5UaHJlYWQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJl
LT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDYW5ub3QgZmxhdHRlbiBkaWN0aW9uYXJ5IHdoZW4gbm90IG9uIG1haW4gdGhyZWFk
LCBzbyBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWZ1bmN0b3IoY29uZGl0aW9ucywgb2JqZWN0KSkgeworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiRnVuY3RvciBmYWlsZWQsIGludmFs
aWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob2JqZWN0ID09IHBy
b3RvdHlwZSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0
YUxvZygiUmVhY2hlZCBkZXNpcmVkIHByb3RvdHlwZSwgZG9uZS5cbiIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZygiUmV0dXJuaW5nIGNvbmRpdGlvbnM6ICIsIGxpc3REdW1wKGNvbmRpdGlvbnMpLCAiXG4i
KTsKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRp
dGlvbnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1
cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0
aW9ucygKKyAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVj
dHVyZSwgbnVsbHB0ciwKKyAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRp
b24+JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsKKyAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgZ2VuZXJh
dGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFi
c2VuY2UpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1
cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0
aW9ucygKKyAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVj
dHVyZSwgbnVsbHB0ciwKKyAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRp
b24+JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsKKyAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgZ2VuZXJh
dGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFi
c2VuY2VPZlNldHRlcik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworfQorCitPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgK
KyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBo
ZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLAorICAg
ICAgICBbJl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlvbnMsIEpT
T2JqZWN0KiBvYmplY3QpIC0+IGJvb2wgeworICAgICAgICAgICAgUHJvcGVydHlDb25kaXRpb246
OktpbmQga2luZCA9CisgICAgICAgICAgICAgICAgb2JqZWN0ID09IHByb3RvdHlwZSA/IFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZSA6IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOworICAg
ICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0KKyAgICAgICAgICAgICAg
ICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBraW5kKTsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpT
T2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBy
ZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBwcm90b3R5cGUsCisgICAgICAgIFsmXSAoVmVjdG9y
PE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVjdCkg
LT4gYm9vbCB7CisgICAgICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IHJlc3VsdCA9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBv
YmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworICAgICAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29u
ZGl0aW9ucy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9KTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAg
IHZtLCBnbG9iYWxPYmplY3QsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsCisgICAgICAgIFsmXSAo
VmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9i
amVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBudWxscHRyLCBvYmpl
Y3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcik7CisgICAgICAgICAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0sIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKyNkZWZpbmUgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gQW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0byByZXByZXNlbnQg
dGhlIHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVlZCB0byBiZSBtZXQg
Zm9yIHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2FuIGhhdmUgdGhlIGZv
bGxvd2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5OiBUaGVyZSBhcmUg
bm8gc3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisvLyBJbnZhbGlkOiBU
aGUgaGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6IFRoZXJlIGFyZSBz
b21lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdmFsaWQuCisKK2Ns
YXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRh
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9yPE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAg
ICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICByZXN1bHQu
bV9kYXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1f
ZGF0YSB8fCAhbV9kYXRhLT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0KKyAgICAKKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2RhdGE7CisgICAgfQor
ICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24qIGl0ZXJhdG9y
OworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
bV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX2Rh
dGEtPnZlY3Rvci5iZWdpbigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0KKyAgICAKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3Q7Cisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQcm9wZXJ0eUNvbmRp
dGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNvbmRpdGlvbnNXaXRo
S2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICBib29sIGhhc09uZVNs
b3RCYXNlQ29uZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIGNvbmRp
dGlvbiBzZXQgZm9yIGEgcHJvdG90eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8g
cmV0dXJuIHRoZQorICAgIC8vIGNvbmRpdGlvbiBvbiB0aGUgcHJvdG90eXBlIGl0c2VsZi4gVGhp
cyBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAorICAgIC8vIGF0dHJp
YnV0ZXMgZm9yIHRoZSBwcm90b3R5cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRo
ZXJlIGlzIGV4YWN0bHkgb25lIFByZXNlbmNlCisgICAgLy8gaW4gdGhlIHNldCwgYW5kIGl0IHdp
bGwgcmV0dXJuIHRoYXQgcHJlc2VuY2UuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gc2xv
dEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBh
IG5ldyBjb25kaXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0aGUgb3RoZXIgb25l
LiBUaGlzIHdpbGwKKyAgICAvLyBmYWlsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyBhcmUgaW5j
b21wYXRpYmxlIHdpdGggZWFjaCBvdGhlci4gV2hlbiBpZiBmYWlscywgaXQgcmV0dXJucworICAg
IC8vIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRXaXRo
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29uc3Q7CisgICAgCisg
ICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdDsKKyAgICBib29sIHN0cnVj
dHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29u
c3Q7CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7
CisgICAgYm9vbCBhcmVTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIEhlbHBlcnMgZm9yIHVzaW5nIHRoaXMg
aW4gYSB1bmlvbi4KKyAgICB2b2lkKiByZWxlYXNlUmF3UG9pbnRlcigpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkpOworICAgIH0KKyAg
ICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgYWRvcHRSYXdQb2ludGVyKHZvaWQq
IHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxEYXRh
Kj4ocmF3UG9pbnRlcikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzdGF0
aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZnJvbVJhd1BvaW50ZXIodm9pZCogcmF3UG9p
bnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIElu
dGVybmFsbHksIHRoaXMgcmVwcmVzZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9pbnRlciB0byBhIERh
dGEgdGhhdCBoYXMgYW4gZW1wdHkgdmVjdG9yLgorICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIGNv
dWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IGhhdmluZyBpdCBpbnRlcm5hbGx5IHVzZSBhIHZl
Y3RvciB0aGF0IGp1c3QgaGFzCisgICAgLy8gdGhlIG5vbi11aWQgcG9ydGlvbiBvZiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiwgYW5kIHRoZW4gcmVxdWlyaW5nIHRoYXQgdGhlIGNhbGxlcnMgb2Yg
YWxsCisgICAgLy8gb2YgdGhlIEFQSXMgc3VwcGx5IHRoZSB1aWQuCisgICAgCisgICAgY2xhc3Mg
RGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7CisgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
KyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9CisgICAgICAgIAorICAg
ICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsKKyAgICB9OworICAg
IAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
c0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM3LDE0ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZEFjY2Vz
czo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUg
dHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY2hhaW5Db3Vu
dCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCkKICAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9jaGFpbkNv
dW50KGNoYWluQ291bnQpCiAgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkK
KyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKICAgICAsIG1fc3R1YlJvdXRpbmUo
c3R1YlJvdXRpbmUpCiB7Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBtX2NoYWluLnNldCh2bSwg
b3duZXIsIGNoYWluKTsKIH0KIAogR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQpAQCAt
NzEsNyArNjksNyBAQCBib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiB7
CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNN
YXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExp
dmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlz
aXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5
SWRMaXN0LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5o
IgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bj
b2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtNTMsMTMgKzU0LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICBHZXRCeUlkQWNjZXNzKCkKICAg
ICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoMCkKICAgICB7
CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgIFZNJiwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSos
Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9IDAsIHVuc2lnbmVkIGNoYWluQ291bnQgPSAwKTsK
KyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgfkdldEJ5SWRBY2Nlc3MoKTsKICAgICAKQEAg
LTcyLDggKzcyLDcgQEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9Ci0gICAgdW5zaWdu
ZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW5Db3VudDsgfQorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVy
biBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGlu
ZSgpIGNvbnN0CiAgICAgewpAQCAtOTEsOSArOTAsOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAgdW5zaWdu
ZWQgbV9jaGFpbkNvdW50OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJl
OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsgLy8gRklYTUUgd2hhdCBhYm91dCBi
YXJyaWVycz8KICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNj
ZXNzOjpmcm9tU3RydWN0dQogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKICAg
ICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1
cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAg
ICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LmNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigKKyAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0
QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJv
dXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApA
QCAtNjQsNiArNjUsOSBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1
CiAKIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBSZXBsYWNlOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJl
LmdldCgpKSkKQEAgLTc0LDE1ICs3OCwxMSBAQCBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2Vh
ayhSZXBhdGNoQnVmCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghSGVh
cDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldHRlcjoKICAg
ICBjYXNlIEN1c3RvbVNldHRlcjoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0
cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICht
X2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVk
ZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNp
bmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCkBAIC01Myw3
ICs1NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBt
X3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAgICAgewog
ICAgIH0KICAgICAKQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCog
b3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAg
ICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAg
IFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlv
bjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0cnVj
dHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdT
dHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAg
cmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUg
PSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1LDggKzk1LDcgQEAg
cHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAgIFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFzc1JlZlB0
cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0LDEwICsxMDMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewotICAgICAgICAgICAg
cmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAgICAgICAgcmVzdWx0
Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmVzdWx0Lm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0
ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJv
dXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
VHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVy
biBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwot
ICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRp
b25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAog
ICAgIHsKQEAgLTE3OCw4ICsxNjQsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5cGUgbV90eXBl
OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5
Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tl
ZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgb3V0LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBh
dCAiLCBvZmZzZXQoKSwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgYXR0cmlidXRlcygpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTVmFsdWUo
cHJvdG90eXBlKCkpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWl2
YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRoICIsIGluQ29udGV4dChyZXF1aXJlZFZh
bHVlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIp
OworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3Qq
IGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICJEZXRlcm1pbmluZyB2YWxpZGl0eSBvZiAiLCAqdGhpcywgIiB3aXRoIHN0cnVj
dHVyZSAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUpLCAiIGFuZCBiYXNlICIsCisgICAgICAgICAg
ICBKU1ZhbHVlKGJhc2UpLCAiIGFzc3VtaW5nIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50cyBh
cmUgc2V0LlxuIik7CisgICAgfQorICAgIAorICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgdW5zZXQuXG4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIXN0cnVjdHVy
ZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7CisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgZGF0YUxvZygiSW52YWxpZCBiZWNhdXNlIGFjY2Vzc2VzIGFyZSBub3Qg
Y2FjaGVhYmxlLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVk
IGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0dHJpYnV0
ZXMgIT0gYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2Ug
d2UgbmVlZCBvZmZzZXQsIGF0dHJpYnV0ZXMgdG8gYmUgIiwgb2Zmc2V0KCksICIsICIsIGF0dHJp
YnV0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgIiBidXQgdGhleSBhcmUgIiwgY3VycmVudE9m
ZnNldCwgIiwgIiwgY3VycmVudEF0dHJpYnV0ZXMsICJcbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgaXQncyBhIGRpY3Rpb25hcnkuXG4iKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFByb3BlcnR5
T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7
CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVz
ZSB0aGUgcHJvcGVydHkgZXhpc3RzIGF0IG9mZnNldDogIiwgY3VycmVudE9mZnNldCwgIlxuIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpICE9IHByb3RvdHlwZSgpKSB7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2UgdGhlIHByb3RvdHlwZSBpcyAiLCBz
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCAiIGV2ZW4gdGhvdWdoICIKKyAgICAgICAgICAg
ICAgICAgICAgIml0IHNob3VsZCBoYXZlIGJlZW4gIiwgSlNWYWx1ZShwcm90b3R5cGUoKSksICJc
biIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIklu
dmFsaWQgYmVjYXVzZSBpdCdzIGEgZGljdGlvbmFyeS5cbiIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0
cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlm
IChjdXJyZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50QXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yKSkgeworICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAg
ICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHdlIGV4cGVjdGVkIG5vdCB0byBo
YXZlIGEgc2V0dGVyLCBidXQgd2UgaGF2ZSBvbmUgYXQgb2Zmc2V0ICIsCisgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50T2Zmc2V0LCAiIHdpdGggYXR0cmlidXRlcyAiLCBjdXJyZW50QXR0
cmlidXRlcywgIlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90eXBlKCkpIHsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAg
ICAgICAgICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB0aGUgcHJvdG90eXBlIGlzICIsIHN0cnVj
dHVyZS0+c3RvcmVkUHJvdG90eXBlKCksICIgZXZlbiB0aG91Z2ggIgorICAgICAgICAgICAgICAg
ICAgICAiaXQgc2hvdWxkIGhhdmUgYmVlbiAiLCBKU1ZhbHVlKHByb3RvdHlwZSgpKSwgIlxuIik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBF
cXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJlKCkgIT0g
c3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2Us
IHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhlCisgICAg
ICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2Ugd2Ug
ZG9uJ3QgaGF2ZSBhIGJhc2Ugb3IgdGhlIGJhc2UgaGFzIHRoZSB3cm9uZyBzdHJ1Y3R1cmU6ICIs
CisgICAgICAgICAgICAgICAgICAgIFJhd1BvaW50ZXIoYmFzZSksICJcbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByYWN5LCBhbmQgbWF5YmUgbW9yZSByaXNr
eSB0aGFuIHdlIHdhbnQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzQ2NDEKKyAgICAgICAgCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJl
bnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIEpT
VmFsdWUgY3VycmVudFZhbHVlID0gYmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRPZmZzZXQpOworICAg
ICAgICBpZiAoY3VycmVudFZhbHVlICE9IHJlcXVpcmVkVmFsdWUoKSkgeworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAg
ICAgICAiSW52YWxpZCBiZWNhdXNlIHRoZSB2YWx1ZSBpcyAiLCBjdXJyZW50VmFsdWUsICIgYnV0
IHdlIHJlcXVpcmUgIiwgcmVxdWlyZWRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAiXG4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJv
cGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVz
ZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvcGVydHlD
b25kaXRpb246OmlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJh
c2UpIGNvbnN0Cit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNhbiBjYXVz
ZSBhIHByb3BlcnR5IHRvIGFwcGVhciwgYW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRvdyIgYW4g
ZXhpc3RpbmcgSlMgcHJvcGVydHkgb24gdGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBhZmZlY3Rz
IGJvdGggcHJlc2VuY2UgYW5kCisgICAgLy8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZlY3QgQWJz
ZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1wdXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIgc2V0dGVy
cy4KKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBB
YnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNXYXRjaGFibGVXaGVuVmFsaWQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNo
YWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFsZW5jZTog
eworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgd2hlbiBzb21lIHZhcmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0cnVlLCB3
aGljaAorICAgICAgICAvLyBpbXBsaWVzIHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhhdCB0
aGUgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAgICAgIC8v
IGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFibGUgZGlj
dGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UKKyAgICAgICAgLy8gc2hvdWxkbid0IGhhdmUgYSBUT0NU
T1UgcmFjZSBlaXRoZXIuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCAhPSBpbnZhbGlk
T2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAgICAgICAg
c3dpdGNoIChlZmZvcnQpIHsKKyAgICAgICAgY2FzZSBNYWtlTm9DaGFuZ2VzOgorICAgICAgICAg
ICAgc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZz
ZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5zdXJlV2F0Y2hhYmlsaXR5
OgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50
V2F0Y2hwb2ludFNldCgKKyAgICAgICAgICAgICAgICAqSGVhcDo6aGVhcChzdHJ1Y3R1cmUpLT52
bSgpLCBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghc2V0IHx8ICFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBi
YXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0
aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2Up
CisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30K
KworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25z
dAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQorICAgICAgICAm
JiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90
eXBlKCkgJiYgcHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkKKyAg
ICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKS5pc0Nl
bGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2VsbCgp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJl
ZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpKQorICAg
ICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFzUmVxdWly
ZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQgY29uZGl0
aW9uKQoreworICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgor
ICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQucHJp
bnQoIkFic2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2UiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIFByb3Bl
cnR5Q29uZGl0aW9uX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwor
CitjbGFzcyBQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAg
ICAgICAgUHJlc2VuY2UsCisgICAgICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VPZlNldHRl
ciwKKyAgICAgICAgRXF1aXZhbGVuY2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0aGlz
IHdpbGwgYmUgYSBwYWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJlIHRy
YW5zaXRpb25zLCB3ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0aGUg
bmV3IHN0cnVjdHVyZS4KKyAgICB9OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKCkKKyAg
ICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkKKyAgICB7
CisgICAgICAgIG1lbXNldCgmdSwgMCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAgUHJv
cGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6
IG1fdWlkKG51bGxwdHIpCisgICAgICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgeworICAgICAg
ICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9w
ZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7Cisg
ICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0g
dWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gUHJlc2VuY2U7CisgICAgICAgIHJlc3VsdC51
LnByZXNlbmNlLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2UuYXR0
cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAgVk0mLCBK
U0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0
QmFycmllcih1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorCisgICAgLy8gTk9URTog
VGhlIHByb3RvdHlwZSBpcyB0aGUgc3RvcmVkUHJvdG90eXBlIG5vdCB0aGUgcHJvdG90eXBlRm9y
TG9va3VwLgorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJp
ZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0g
dWlkOworICAgICAgICByZXN1bHQubV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUu
YWJzZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0
KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5o
ZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlV2l0aG91dEJh
cnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2VPZlNldHRlcjsKKyAgICAgICAgcmVzdWx0LnUuYWJz
ZW5jZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisg
ICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNP
YmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNl
dHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQ
cm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQudS5lcXVp
dmFsZW5jZS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gZXF1
aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSAmJiBvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAg
ICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAg
fQorICAgICAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3VpZCAm
JiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdWlkOyB9CisgICAgCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiAh
ISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc09mZnNldCgpKTsKKyAgICAgICAg
cmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0OworICAgIH0KKyAgICBib29sIGhhc0F0dHJpYnV0ZXMo
KSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBdHRy
aWJ1dGVzKCkpOworICAgICAgICByZXR1cm4gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgIH0K
KyAgICAKKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYg
KG1fa2luZCA9PSBBYnNlbmNlIHx8IG1fa2luZCA9PSBBYnNlbmNlT2ZTZXR0ZXIpOyB9CisgICAg
SlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUHJv
dG90eXBlKCkpOworICAgICAgICByZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAm
JiBtX2tpbmQgPT0gRXF1aXZhbGVuY2U7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1JlcXVpcmVkVmFsdWUoKSk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0
ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9raW5kKTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQ
cmVzZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAg
ICAgICAgIHJlc3VsdCArPSB1LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFi
c2VuY2UucHJvdG90eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2
YWxlbmNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1
LmVxdWl2YWxlbmNlLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91
aWQgIT0gb3RoZXIubV91aWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAg
ICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0Cisg
ICAgICAgICAgICAgICAgJiYgdS5wcmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2Vu
Y2UuYXR0cmlidXRlczsKKyAgICAgICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2Vu
Y2VPZlNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90
aGVyLnUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAg
ICAgICAgICByZXR1cm4gdS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNl
LnZhbHVlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1f
a2luZCA9PSBBYnNlbmNlOworICAgIH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUg
Y29tcGF0aWJsZSBpZiB0aGV5IGFyZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZm
ZXJlbnQgdWlkcy4gSWYKKyAgICAvLyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVj
aWRlIGhvdyB0byByZXNvbHZlIHRoZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlz
CisgICAgLy8gYSBQcmVzZW5jZSBhbmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2Vz
IHlvdSdsbCB3YW50IHRoZSBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGlu
IG90aGVyIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRo
aXMgd2lsbCBhbHNvIHJldHVybiBmYWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlr
ZSBQcmVzZW5jZSBhbmQgQWJzZW5jZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGlu
dmFsaWQKKyAgICAvLyBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcu
CisgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkg
IT0gb3RoZXIudWlkKCk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0
J3Mgc3RydWN0dXJlIGNsYWltcyB0aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRl
ZC4KKyAgICBib29sIGlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQg
dG8gZW5zdXJlIHZhbGlkaXR5IGV2ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdU
b1N0cnVjdHVyZSgpIHJldHVybmVkIHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENo
ZWNrcyBpZiB0aGUgY29uZGl0aW9uIGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdp
dmVuIG9iamVjdCBhbmQgc3RydWN0dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1
cm4gZmFsc2UsIGlmIHRoZSBvYmplY3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50
ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29u
ZGl0aW9uIG9uIGFuIG9iamVjdCB0aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRp
ZXMuIElmIHRoZSBvYmplY3QgaXMgbm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBp
bmRpY2F0ZXMgdGhhdCBjaGVja2luZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVu
IHN0cnVjdHVyZSBndWFyYW50ZWVzIHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9i
amVjdCBpcworICAgIC8vIHN1cHBsaWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBv
dGhlciB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBj
b25kaXRpb24gaW4gYWRkaXRpb24gdG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlz
U3RpbGxWYWxpZChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0Owor
ICAgIAorICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJs
ZSwgYnV0IGNvdWxkIGJlIG1hZGUgd2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFw
cHJvcHJpYXRlIHdhdGNocG9pbnQuIEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50
cyBhcmUgZW5hYmxlZCBvbmx5IHdoZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24g
dGhlIHByb3BlcnR5IGluIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNw
YWNlIGZvcgorICAgIC8vIGRpY3Rpb25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQg
bmV2ZXIgZ2V0IHZlcnkgaG90LiBCdXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFi
bGUgd2F0Y2hpbmcsIHByb3ZpZGVkIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQuCisgICAgZW51bSBXYXRjaGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlz
IHRoZSBkZWZhdWx0LiBJdCBtZWFucyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2Yg
YW55IFN0cnVjdHVyZSBvcgorICAgICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYg
dGhlIHByb3BlcnR5IGhhcHBlbnMgbm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1h
a2UKKyAgICAgICAgLy8gaXQgd2F0Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5n
IGZyb20gYSBKSVQgdGhyZWFkLiBUaGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJl
ZmVyYWJsZSB3aGVuIGZpcnN0IGRlY2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24g
Zm9yIHRoZSBmaXJzdCB0aW1lIChpLmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2lu
dCBmaXJlIHRoYXQgY2F1c2VzIHVzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBh
CisgICAgICAgIC8vIHdhdGNocG9pbnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGlu
ZyBpbXBsaWVzIHRoYXQgbWF5YmUgd2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0
IHRvIG1ha2UgaXQgcHJvZml0YWJsZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5n
IHdhdGNoZWQgbWF5IG5vdCBoYXZlCisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVm
ZXIgdG8gb25seSBhc3N1bWUgdGhhdCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJl
ZW4KKyAgICAgICAgLy8ga25vd24gdG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAg
ICBNYWtlTm9DaGFuZ2VzLAorICAgICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0
byBlbnN1cmUgdGhhdCB0aGUgcHJvcGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhh
cyBubworICAgICAgICAvLyB1c2VyLW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVz
dCBtZWFucyB0aGF0IHdlIHdpbGwgZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyBy
ZXBsYWNlbWVudCB3YXRjaHBvaW50IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxl
ZCBhbHJlYWR5LiBEbyBub3QgdXNlIHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywg
c2luY2UgdGhlIGFjdCBvZiBlbmFibGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUu
CisgICAgICAgIEVuc3VyZVdhdGNoYWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkg
Ynkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1
cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wg
aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3Ry
dWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBN
YWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBz
dGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJh
bnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlz
V2F0Y2hhYmxlKAorICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIs
IFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJv
b2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9m
IG91ciBjb25kaXRpb25zLgorICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9v
bCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMg
YXJlIHN0aWxsIGxpdmUuCisgICAgYm9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAg
IHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBX
YXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlk
OworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFs
ZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0
IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25I
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwyMiBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCiAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IGludGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENo
YWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywg
c3RydWN0dXJlLCBjaGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9w
Y29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0
aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsX291dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5
KAorICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKKyAgICB9CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBpbnRlbmRlZENoYWluLmdldCgpLCBvZmZzZXQpOwor
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYg
bWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAt
MTY1LDE2ICsxNjgsMTQgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAg
ICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+
dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbikgewotICAgICAgICAgICAgICAgIGNoYWluID0gYWRv
cHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAgICAgICAgICAgIHBy
b2ZpbGVkQmxvY2ssIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0
dXJlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNp
dGlvbi5jaGFpbi5nZXQoKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRU
cmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFy
aWFudDo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJh
bnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAgICBzdHViSW5m
by0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAg
Y2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBvZmZz
ZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwogICAgIH0KQEAgLTIxOSwxNSArMjIwLDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVy
ZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
c2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IGNoYWluOwotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3MuY2hhaW4oKSkgewotICAg
ICAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9sZFN0
cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4oKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNo
YWluLT5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAg
ICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAg
ICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCks
IGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3Ry
dWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApA
QCAtMjM1LDcgKzIzMiw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVz
IGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAg
ICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGFjY2Vzcy5jaGFpbigpLCBh
Y2Nlc3MuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMjUzLDcgKzI1MCw3IEBA
IFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlu
a0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21w
bGV4R2V0U3RhdHVzLmNoYWluKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsK
ICAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2OCwyMiAr
MzY1LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAotICAgICAgICBSZWZQdHI8
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAg
ICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90
b3R5cGUgY2hhaW4gaGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2
ZSB1cC4KLSAgICAgICAgICAgIGlmIChjaGFpbi0+bWF5SW50ZXJjZXB0U3RvcmVUbyh1aWQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAg
ICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzbid0IGJlZW4g
bm9ybWFsaXplZCAoaS5lLiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJpZXMpCi0gICAg
ICAgICAgICAvLyB0aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9uYXJ5IGNhc2Ugd291bGQgb25seSBo
YXBwZW4gaWYgdGhpcyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVuCi0gICAgICAgICAgICAvLyB1c2Vk
IGluIGFuIG9wdGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxseSB0aGUgb25s
eSByZWFzb24gd2h5IHdlIHdvdWxkCi0gICAgICAgICAgICAvLyBiYWlsIGhlcmUgaXMgdGhhdCBJ
IGRvbid0IHJlYWxseSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBvcHRpbWl6aW5nIEpJVCBnbyBhbmQg
ZmxhdHRlbgotICAgICAgICAgICAgLy8gZGljdGlvbmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2Ug
dG8gc3VnZ2VzdCB0aGF0IHRob3NlIG9iamVjdHMgd2VyZSBuZXZlciB1c2VkIGFzCi0gICAgICAg
ICAgICAvLyBwcm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUu
IHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKLSAgICAgICAgICAgIC8vIHRoZSBv
dGhlciBjaGVja3MgYmVsb3cgd2lsbCBmYWlsLgotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aXNQcm94eSgpIHx8ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkpCisgICAgICAgICAgICBjb25kaXRp
b25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgfQogICAgIApAQCAtMzk0LDcgKzM4MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7
CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0g
ICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRp
b24sIGNoYWluLmdldCgpLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsK
ICAgICAgICAgaWYgKCFkaWRBcHBlbmQpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQzLDggKzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVy
YXRvcgogICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKICAgICBtX29sZFN0cnVjdHVyZSA9IG90
aGVyLm1fb2xkU3RydWN0dXJlOwogICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1
Y3R1cmU7Ci0gICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0g
ICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0
aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29m
ZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlu
a1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxM
aW5rU3RhdHVzKTsKQEAgLTY0LDI5ICs2MywyNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0
aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVD
aGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBQ
dXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CiAg
ICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwogICAgIHJlc3VsdC5tX25l
d1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAoc3RydWN0dXJlQ2hhaW4pCi0gICAg
ICAgIHN0cnVjdHVyZUNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3Mp
OworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQu
bV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHV0QnlJZFZhcmlh
bnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQor
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKIHsKICAgICBQ
dXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKICAgICBy
ZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKGNoYWluKSB7Ci0gICAg
ICAgIGNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOwotICAgICAg
ICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0g
ICAgfQorICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6
Om1vdmUoY2FsbExpbmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzQsMTggKzEz
MCw2IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAogICAgIHJldHVy
biBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQgUHV0QnlJZFZhcmlhbnQ6OmJh
c2VTdHJ1Y3R1cmUoKSBjb25zdAotewotICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAg
ICAKLSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgp
OwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29uc3Rh
bnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJl
KTsKLSAgICByZXR1cm4gc3RydWN0dXJlOwotfQotCiBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRl
bXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgaWYgKG1fb2Zm
c2V0ICE9IG90aGVyLm1fb2Zmc2V0KQpAQCAtMTU1LDggKzEzOSw4IEBAIGJvb2wgUHV0QnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CiAgICAgICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICAg
ICAgQVNTRVJUKG1fY29uc3RhbnRDaGVja3MuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChvdGhlci5tX2NvbnN0YW50Q2hlY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQo
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2Nv
bmRpdGlvblNldC5pc0VtcHR5KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX29sZFN0
cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE5Niw2ICsxODAsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9N
ZXJnZVRyYW5zCiAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwogICAg
IEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwogICAgIEFTU0VSVCghcmVwbGFj
ZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0
KCkuaXNFbXB0eSgpKTsKICAgICAKICAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdv
cmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQg
d2hpY2gKICAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIg
cGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0CkBAIC0yMzIsMTUg
KzIxNywxMyBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAg
ICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9s
ZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJ
bkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxp
c3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0g
Iiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQs
IGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgICAgIG91dC5wcmludCgKICAgICAg
ICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBb
IiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRl
eHQpLCAiXSIpOwotICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAgICAgICAgb3V0
LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0
ZUJhc2UpLCBjb250ZXh0KSk7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQs
IGNvbnRleHQpLCAiXSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZz
ZXQpOwogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsK
ICAgICAgICAgb3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUHV0QnlJZFZhcmlhbnRfaAogI2RlZmluZSBQdXRCeUlk
VmFyaWFudF9oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVk
ZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNl
dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBAIC00Niw3ICs0Niw2IEBAIHB1Ymxp
YzoKICAgICBQdXRCeUlkVmFyaWFudCgpCiAgICAgICAgIDogbV9raW5kKE5vdFNldCkKICAgICAg
ICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQotICAgICAgICAsIG1fYWx0ZXJuYXRlQmFzZShu
dWxscHRyKQogICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgewogICAgIH0K
QEAgLTU0LDE2ICs1MywxNSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0
QnlJZFZhcmlhbnQmKTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5
SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZSgKLSAgICAg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7
CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0Jiwg
UHJvcGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0
aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0
cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgICAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0
YXR1cyk7CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQ7IH0KICAgICAKQEAgLTc2LDYgKzc0LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwogICAgIH0KICAgICAKKyAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RydWN0
dXJlKCk7CisgICAgfQorICAgIAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBr
aW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKQEAgLTEwMCwxMCArMTAzLDcg
QEAgcHVibGljOgogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9v
bCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAgICAgCi0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fY29uc3RhbnRDaGVja3M7Ci0gICAgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQog
ICAgIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtMTExLDE0
ICsxMTEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICB9CiAgICAg
Ci0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwot
ICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OwotICAg
IAogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CkBAIC0xMzYsOCArMTI4LDcgQEAgcHJpdmF0
ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CiAg
ICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNr
VmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9w
ZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NywzMyArMzcsNDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50Ojp+U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgpIHsgfQogCiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
OjpwdXNoKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgV2F0
Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+JiBoZWFkKQogewotICAgIGhlYWQgPSBz
dGQ6Om1ha2VfdW5pcXVlPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+KGhvbGRlciwg
V1RGOjptb3ZlKGhlYWQpKTsKKyAgICBoZWFkID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50PihrZXksIGhvbGRlciwgV1RGOjptb3ZlKGhlYWQpKTsKICAg
ICByZXR1cm4gaGVhZC5nZXQoKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3
aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFs
bCB3YXRjaHBvaW50cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0
Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBz
ZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQg
Y2hhbmdpbmcuCi0gICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIu
c3R1YkluZm8oKSk7CisgICAgaWYgKCFtX2tleSB8fCAhbV9rZXkuaXNXYXRjaGFibGUoUHJvcGVy
dHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxs
IGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3
YXRjaHBvaW50cy4KKyAgICAgICAgLy8gVGhhdCB3b3JrcywgYmVjYXVzZSBkZWxldGluZyBhIHdh
dGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBsaXN0LCBhbmQKKyAgICAgICAgLy8g
dGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhl
IHNldCBjaGFuZ2luZy4KKyAgICAgICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1Yigq
bV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9rZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAv
LyBJZiB0aGlzIHdhcyBhIHByZXNlbmNlIGNvbmRpdGlvbiwgbGV0J3Mgd2F0Y2ggdGhlIHByb3Bl
cnR5IGZvciByZXBsYWNlbWVudHMuIFRoaXMgaXMgcHJvZml0YWJsZQorICAgICAgICAvLyBmb3Ig
dGhlIERGRywgd2hpY2ggd2lsbCB3YW50IHRoZSByZXBsYWNlbWVudCBzZXQgdG8gYmUgdmFsaWQg
aW4gb3JkZXIgdG8gZG8gY29uc3RhbnQgZm9sZGluZy4KKyAgICAgICAgVk0mIHZtID0gKkhlYXA6
OmhlYXAobV9rZXkub2JqZWN0KCkpLT52bSgpOworICAgICAgICBtX2tleS5vYmplY3QoKS0+c3Ry
dWN0dXJlKCktPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgbV9rZXku
b2Zmc2V0KCkpOworICAgIH0KKworICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRk
VHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7CiB9CiAKIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVT
dHViSW5mbzo6fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygpCiB7CiB9CiAKLVN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
bzo6YWRkV2F0Y2hwb2ludCgpCitTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludDo6cHVzaCgqdGhpcywgbV9oZWFkKTsKKyAgICByZXR1cm4gU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludDo6cHVzaChrZXksICp0aGlzLCBtX2hlYWQpOwogfQogCiBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgUmVmUHRyPFdhdGNocG9p
bnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQorICAgIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKICAgICBp
ZiAoIWhvbGRlclJlZikKICAgICAgICAgaG9sZGVyUmVmID0gYWRvcHRSZWYobmV3IFdhdGNocG9p
bnRzT25TdHJ1Y3R1cmVTdHViSW5mbyhjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CkBAIC03Miw3ICs4
NSw3IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAgICAg
QVNTRVJUKGhvbGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAgIAot
ICAgIHJldHVybiBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoKTsKKyAgICByZXR1cm4gaG9sZGVy
UmVmLT5hZGRXYXRjaHBvaW50KGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50X2gKIAorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAi
V2F0Y2hwb2ludC5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTQ2LDE1ICs0NywxMSBAQCBjbGFz
cyBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50IDogCiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgK
LSAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIpCi0gICAgICAg
IDogbV9ob2xkZXIoaG9sZGVyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIs
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
PiBuZXh0KQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKKyAgICAgICAgOiBtX2tleShrZXkp
CisgICAgICAgICwgbV9ob2xkZXIoaG9sZGVyKQogICAgICAgICAsIG1fbmV4dChXVEY6Om1vdmUo
bmV4dCkpCiAgICAgewogICAgIH0KQEAgLTYyLDYgKzU5LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgflN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoKTsKICAgICAKICAgICBzdGF0aWMg
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogcHVzaCgKKyAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVy
ZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50PiYgaGVhZCk7CiAKQEAgLTY5LDYgKzY3LDcgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJy
aWRlOwogCiBwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OwogICAg
IFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgbV9ob2xkZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG1fbmV4dDsKIH07CkBAIC04
MywxMSArODIsMTEgQEAgcHVibGljOgogICAgIAogICAgIH5XYXRjaHBvaW50c09uU3RydWN0dXJl
U3R1YkluZm8oKTsKICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBh
ZGRXYXRjaHBvaW50KCk7CisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRk
V2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAg
ICBzdGF0aWMgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogZW5zdXJlUmVmZXJlbmNl
QW5kQWRkV2F0Y2hwb2ludCgKICAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVT
dHViSW5mbz4mIGhvbGRlclJlZiwKLSAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8qKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShy
ZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwxMiBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIGRlbGV0ZSBwb2x5bW9y
cGhpY1N0cnVjdHVyZXM7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9y
bWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRU
cmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24u
cmF3Q29uZGl0aW9uU2V0ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgYWNj
ZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgog
ICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgogICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9u
J3QgaGF2ZSB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5CkBAIC03NSw4ICs3OCwxMCBA
QCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX2RpcmVjdDoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh1LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhl
YXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQotICAgICAg
ICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkp
KQorICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3Ry
dWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAg
ICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCiAjaW5jbHVkZSAiUmVn
aXN0ZXJTZXQuaCIKQEAgLTExMyw3ICsxMTQsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgLy8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAg
ICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAg
ICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjMsNyBAQCBzdHJ1Y3QgU3RydWN0
dXJlU3R1YkluZm8gewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1
Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5
SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAg
ICB1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAg
ICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVs
ZWFzZVJhd1BvaW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAg
LTE3NSwxMCArMTc2LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNl
ZW4gPSB0cnVlOwogICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCogYWRkV2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCiAgICAgewogICAgICAgICByZXR1cm4gV2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50
KAotICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcyk7CisgICAgICAgICAg
ICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0aGlzLCBjb25kaXRpb24pOwogICAgIH0KICAgICAK
ICAgICBpbnQ4X3QgYWNjZXNzVHlwZTsKQEAgLTIxNywyMyArMjE5LDEyIEBAIHN0cnVjdCBTdHJ1
Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
YmFzZU9iamVjdFN0cnVjdHVyZTsKICAgICAgICAgfSBnZXRCeUlkU2VsZjsKICAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0
U3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByb3Rv
dHlwZVN0cnVjdHVyZTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgIH0gZ2V0
QnlJZFByb3RvOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50
IDogMzE7Ci0gICAgICAgICAgICBib29sIGlzRGlyZWN0IDogMTsKLSAgICAgICAgfSBnZXRCeUlk
Q2hhaW47Ci0gICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBsaXN0OwogICAgICAgICB9IGdldEJ5SWRMaXN0OwogICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwog
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICAg
ICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwogICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwog
ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NzksNyArMTc3OSwxMCBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgLy8gc29t
ZXRoaW5nIG1vcmUgc3VidGxlPwogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0
OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
IXN0YXR1c1tpXS5hbHRlcm5hdGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IHRoaW5nIHdvbid0IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4g
SWYgaXQgZGlkLCB3ZSdkCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRv
IGRvIGhlcmUuCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
c3RhdHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3Rh
dHVzW2ldLm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3Vs
dCkgewpAQCAtMjA2MCwzMCArMjA2MywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHNbaV07Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKTsKKyAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIFN0cnVj
dHVyZVNldCBzZXQgPSBnZXRDYXNlLnNldCgpOwogICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNl
KTsKICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0
ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRl
cm5hdGVCYXNlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckxv
YWQgPSBiYXNlLm1fdmFsdWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0K
LSAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAg
ICAgICAgICAgICAgIGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFu
dC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAg
ICAgICBpZiAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNv
bnN0YW50KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0
KAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJl
ZXplKGNvbnN0YW50UmVzdWx0KSwKKyAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5j
b25zdGFudCgpLAogICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpOwogICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9rZXkuaXNXYXRjaGFibGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVy
ZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAg
ICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJl
KCktPmdldENvbmN1cnJlbnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0
ID0gbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hw
b2ludFNldChvZmZzZXQpOworICAgIHNldC0+YWRkKCZtX3Byb3BlcnR5V2F0Y2hwb2ludCk7Cit9
CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpmaXJlKGNv
bnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICAvLyBPbmUgb2YgdGhlIHdhdGNocG9pbnRz
IGZpcmVkLCBidXQgdGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1ha2Ugc3VyZSB0aGF0IG5laXRoZXIg
b2YgdGhlbSBhcmUKKyAgICAvLyBpbiBhbnkgc2V0IGFueW1vcmUuIFRoaXMgc2ltcGxpZmllcyB0
aGluZ3MgYnkgYWxsb3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRoZSB3YXRjaHBvaW50cworICAgIC8v
IHdoZXJldmVyIGZyb20gc2NyYXRjaC4KKyAgICBpZiAobV9zdHJ1Y3R1cmVXYXRjaHBvaW50Lmlz
T25MaXN0KCkpCisgICAgICAgIG1fc3RydWN0dXJlV2F0Y2hwb2ludC5yZW1vdmUoKTsKKyAgICBp
ZiAobV9wcm9wZXJ0eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAgICAgICAgbV9wcm9wZXJ0eVdh
dGNocG9pbnQucmVtb3ZlKCk7CisgICAgCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3Bl
cnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlz
YXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpcmluZyB3YXRj
aHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2Rl
QmxvY2ssICJcbiIpOworICAgIH0KKyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7Cisg
ICAgb3V0LnByaW50KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDogIiwgZGV0YWls
KTsKKyAgICAKKyAgICBTdHJpbmdGaXJlRGV0YWlsIHN0cmluZ0RldGFpbChvdXQudG9DU3RyaW5n
KCkuZGF0YSgpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgIFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6
YXRpb24sICZzdHJpbmdEZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKAorICAg
IGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBP
QkpFQ1RfT0ZGU0VUT0YoCisgICAgICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCwgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2Fz
dDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAg
IGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50
LT5maXJlKGRldGFpbCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBG
aXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09G
RlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQs
IG1fcHJvcGVydHlXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRl
dGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAor
I2RlZmluZSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAg
IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spOworICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25z
dCB7IHJldHVybiBtX2tleTsgfQorICAgIAorICAgIHZvaWQgaW5zdGFsbCgpOworCitwcml2YXRl
OgorICAgIGNsYXNzIFN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7Cisg
ICAgcHVibGljOgorICAgICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVj
dGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwm
KSBvdmVycmlkZTsKKyAgICB9OworICAgIGNsYXNzIFByb3BlcnR5V2F0Y2hwb2ludCA6IHB1Ymxp
YyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFByb3BlcnR5V2F0Y2hwb2ludCgp
IHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChj
b25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIGZpcmUo
Y29uc3QgRmlyZURldGFpbCYpOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1f
a2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgU3RydWN0dXJlV2F0Y2hwb2lu
dCBtX3N0cnVjdHVyZVdhdGNocG9pbnQ7CisgICAgUHJvcGVydHlXYXRjaHBvaW50IG1fcHJvcGVy
dHlXYXRjaHBvaW50OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGtleSwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAs
IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkud2F0Y2hp
bmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKK30K
Kwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwoKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1fa2V5Lm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7Cit9CisKK3Zv
aWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURl
dGFpbCYgZGV0YWlsKQoreworICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRp
dGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5
KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAi
LCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAi
XG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5w
cmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAg
CisgICAgU3RyaW5nRmlyZURldGFpbCBzdHJpbmdEZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEo
KSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAm
c3RyaW5nRGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9o
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBX
YXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisg
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwo
KTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmly
ZURldGFpbCYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODc2MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMywyMiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVu
Y3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5k
bGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9m
ZnNldCwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0
ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7Cisg
ICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5
T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9k
ZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRs
ZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1w
bCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKworICAgIC8vIEF0
dGVtcHQgdG8gd2F0Y2ggdGhlIHByZXNlbmNlIG9mIGEgcHJvcGVydHkuIEl0IHdpbGwgd2F0Y2gg
dGhhdCB0aGUgcHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgc2FtZQorICAgIC8vIHdheSBhcyBp
biBhbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlIHNldC4gSXQgbWF5IGVtaXQgY29kZSBpbnN0
ZWFkIG9mIGp1c3Qgc2V0dGluZyBhIHdhdGNocG9pbnQuCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoaXMgYWxsIHdvcmtzIG91dC4KKyAgICBib29sIGNoZWNrUHJlc2VuY2VMaWtlKEpTT2JqZWN0
KiBrbm93bkJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0
cnVjdHVyZVNldCYpOworICAgIHZvaWQgY2hlY2tQcmVzZW5jZUxpa2UoTm9kZSogYmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7Cisg
ICAgCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5SWRWYXJpYW50IGFuZCB0aGUgc2V0dGVy
IGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5
cGU+CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKKworICAgIE5vZGUqIHN0b3Jl
KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50Jiwg
Tm9kZSogdmFsdWUpOworICAgICAgICAKICAgICB2b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAg
IGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CkBA
IC0yMTIsNyArMjI3LDMyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAogICAg
ICAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwg
Y29uc3QgUHV0QnlJZFN0YXR1cyYsCiAgICAgICAgIGJvb2wgaXNEaXJlY3QpOwotICAgIHZvaWQg
ZW1pdENoZWNrcyhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7CisgICAgCisg
ICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRo
aXMgY29uZGl0aW9uLiBSZXR1cm5zIGZhbHNlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBubyBs
b25nZXIgaG9sZHMsIGFuZCB0aGVyZWZvcmUgbm8gcmVhc29uYWJsZSBjaGVjayBjYW4gYmUgZW1p
dHRlZC4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7Cisg
ICAgCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRN
ZXRob2QpOworICAgIAorICAgIC8vIEVpdGhlciByZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1p
dCBhIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi4gSXQgbXVzdCBiZSBhIFByZXNlbmNlCisgICAg
Ly8gY29uZGl0aW9uLiBJdCB3aWxsIGF0dGVtcHQgdG8gcHJvbW90ZSBhIFByZXNlbmNlIGNvbmRp
dGlvbiB0byBhbiBFcXVpdmFsZW5jZSBjb25kaXRpb24uCisgICAgLy8gRW1pdHMgY29kZSBmb3Ig
dGhlIGxvYWRlZCB2YWx1ZSB0aGF0IHRoZSBjb25kaXRpb24gZ3VhcmRzLCBhbmQgcmV0dXJucyBh
IG5vZGUgY29udGFpbmluZworICAgIC8vIHRoZSBsb2FkZWQgdmFsdWUuIFJldHVybnMgbnVsbCBp
ZiB0aGUgY29uZGl0aW9uIG5vIGxvbmdlciBob2xkcy4KKyAgICBHZXRCeU9mZnNldE1ldGhvZCBw
bGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIE5vZGUqIGxvYWQo
U3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IEdldEJ5T2Zm
c2V0TWV0aG9kJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogbG9hZChTcGVj
dWxhdGVkVHlwZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBOb2RlVHlwZSA9IEdl
dEJ5T2Zmc2V0KTsKKyAgICAKKyAgICAvLyBDYWxscyBjaGVjaygpIGZvciBlYWNoIGNvbmRpdGlv
biBpbiB0aGUgc2V0OiB0aGF0IGlzLCBpdCBlaXRoZXIgZW1pdHMgY2hlY2tzIG9yIHJlZ2lzdGVy
cworICAgIC8vIHdhdGNocG9pbnRzIChvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28pIHRvIG1h
a2UgdGhlIGNvbmRpdGlvbnMgaG9sZC4gSWYgYW55IG9mIHRob3NlCisgICAgLy8gY29uZGl0aW9u
cyBhcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZSwgcmV0dXJucyBmYWxzZS4KKyAgICBib29sIGNoZWNr
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jik7CisgICAgCisgICAgLy8gQ2FsbHMg
Y2hlY2soKSBmb3IgdGhvc2UgY29uZGl0aW9ucyB0aGF0IGFyZW4ndCB0aGUgc2xvdCBiYXNlLCBh
bmQgY2FsbHMgbG9hZCgpIGZvciB0aGUgc2xvdAorICAgIC8vIGJhc2UuIERvZXMgYSBjb21iaW5h
dGlvbiBvZiB3YXRjaHBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgY2hlY2sgZW1pc3Npb24gdG8gZ3Vh
cmQgdGhlCisgICAgLy8gY29uZGl0aW9ucywgYW5kIGVtaXRzIGNvZGUgdG8gbG9hZCB0aGUgdmFs
dWUgZnJvbSB0aGUgc2xvdCBiYXNlLiBSZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8g
dGhlIGxvYWRlZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyB3
ZXJlIG5vIGxvbmdlciBjaGVja2FibGUuCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcGxhbkxvYWQo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1
bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIE5vZGVUeXBlID0g
R2V0QnlPZmZzZXQpOwogCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9p
ZCBjbGVhckNhY2hlcygpOwpAQCAtNzA2LDYgKzc0Niw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
Tm9kZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBy
b3V0ZSB0byBlbWl0UHJvcGVydHlDaGVjaywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQg
Y3VycmVudGx5LAorICAgICAgICAvLyB0aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1p
dFByb3BlcnR5Q2hlY2soKSBzaW5jZSB3ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKKyAg
ICAgICAgLy8gb2JqZWN0J3Mgc3RydWN0dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtK
U0Nvc250YW50LgogICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2Jq
ZWN0KTsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJu
IG9iamVjdE5vZGU7CkBAIC0yMjIxLDE1ICsyMjY0LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5v
ZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7Ci0gICAgaWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsK
LSAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJv
cGVydHkoYmFzZS0+YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkgewotICAgICAg
ICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiB3ZWFr
SlNDb25zdGFudChjb25zdGFudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgTm9kZSog
cHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwpAQCAtMjI0NSw2ICsyMjgxLDE4IEBAIE5vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7
CiB9CiAKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBO
b2RlVHlwZSBvcCkKK3sKKyAgICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBp
ZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNl
LT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQpKSB7CisgICAgICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20sIGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50
KGNvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFuZGxlR2V0
QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0LCBvcCk7
Cit9CisKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVl
KQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKQEAgLTIyNjIsMTAgKzIzMTAsMzA5IEBA
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50
U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvcikKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNr
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCit7CisgICAgaWYgKG1f
Z3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVj
dHVyZSgpOworICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1
Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYWRkVG9HcmFwaCgKKyAg
ICAgICAgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldChzdHJ1Y3R1cmUpKSwKKyAgICAgICAgd2Vha0pTQ29uc3RhbnQoY29uZGl0aW9uLm9iamVj
dCgpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2Rl
UGFyc2VyOjpwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QpCit7Cisg
ICAgaWYgKG1ldGhvZC5raW5kKCkgPT0gR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90
eXBlCisgICAgICAgICYmIG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPmRmZ1Nob3Vs
ZFdhdGNoKCkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdl
dENvbnN0YW50UHJvcGVydHkobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLCBtZXRob2QucHJv
dG90eXBlKCktPnN0cnVjdHVyZSgpLCBtZXRob2Qub2Zmc2V0KCkpKQorICAgICAgICAgICAgcmV0
dXJuIEdldEJ5T2Zmc2V0TWV0aG9kOjpjb25zdGFudChtX2dyYXBoLmZyZWV6ZShjb25zdGFudCkp
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWV0aG9kOworfQorCitHZXRCeU9mZnNldE1ldGhv
ZCBCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGNvbmRpdGlvbikKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUGxhbm5p
bmcgYSBsb2FkOiAiLCBjb25kaXRpb24sICJcbiIpOworICAgIAorICAgIC8vIFdlIG1pZ2h0IHBy
b21vdGUgdGhpcyB0byBFcXVpdmFsZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxz
byBkbyBzdWNoIHByb21vdGlvbgorICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1w
bGljaXR5IHRoaXMgY2Fubm90IGJlIGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0
aW9uLgorICAgIC8vIE5vbmUgb2YgdGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1
ZXN0IGEgbG9hZCBvZiBhbiBFcXVpdmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFu
ZCBzdXBwb3J0aW5nIGl0IHdvdWxkIGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisg
ICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6
UHJlc2VuY2UpOworICAgIAorICAgIC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFu
ZGxlIHRoaXMsIGZyb20gbW9zdCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8v
CisgICAgLy8gMSkgV2F0Y2hwb2ludCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJl
dHVybiBhIGNvbnN0YW50IG5vZGUgZm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8g
b3RoZXIgY29kZSBpcyBlbWl0dGVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmpl
Y3QgaXMgbmV2ZXIgcmVnaXN0ZXJlZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4g
emVybyBjb2RlIGFuZCB3ZSB3b24ndCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBv
YmplY3QKKyAgICAvLyAgICB0cmFuc2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdh
dGNoYWJsZSByaWdodCBub3cuCisgICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2Fk
LCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdh
dGNoZWQgYnkgdGhlCisgICAgLy8gICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCku
IFdhdGNoIHRoZSBzdHJ1Y3R1cmUgYW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQor
ICAgIC8vICAgIGNvbmRpdGlvbiwgc2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGlu
dG8gYSBjb25zdGFudCBpbiBJUiB3aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRj
aCB0aGUgc3RydWN0dXJlIGFueXdheSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGlu
ZyB0aGUgY29uZGl0aW9uLgorICAgIC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwg
YW5kIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5v
dCBieSB0aGUKKyAgICAvLyAgICBERkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0
aWxsVmFsaWQoKSBhbmQgIWRmZ1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAv
LyAgICB0aGUgY29uZGl0aW9uLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBO
ZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNl
IGlzIG5vdCB3YXRjaGFibGUuIEVtaXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5k
IGVtaXQgYSBsb2FkLgorICAgIC8vCisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBo
b2xkLiBHaXZlIHVwIGFuZCByZXR1cm4gbnVsbC4KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2Ug
YWdyZWUgb24gd2hhdCB0aGUgc3RydWN0dXJlIGlzIGZvciB0aGUgcHVycG9zZSBvZiBlbWl0dGlu
ZyB0aGVzZSB2YXJpb3VzCisgICAgLy8gY2hlY2tzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBGaXJzdCwg
dHJ5IHRvIHByb21vdGUgUHJlc2VuY2UgdG8gRXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3Jl
IGRvaW5nIGFueXRoaW5nIGVsc2UKKyAgICAvLyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0
YWJsZS4gQWxzbywgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFi
bGUgYnV0CisgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1l
IGFuIGVxdWl2YWxlbmNlIChzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEp
LCAoMiksIGFuZCAoMykgYWJvdmUpLgorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQo
Y29uZGl0aW9uLm9mZnNldCgpKSkgeworICAgICAgICAvLyBUaGlzIGxvYWQgaXMgZmluZSBiZWNh
dXNlIG9ubHkgdGhlIEdDIGNhbiBjYXVzZSBhIGRlbGV0ZWQgcHJvcGVydHkgdG8gaGF2ZSBhIGdh
cmJhZ2UKKyAgICAgICAgLy8gdmFsdWUuCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25kaXRp
b24ub2JqZWN0KCktPmdldERpcmVjdChjb25kaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAg
ICAgICAgICAgICBjb25kaXRpb24ub2JqZWN0KCksIGNvbmRpdGlvbi51aWQoKSwgdmFsdWUpOwor
ICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikp
CisgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGgu
ZnJlZXplKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ2xs
IGhhdmUgdG8gbWF0ZXJpYWxpemUgdGhlIGNvbmRpdGlvbidzIGJhc2UgYXMgYSBjb25zdGFudCBp
biBERkcgSVIuIE9uY2UKKyAgICAvLyB3ZSBkbyB0aGlzLCB0aGUgZnJvemVuIHZhbHVlIHdpbGwg
aGF2ZSBpdHMgb3duIGlkZWEgb2Ygd2hhdCB0aGUgc3RydWN0dXJlIGlzLiBVc2UgdGhhdCBmcm9t
CisgICAgLy8gbm93IG9uIGp1c3QgYmVjYXVzZSBpdCdzIGxlc3MgY29uZnVzaW5nLgorICAgIEZy
b3plblZhbHVlKiBiYXNlID0gbV9ncmFwaC5mcmVlemUoY29uZGl0aW9uLm9iamVjdCgpKTsKKyAg
ICBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiB0
aGUgc3RydWN0dXJlIHRoYXQgd2UndmUgcmVnaXN0ZXJlZCBtYWtlcyB0aGUgY29uZGl0aW9uIGhv
bGQuIElmIG5vdCwganVzdCBnaXZlCisgICAgLy8gdXAuIFRoaXMgaXMgY2FzZSAoNSkgYWJvdmUu
CisgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkp
CisgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgIAorICAgIC8vIElmIHRo
ZSBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZCBieSB0aGUgREZHIGFscmVhZHksIHRoZW4ganVzdCB1c2Ug
dGhpcyBmYWN0IHRvIGVtaXQgdGhlIGxvYWQuCisgICAgLy8gVGhpcyBpcyBjYXNlICgyKSBhYm92
ZS4KKyAgICBpZiAoc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICByZXR1cm4g
cHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJh
c2UsIGNvbmRpdGlvbi5vZmZzZXQoKSkpOworICAgIAorICAgIC8vIElmIHdlIGNhbiB3YXRjaCB0
aGUgY29uZGl0aW9uIHJpZ2h0IG5vdywgdGhlbiB3ZSBjYW4gZW1pdCB0aGUgbG9hZCBhZnRlciB3
YXRjaGluZyBpdC4gVGhpcworICAgIC8vIGlzIGNhc2UgKDMpIGFib3ZlLgorICAgIGlmIChtX2dy
YXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiBwcm9tb3RlVG9D
b25zdGFudChHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29uZGl0
aW9uLm9mZnNldCgpKSk7CisgICAgCisgICAgLy8gV2UgY2FuJ3Qgd2F0Y2ggYW55dGhpbmcgYnV0
IHdlIGtub3cgdGhhdCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgc2F0aXNmaWVzIHRoZSBjb25kaXRp
b24uIFNvLAorICAgIC8vIGNoZWNrIGZvciB0aGF0IHN0cnVjdHVyZSBhbmQgdGhlbiBlbWl0IHRo
ZSBsb2FkLgorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIENoZWNrU3RydWN0dXJlLCAKKyAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICBh
ZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhiYXNlKSkpOworICAgIHJldHVybiBwcm9tb3Rl
VG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUoYmFzZSwgY29u
ZGl0aW9uLm9mZnNldCgpKSk7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNv
bnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiBtZXRob2QsCisgICAgTm9kZVR5cGUgb3ApCit7CisgICAg
c3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52
YWxpZDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6Q29uc3RhbnQ6CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhtZXRob2QuY29uc3RhbnQoKSkpOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRG
cm9tUHJvdG90eXBlOiB7CisgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0Nv
bnN0YW50LCBPcEluZm8obWV0aG9kLnByb3RvdHlwZSgpKSk7CisgICAgICAgIHJldHVybiBoYW5k
bGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0
aG9kLm9mZnNldCgpLCBvcCk7CisgICAgfQorICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWQ6CisgICAgICAgIC8vIFdpbGwgbmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCisgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiwgTm9kZVR5cGUgb3ApCit7CisgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0g
cGxhbkxvYWQoY29uZGl0aW9uKTsKKyAgICByZXR1cm4gbG9hZChwcmVkaWN0aW9uLCBtX2dyYXBo
LmlkZW50aWZpZXJzKCkuZW5zdXJlKGNvbmRpdGlvbi51aWQoKSksIG1ldGhvZCwgb3ApOworfQor
Citib29sIEJ5dGVDb2RlUGFyc2VyOjpjaGVjayhjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KQoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gY29uZGl0aW9uIDogY29uZGl0aW9uU2V0KSB7CisgICAgICAgIGlmICghY2hlY2soY29u
ZGl0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJjb25kaXRpb25TZXQgPSAiLCBjb25kaXRpb25TZXQs
ICJcbiIpOworICAgIAorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlvblNldCkgewor
ICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBQcm9wZXJ0
eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0
KTsgLy8gU2hvdWxkIG9ubHkgc2VlIGV4YWN0bHkgb25lIG9mIHRoZXNlLgorICAgICAgICAgICAg
cmVzdWx0ID0gcGxhbkxvYWQoY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQor
ICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIWNoZWNrKGNvbmRpdGlv
bikpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghIXJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQo
CisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwgTm9kZVR5cGUgb3ApCiB7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgY2VsbENvbnN0YW50V2l0
aFN0cnVjdHVyZUNoZWNrKHZlY3RvcltpXS5jb25zdGFudCgpLCB2ZWN0b3JbaV0uc3RydWN0dXJl
KCkpOworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvblNl
dCk7CisgICAgcmV0dXJuIGxvYWQoCisgICAgICAgIHByZWRpY3Rpb24sCisgICAgICAgIG1fZ3Jh
cGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCku
dWlkKCkpLAorICAgICAgICBtZXRob2QsIG9wKTsKK30KKworYm9vbCBCeXRlQ29kZVBhcnNlcjo6
Y2hlY2tQcmVzZW5jZUxpa2UoCisgICAgSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNl
dCkKK3sKKyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgUHJvcGVydHlPZmZzZXQgZmlyc3RPZmZzZXQgPSBz
ZXRbMF0tPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgIGlmIChmaXJzdE9m
ZnNldCAhPSBvZmZzZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIG90aGVyQXR0
cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb3RoZXJPZmZzZXQgPSBzZXRbaV0tPmdl
dENvbmN1cnJlbnRseSh1aWQsIG90aGVyQXR0cmlidXRlcyk7CisgICAgICAgIGlmIChvdGhlck9m
ZnNldCAhPSBvZmZzZXQgfHwgb3RoZXJBdHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNv
bmRpdGlvbiA9CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhv
dXRCYXJyaWVyKGtub3duQmFzZSwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIGlmIChj
aGVjayhjb25kaXRpb24pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrUHJlc2VuY2VMaWtlKAorICAgIE5vZGUq
IGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29u
c3QgU3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgaWYgKEpTT2JqZWN0KiBrbm93bkJhc2UgPSBi
YXNlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAgICAgICBpZiAoY2hl
Y2tQcmVzZW5jZUxpa2Uoa25vd25CYXNlLCB1aWQsIG9mZnNldCwgc2V0KSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
bV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc2V0KSksIGJhc2UpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYXJpYW50VHlwZT4KK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIGNvbnN0IFZhcmlhbnRUeXBlJiB2YXJpYW50KQoreworICAgIC8vIE1ha2Ugc3VyZSBiYWNr
d2FyZHMgcHJvcGFnYXRpb24ga25vd3MgdGhhdCB3ZSd2ZSB1c2VkIGJhc2UuCisgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAKKyAgICBib29sIG5lZWRTdHJ1Y3R1cmVDaGVjayA9
IHRydWU7CisgICAgCisgICAgaWYgKEpTT2JqZWN0KiBrbm93bkJhc2UgPSBiYXNlLT5keW5hbWlj
Q2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAgICAgICAvLyBUcnkgdG8gb3B0aW1pemUg
YXdheSB0aGUgc3RydWN0dXJlIGNoZWNrLiBOb3RlIHRoYXQgaXQncyBub3Qgd29ydGggZG9pbmcg
YW55dGhpbmcgYWJvdXQgdGhpcworICAgICAgICAvLyBpZiB0aGUgYmFzZSdzIHN0cnVjdHVyZSBp
cyB3YXRjaGVkLgorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPmNvbnN0YW50
KCktPnN0cnVjdHVyZSgpOworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2go
KSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCF2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCB3ZSdyZSBsb2FkaW5nIGZyb20gYSBwcm90b3R5cGUuIFdlIGV4cGVj
dCB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eS4g
V2UgY2FuIG9ubHkgdXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGlmIGFsbCBvZiB0aGUgc3Ry
dWN0dXJlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyB2YXJpYW50LnN0cnVjdHVyZVNldCgp
IGFncmVlIG9uIHRoZSBwcm90b3R5cGUgKGl0IHdvdWxkIGJlIGhpbGFyaW91c2x5IHJhcmUgaWYg
dGhleQorICAgICAgICAgICAgICAgIC8vIGRpZG4ndCkuIE5vdGUgdGhhdCB3ZSBhcmUgcmVseWlu
ZyBvbiBzdHJ1Y3R1cmVTZXQoKSBoYXZpbmcgYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQKKyAg
ICAgICAgICAgICAgICAvLyB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cg
R2V0QnlJZFN0YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIHByb3RvdHlwZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KClbMF0tPnN0b3JlZFByb3RvdHlw
ZU9iamVjdCgpOworICAgICAgICAgICAgICAgIGJvb2wgYWxsQWdyZWUgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2YXJpYW50LnN0cnVjdHVyZVNldCgp
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0cnVjdHVy
ZVNldCgpW2ldLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSAhPSBwcm90b3R5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFsbEFncmVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoYWxsQWdyZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFi
c2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgICAgICAgICAgICAgIGtub3duQmFzZSwg
dWlkLCBwcm90b3R5cGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2soY29uZGl0aW9u
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRTdHJ1Y3R1cmVDaGVjayA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8gVGhpcyBtZWFucyB3ZSdyZSBsb2FkaW5nIGRpcmVjdGx5IGZyb20gYmFzZS4gV2UgY2FuIGF2
b2lkIGFsbCBvZiB0aGUgY29kZSB0aGF0IGZvbGxvd3MKKyAgICAgICAgICAgICAgICAvLyBpZiB3
ZSBjYW4gcHJvdmUgdGhhdCB0aGUgcHJvcGVydHkgaXMgYSBjb25zdGFudC4gT3RoZXJ3aXNlLCB3
ZSB0cnkgdG8gcHJvdmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eSBpcyB3
YXRjaGFibHkgcHJlc2VudCwgaW4gd2hpY2ggY2FzZSB3ZSBnZXQgcmlkIG9mIHRoZSBzdHJ1Y3R1
cmUgY2hlY2suCisKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0
KHZhcmlhbnQub2Zmc2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBrbm93bkJhc2UtPmdldERpcmVjdCh2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VDb25kaXRpb24gPQorICAg
ICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNl
V2l0aG91dEJhcnJpZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga25vd25CYXNlLCB1
aWQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRp
b24oZXF1aXZhbGVuY2VDb25kaXRpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHdlYWtKU0NvbnN0YW50KHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgYXR0cmlidXRlcyB3ZSdyZSBpbnRlcmVzdGVkIGluLiBI
b3BlZnVsbHkgYWxsIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZQorICAgICAgICAgICAgICAgIC8v
IHN0cnVjdHVyZSBzZXQgYWdyZWUuCisgICAgICAgICAgICAgICAgaWYgKGNoZWNrUHJlc2VuY2VM
aWtlKGtub3duQmFzZSwgdWlkLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZVNl
dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbmVlZFN0cnVjdHVyZUNoZWNrID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmVlZFN0cnVjdHVyZUNo
ZWNrKQorICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKKyAgICAKKyAg
ICBTcGVjdWxhdGVkVHlwZSBsb2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlwZSBsb2FkT3A7Cisg
ICAgaWYgKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgeworICAgICAgICBsb2FkUHJlZGljdGlv
biA9IFNwZWNDZWxsT3RoZXI7CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRlclNldHRlckJ5T2Zm
c2V0OworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gcHJlZGljdGlvbjsK
KyAgICAgICAgbG9hZE9wID0gR2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE5vZGUqIGxv
YWRlZFZhbHVlOworICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisg
ICAgICAgIGxvYWRlZFZhbHVlID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFyaWFudC5jb25kaXRp
b25TZXQoKSwgbG9hZE9wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5k
bGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCB2YXJpYW50
LnN0cnVjdHVyZVNldCgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAorICAg
ICAgICAgICAgbG9hZE9wKTsKKyAgICB9CisKKyAgICByZXR1cm4gbG9hZGVkVmFsdWU7Cit9CisK
K05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2Up
OworCisgICAgY2hlY2tQcmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lk
ZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKKyAgICBy
ZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQo
KSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAt
MjI4OCwxOCArMjYzNSwzNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9n
cmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5u
b3RpY2VJbmxpbmVkR2V0QnlJZCgpOwotICAgIAorICAgICAgICBWZWN0b3I8TXVsdGlHZXRCeU9m
ZnNldENhc2UsIDI+IGNhc2VzOworICAgICAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5
cGUgc3RydWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1h
eWJlIG5vdCBiZQogICAgICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVs
eSBleGVjdXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAg
IC8vICAgIG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUu
Ci0gICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5
SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCisgICAg
ICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBnZXRCeUlkU3RhdHVzLnZh
cmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAg
ICAgTXVsdGlHZXRCeU9mZnNldENhc2UoCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50
LnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRo
b2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRo
b2QgbWV0aG9kID0gcGxhbkxvYWQodmFyaWFudC5jb25kaXRpb25TZXQoKSk7CisgICAgICAgICAg
ICBpZiAoIW1ldGhvZCkgeworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVz
dGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlk
LCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZXMuYXBwZW5kKE11bHRpR2V0QnlPZmZzZXRDYXNlKHZhcmlhbnQuc3RydWN0
dXJlU2V0KCksIG1ldGhvZCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZ3JhcGguY29t
cGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5s
aW5lZEdldEJ5SWQoKTsKKyAgICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0QnlPZmZz
ZXQKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlH
ZXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gZ2V0QnlJZFN0
YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT5jYXNlcyA9IGNhc2VzOwogICAgICAgICBk
YXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAogICAgICAgICAgICAgYWRkVG9HcmFw
aChNdWx0aUdldEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFz
ZSkpOwpAQCAtMjMwOSwzMCArMjY3NCwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeUlkKAogICAgIEFTU0VSVChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CiAg
ICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAgICAgICAg
ICAgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKHByZWRpY3Rpb24sIGJhc2UsIGlk
ZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgIGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAg
YWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgYmFzZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSkKICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJ
bmxpbmVkR2V0QnlJZCgpOwogICAgIAotICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7Ci0g
ICAgCi0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotCi0gICAgaWYg
KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQo
dmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwotICAgIAotICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1
Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdl
IG5lZWQgdG8KLSAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0
X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCi0gICAgLy8gYWxsIG9m
IHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRoZXJlIGhh
ZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0
aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UuCi0gICAgaWYgKG9y
aWdpbmFsQmFzZSAhPSBiYXNlKQotICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFs
QmFzZSk7Ci0gICAgCi0gICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgK
LSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRp
Y3Rpb24sCi0gICAgICAgIGJhc2UsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVy
TnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVz
KCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICAKICAgICBp
ZiAoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMjM2OSw3ICsyNzIwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgK
ICAgICAvLyAgICBzaW5jZSB3ZSBvbmx5IHJlYWxseSBjYXJlIGFib3V0ICd0aGlzJyBpbiB0aGlz
IGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8gdGFrZSB0aGF0CiAgICAgLy8gICAgc2hvcnRj
dXQuCiAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKLSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3Rlcisr
KSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAKICAg
ICBoYW5kbGVDYWxsKAogICAgICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNh
bGxGcmFtZTo6R2V0dGVyQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLApAQCAtMjQw
MywxNyArMjc1NCwyMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFw
aC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3Rp
Y2VJbmxpbmVkUHV0QnlJZCgpOwotICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51
bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRC
eUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0
Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25k
aXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRl
bnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAg
ICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsK
KyAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5t
X211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1
dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXJOdW1iZXI7CkBAIC0yNDI2LDggKzI3ODAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsK
ICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0
cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVu
dGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAgICAgIHN0b3JlKGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90
aWNlSW5saW5lZFB1dEJ5SWQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQzNSw3ICsyNzg4LDEw
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgY2FzZSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tz
KCkpOworICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CisgICAg
ICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAg
ICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI0ODYsMTkg
KzI4NDIsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBOb2Rl
KiBvcmlnaW5hbEJhc2UgPSBiYXNlOwotICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaCgKLSAg
ICAgICAgICAgIENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
dmFyaWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRDaGVj
a3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2YXJp
YW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2
YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRW
YWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFz
ZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zm
c2V0KCksCi0gICAgICAgICAgICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAgICAgIE5v
ZGUqIGxvYWRlZFZhbHVlID0gbG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCB2YXJpYW50KTsKKyAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgeworICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMs
IGlzRGlyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgTm9kZSogc2V0dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZhbHVlKTsK
ICAgICAgICAgCkBAIC0yNTI2LDcgKzI4NzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeUlkKAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNl
dCkpLnRvTG9jYWwoKSk7CiAgICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rl
ck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5ha2Vk
U2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2Us
IEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVn
aXN0ZXIrKyksIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAgICAgICAgIGhhbmRs
ZUNhbGwoCkBAIC0zNDY2LDYgKzM4MTQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworCiAg
ICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKHN0cnVjdHVyZSwgdWlkKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnN0YXRl
KCkgIT0gR2V0QnlJZFN0YXR1czo6U2ltcGxlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1
cy5udW1WYXJpYW50cygpICE9IDEKQEAgLTM0NzMsOSArMzgyMiwxMSBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRCeUlkRmx1c2gsIE9wSW5mbyhpZGVudGlm
aWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3Bl
KSkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2so
Z2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkub25seVN0cnVjdHVyZSgpKTsK
KworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSB3ZWFrSlNDb25zdGFudChnbG9iYWxPYmpl
Y3QpOworICAgICAgICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGxvYWQocHJlZGljdGlvbiwgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgc3RhdHVzWzBdKTsKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9u
LCBiYXNlLCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJh
bmQpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHJlc3VsdCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKQEAgLTM2MTksMTAgKzM5NzAsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJ
ZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSks
IGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzWzBdLnN0
cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZp
cnR1YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNl
dChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4ob3Bl
cmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CisgICAgICAgICAgICAgICAgTm9k
ZSogYmFzZSA9IHdlYWtKU0NvbnN0YW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICAgICAg
c3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdHVzWzBdLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKHZhbHVlKSkpOwogICAgICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwg
YWZ0ZXIgcHV0LgogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1
YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg3NjA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODksNiArODksOSBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJl
bmNlcyhjb25zCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgfQogICAgIH0K
KyAgICAKKyAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA6
IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQtPmtleSgp
LnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJM
RShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmgi
CisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAi
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAi
REZHSnVtcFJlcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOwogICAgIEJhZzxDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAg
QmFnPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50
PiBqdW1wUmVwbGFjZW1lbnRzOwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRp
b24+IGNvbXBpbGF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTQsMjEgKzI5NCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRo
aXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAgICAgICAgICAgICBh
bHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50
IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEu
dmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCku
ZmlsdGVyKGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0cnVj
dHVyZVNldCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJp
YW50c1tpLS1dID0gZGF0YS52YXJpYW50cy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAg
ICAgICAgICAgICAgICAgIGdldENhc2Uuc2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChnZXRDYXNlLnNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS5jYXNlc1tpLS1dID0gZGF0YS5jYXNlcy5sYXN0KCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkYXRhLnZh
cmlhbnRzLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhc2VzLnNpemUo
KSAhPSAxKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBkYXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZp
ZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ss
IG5vZGUsIGJhc2VWYWx1ZSwgZGF0YS5jYXNlc1swXSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsK
ICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KQEAgLTM3NCw4ICszNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN0YXR1c1tpXS5jb25zdGFudENoZWNrcygpLmlzRW1wdHkoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgc3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90eXBl
IGNhc2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMDM4NgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0zOTIsNyArMzkwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRh
KiBkYXRhID0gbV9ncmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICAg
ICAgICAgIGRhdGEtPnZhcmlhbnRzID0gc3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygp
KSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50
aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvTXVsdGlHZXRCeU9m
ZnNldChkYXRhKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTQzMiw5ICs0
MzUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7
IGktLTspCi0gICAgICAgICAgICAgICAgICAgIGFkZENoZWNrcyhvcmlnaW4sIGluZGV4SW5CbG9j
aywgc3RhdHVzW2ldLmNvbnN0YW50Q2hlY2tzKCkpOworCisgICAgICAgICAgICAgICAgYm9vbCBh
bGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFhbGxHb29kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZh
cmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3Ry
dWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgY29uZGl0
aW9uLm9iamVjdCgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KHN0YXR1cy5udW1WYXJpYW50cygpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgZW1pdFB1
dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0sIGlkZW50
aWZpZXJOdW1iZXIpOwpAQCAtNTI5LDQxICs1NTQsNzIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRHZXRCeU9m
ZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFs
dWUmIGJhc2VWYWx1ZSwgY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgeworICAgICAgICAvLyBXaGVuIHdlIGdldCB0byBo
ZXJlIHdlIGhhdmUgYWxyZWFkeSBlbWl0dGVkIGFsbCBvZiB0aGUgcmVxdWlzaXRlIGNoZWNrcyBm
b3IgZXZlcnl0aGluZy4KKyAgICAgICAgLy8gU28sIHdlIGp1c3QgbmVlZCB0byBlbWl0IHdoYXQg
dGhlIG1ldGhvZCBvYmplY3QgdGVsbHMgdXMgdG8gZW1pdC4KICAgICAgICAgCisgICAgICAgIGFk
ZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZ2V0Q2FzZS5zZXQoKSk7
CisKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsK
KyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICBjYXNl
IEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgICAgIG1fZ3JhcGgu
Y29udmVydFRvQ29uc3RhbnQobm9kZSwgbWV0aG9kLmNvbnN0YW50KCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWQ6CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBub2Rl
LT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5v
ZGUtPm9yaWdpbiwgbWV0aG9kLnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRCeU9m
ZnNldCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVkZ2UoY2hpbGQsIEtu
b3duQ2VsbFVzZSksIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQo
dW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBi
YXNlVmFsdWUsIGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyKQogICAgIHsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmln
aW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAKICAgICAgICAg
YWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0cnVj
dHVyZVNldCgpKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZUZvckxvYWQ7Ci0gICAg
ICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2VGb3JMb2Fk
ID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJh
c2VGb3JMb2FkID0gYmFzZVZhbHVlLm1fdmFsdWU7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVl
ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2FkLCB2YXJpYW50LmJh
c2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgLy8gV2UgYXJlbid0
IHNldCB1cCB0byBoYW5kbGUgcHJvdG90eXBlIHN0dWZmLgorICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKworICAgICAg
ICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNl
VmFsdWUubV92YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgdmFyaWFudC5vZmZzZXQoKSkp
IHsKICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFwaC5m
cmVlemUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICBOb2Rl
KiBjaGlsZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5CbG9jaywgb3Jp
Z2luLCB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGlsZEVkZ2UgPSBF
ZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNo
aWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRHZXRCeU9mZnNl
dChpbmRleEluQmxvY2ssIG5vZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2ln
bmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGNo
aWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAgICAgICBFZGdl
IHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2
YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZs
eSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBHZXRCdXR0ZXJmbHksIG5vZGUtPm9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gKm1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS5vZmZzZXQgPSB2YXJpYW50
Lm9mZnNldCgpOworICAgICAgICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5p
ZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgCiAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CkBAIC02NDMs
MTUgKzY5OSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRD
aGVjayhpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGFkZENoZWNrcygKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4sIHVu
c2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYg
Y2hlY2tzKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoZWNrcy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBjaGVja3NbaV0uY29uc3RhbnQo
KSwgY2hlY2tzW2ldLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHZvaWQg
YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBp
bmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewog
ICAgICAgICBpZiAobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUoKSkg
PT0gU3RydWN0dXJlUmVnaXN0ZXJlZEFuZFdhdGNoZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6
YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywg
V2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJh
eUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50
KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFy
cmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAg
ICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZt
KCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBA
IC00NSwxMCArNDYsMjMgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6
YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNo
cG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVk
VmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50
KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBt
YXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3
ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAg
IGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOwor
fQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwg
Q29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkgeworICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBjb21tb24uYWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5p
bnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbW1vbi5h
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2ly
ZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcp
OwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRk
TGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2go
KSkKQEAgLTg4LDYgKzEwNyw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQo
Q29kZUIKICAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7
CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsK
ICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAg
IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEp
OwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBA
IC05NSw3ICsxMTUsMTggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQo
KQogICAgIHJldHVybiBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5l
U2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGls
bFZhbGlkKCkKLSAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7CisgICAg
ICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1fYWRhcHRp
dmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKK30KKwordm9pZCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJEZXNpcmVkIHdhdGNocG9pbnRzOlxuIik7Cisg
ICAgb3V0LnByaW50KCIgICAgV2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9zZXRzLCBj
b250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5saW5lIHdhdGNocG9pbnQgc2V0
czogIiwgaW5Db250ZXh0KG1faW5saW5lU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91dC5w
cmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1ZXMs
IGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIsIGlu
Q29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIg
ICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZlU3Ry
dWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkg
QEAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5o
IgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0Nv
bW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKQEAgLTQwLDMzICs0Miw1NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVj
dCBHZW5lcmljU2V0QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIFQg
c2V0LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorc3RydWN0IFNldFBvaW50ZXJBZGFwdG9yIHsK
KyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21tb25E
YXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2ludCk7
CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9j
aykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpIHsg
cmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KKyAgICBzdGF0aWMgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIFQgc2V0LCBEdW1wQ29udGV4dCopCisgICAgewor
ICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihzZXQpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3Qg
SW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJ
bmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0Jl
ZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwogICAgIH0KKyAg
ICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVmFs
dWUqIGluZmVycmVkVmFsdWUsIER1bXBDb250ZXh0KikKKyAgICB7CisgICAgICAgIG91dC5wcmlu
dChSYXdQb2ludGVyKGluZmVycmVkVmFsdWUpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgQXJyYXlC
dWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBh
ZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAgICAgc3Rh
dGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAg
IHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdURjo6
bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4g
IXZpZXctPmxlbmd0aCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBEdW1wQ29udGV4dCogY29u
dGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZSh2aWV3KSwg
Y29udGV4dCkpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVl
bkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgewor
ICAgICAgICByZXR1cm4gIWtleS5pc1dhdGNoYWJsZSgpOworICAgIH0KKyAgICBzdGF0aWMgdm9p
ZCBkdW1wSW5Db250ZXh0KAorICAgICAgICBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAg
ICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7CiAgICAgfQogfTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBHZW5l
cmljU2V0QWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRj
aHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNo
cG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFB
U1NFUlRfRElTQUJMRUQKICAgICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2ludFNldFR5cGUsIGJv
b2w+IFN0YXRlTWFwOwpAQCAtODcsNyArMTEyLDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8mIHNl
dCA6IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29t
bW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFk
ZChjb2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRk
ZWQgPSB0cnVlOwogICAgIH0KQEAgLTEwNyw2ICsxMzIsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9zZXRzLmNvbnRhaW5zKHNldCk7CiAgICAgfQogCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsK
KyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKGNvbnN0IFdhdGNocG9p
bnRTZXRUeXBlJiBlbnRyeSA6IG1fc2V0cykgeworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
KTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmR1bXBJbkNvbnRleHQob3V0LCBlbnRyeSwgY29udGV4
dCk7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgSGFzaFNldDxXYXRjaHBvaW50
U2V0VHlwZT4gbV9zZXRzOwogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTEyMiw2ICsxNTYs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAgICB2
b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0J3MgcmVj
b21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6Ondh
dGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMg
YXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgorICAgIHZvaWQgYWRkTGF6aWx5KGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9vbCBjb25zaWRlcihT
dHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21tb25E
YXRhJik7CkBAIC0xNDQsMTIgKzE4MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRj
aGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAgfQorCisg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAg
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAgIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5lU2V0
czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJl
ZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNo
cG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0
b3I+IG1fYnVmZmVyVmlld3M7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9h
ZGFwdGl2ZVN0cnVjdHVyZVNldHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTAsNyArNTAsMTQgQEAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp+RGVzaXJlZFdlYWtSZWZlcgog
CiB2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTQ2VsbCogY2VsbCkKIHsK
LSAgICBtX3JlZmVyZW5jZXMuYWRkKGNlbGwpOworICAgIGlmIChjZWxsKQorICAgICAgICBtX3Jl
ZmVyZW5jZXMuYWRkKGNlbGwpOworfQorCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRk
TGF6aWx5KEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICBhZGRMYXppbHkodmFsdWUuYXNDZWxsKCkpOwogfQogCiBib29sIERlc2lyZWRXZWFrUmVmZXJl
bmNlczo6Y29udGFpbnMoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAxODc2
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IAog
CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKU1ZhbHVlOwogY2xhc3Mg
U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIApAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6CiAgICAg
fkRlc2lyZWRXZWFrUmVmZXJlbmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXppbHkoSlNDZWxsKik7
CisgICAgdm9pZCBhZGRMYXppbHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwq
KTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU3LDggKzI1Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QK
ICAgICBpZiAobm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0
aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIs
IGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250ZXh0
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNlc1tp
XSwgY29udGV4dCkpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERh
dGEoKSkgewogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCk7CkBAIC01MzAsNiArNTMwLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBpZiAodmFsdWUtPnBvaW50c1RvSGVhcCgp
KQogICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5Db250ZXh0KCp2YWx1ZSwgJm15Q29u
dGV4dCksICJcbiIpOwogICAgIH0KKworICAgIG91dC5wcmludChpbkNvbnRleHQod2F0Y2hwb2lu
dHMoKSwgJm15Q29udGV4dCkpOwogICAgIAogICAgIGlmICghbXlDb250ZXh0LmlzRW1wdHkoKSkg
ewogICAgICAgICBteUNvbnRleHQuZHVtcChvdXQpOwpAQCAtODQ4LDYgKzg1MCwzMCBAQCB2b2lk
IEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCitib29sIEdy
YXBoOjp3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQor
eworICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7Cisg
ICAgaWYgKGtleS5oYXNQcm90b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2Vz
LmFkZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgIGlmIChrZXkuaGFzUmVxdWlyZWRWYWx1
ZSgpKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5yZXF1aXJl
ZFZhbHVlKCkpOworICAgIAorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsK
KworICAgIGlmIChrZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkKKyAg
ICAgICAgbV9zYWZlVG9Mb2FkLmFkZChzdGQ6Om1ha2VfcGFpcihrZXkub2JqZWN0KCksIGtleS5v
ZmZzZXQoKSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjppc1Nh
ZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBy
ZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkp
OworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9j
ayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRy
PEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5l
c3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTAyMCw4ICsxMDQ2LDEyIEBAIEpTVmFsdWUgR3JhcGg6
OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50
UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJl
LmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpCisgICAgaWYgKHN0cnVjdHVyZS5p
c1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbgorICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1mb2xk
IHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NzI3MQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICAK
ICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBzdHJ1Y3R1cmUuc2V0KCks
IG9mZnNldCk7CiB9CkBAIC0xMTY3LDE3ICsxMTk3LDkgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50LnN0cnVjdHVyZVNl
dCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6ZSgpOyBq
LS07KQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJl
YWRPbmx5UG9pbnRlcihzZXRbal0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5l
ZWQgdG8gbWFyayBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3
b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENo
ZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gbWFyayB0aGUKLSAgICAgICAgICAgICAgICAg
ICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRCeU9m
ZnNldCBpZiBhbnkgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0
aGF0LgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMo
KSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0
Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IGdldENhc2Uuc2V0KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2lu
dGVyKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSwxNSBAQCBwdWJsaWM6CiAgICAg
RGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlm
aWVyczsgfQogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBt
X3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBr
ZXkgaXMgYWxyZWFkeSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEgUHJlc2Vu
Y2UgY29uZGl0aW9uLAorICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBxdWVyeSBp
ZiB0aGUgY29uZGl0aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mga25vd3MK
KyAgICAvLyB3aGF0J3MgZ29pbmcgb24uCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24g
dGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlz
IGZpbmUuIFRoaXMgaXMKKyAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRp
b25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4KKyAgICBib29sIGlzU2FmZVRvTG9h
ZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOworICAgIAogICAgIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkBAIC04NDQsNiArODUz
LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5l
VmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1
bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIEhhc2hNYXA8Q29k
ZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5dGVjb2RlS2lsbHM7
CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9mZnNldD4+IG1fc2Fm
ZVRvTG9hZDsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVy
aW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0
QnlPZmZzZXREYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoi
KTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb3V0
LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChjb25zdGFudCgpLCBjb250ZXh0
KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludChv
ZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBlOgor
ICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCksICJAIiwgcG9pbnRlckR1bXBJbkNvbnRleHQocHJv
dG90eXBlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBH
ZXRCeU9mZnNldE1ldGhvZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1
bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSwgIjoiLCBp
bkNvbnRleHQobV9tZXRob2QsIGNvbnRleHQpKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0
Q2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQo
b3V0LCBudWxscHRyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3Bh
Y2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgR2V0QnlPZmZzZXRNZXRob2Q6OktpbmQga2luZCkKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgor
ICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
R2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgor
ICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0
QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQoIkxv
YWRGcm9tUHJvdG90eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKyNkZWZp
bmUgREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJEdW1wQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgRnJvemVuVmFsdWU7CisKK2NsYXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIEtpbmQgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBDb25zdGFudCwKKyAgICAg
ICAgTG9hZCwKKyAgICAgICAgTG9hZEZyb21Qcm90b3R5cGUKKyAgICB9OworICAgIAorICAgIEdl
dEJ5T2Zmc2V0TWV0aG9kKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFudChGcm96ZW5WYWx1
ZSogdmFsdWUpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3RhbnQg
PSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
TG9hZDsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBs
b2FkRnJvbVByb3RvdHlwZShGcm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBMb2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUubG9h
ZC5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0g
b2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkOyB9CisgICAgCisgICAg
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgRnJvemVuVmFs
dWUqIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29u
c3RhbnQpOworICAgICAgICByZXR1cm4gdS5jb25zdGFudDsKKyAgICB9CisgICAgCisgICAgRnJv
emVuVmFsdWUqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5wcm90b3R5cGU7
CisgICAgfQorICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWQgfHwga2luZCgpID09IExvYWRGcm9tUHJvdG90
eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHVuaW9u
IHsKKyAgICAgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50OworICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldDsKKyAgICAgICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1fa2luZDsK
K307CisKK2NsYXNzIE11bHRpR2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0aUdldEJ5T2Zmc2V0
Q2FzZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1l
dGhvZCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzZXQoKSB7IHJldHVybiBtX3Nl
dDsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7
IH0KKyAgICBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kKCkgY29uc3QgeyByZXR1cm4g
bV9tZXRob2Q7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIFN0cnVjdHVyZVNldCBtX3NldDsKKyAgICBHZXRCeU9mZnNldE1ldGhv
ZCBtX21ldGhvZDsKK307CisKK3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2Us
IDI+IGNhc2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkdldEJ5
T2Zmc2V0TWV0aG9kOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NzYwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXBvY2gu
aCIKICNpbmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9k
ZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwxMSArNjYsNiBAQCBz
dHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7
CiB9OwogCi1zdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgewotICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXI7Ci0gICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKLX07
Ci0KIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlcjsKICAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9u
IDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsMTAgKzMyNCwxOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdl
dEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7
CisKKyAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVy
ZXNBcmVXYXRjaGVkKSB7CisgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9IG5v
ZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAgICAg
ICAgICAgICAgIGlmIChncmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAgaWYgKHZhbHVlLmlz
SW5maW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgaWYg
KCF2YWx1ZVtpXS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTMzNyw0MiArMzQ1LDI4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFj
dFN0YXRlVHlwZSYgc3QKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAg
ICAgICAgIC8vIFdlIGNhbid0IGFsd2F5cyBndWFyYW50ZWUgdGhhdCB0aGUgTXVsdGlHZXRCeU9m
ZnNldCBpcyBzYWZlIHRvIGV4ZWN1dGUgaWYgaXQKLSAgICAgICAgLy8gY29udGFpbnMgbG9hZHMg
ZnJvbSBwcm90b3R5cGVzLiBXZSBrbm93IHRoYXQgaXQgd29uJ3QgbG9hZCBmcm9tIHRob3NlIHBy
b3RvdHlwZXMgaWYKLSAgICAgICAgLy8gd2Ugd2F0Y2ggdGhlIG11dGFiaWxpdHkgb2YgdGhlIHBy
b3BlcnRpZXMgYmVpbmcgbG9hZGVkLiBTbywgaGVyZSB3ZSB0cnkgdG8KLSAgICAgICAgLy8gY29u
c3RhbnQtZm9sZCBwcm90b3R5cGUgbG9hZHMsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSBjbGFpbSB0
aGF0IHdlIGNhbm5vdCBob2lzdC4gV2UKLSAgICAgICAgLy8gYWxzbyBrbm93IHRoYXQgYSBsb2Fk
IGlzIHNhZmUgdG8gZXhlY3V0ZSBpZiB3ZSBhcmUgd2F0Y2hpbmcgdGhlIHByb3RvdHlwZSdzCi0g
ICAgICAgIC8vIHN0cnVjdHVyZS4KLSAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYg
dmFyaWFudCA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMpIHsKLSAgICAg
ICAgICAgIGlmICghdmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICAv
LyBJdCdzIG5vdCBhIHByb3RvdHlwZSBsb2FkLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJhc2UgPSB2
YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4g
PSBncmFwaC5mcmVlemUoYmFzZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuc3RydWN0dXJlQ2xv
YmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQKLSAgICAgICAgICAgICAgICAmJiBm
cm96ZW4tPnN0cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpCi0gICAgICAgICAgICAgICAgJiYg
ZnJvemVuLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkgewot
ICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgd2F0Y2hpbmcgdGhhdCBpdCdzIHNhZmUg
dG8gbG9hZCBmcm9tIHRoaXMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPSBn
cmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0
ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7
Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLy8g
Q291bGRuJ3QgY29uc3RhbnQtZm9sZCBhIHByb3RvdHlwZSBsb2FkLiBUaGVyZWZvcmUsIHdlIHNo
b3VsZG4ndCBob2lzdAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHNhZmV0eSBvZiB0
aGUgbG9hZCBkZXBlbmRzIG9uIHN0cnVjdHVyZSBjaGVja3Mgb24gdGhlIHByb3RvdHlwZSwKLSAg
ICAgICAgICAgICAgICAvLyBhbmQgd2UncmUgdG9vIGNoZWFwIHRvIHZlcmlmeSB0aGF0IGhlcmUu
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBjb250YWlucyBsb2Fk
cyBmcm9tIHByb3RvdHlwZXMuIElmIHRoZSBsb2FkIHJlcXVpcmVzIGEgY2hlY2sgaW4gSVIsIHdo
aWNoIGlzIHJhcmUsIHRoZW4KKyAgICAgICAgLy8gd2UgY3VycmVudGx5IGNsYWltIHRoYXQgd2Ug
ZG9uJ3Qga25vdyBpZiBpdCdzIHNhZmUgdG8gZXhlY3V0ZSBiZWNhdXNlIGZpbmRpbmcgdGhhdAor
ICAgICAgICAvLyBjaGVjayBpbiB0aGUgYWJzdHJhY3Qgc3RhdGUgd291bGQgYmUgaGFyZC4gSWYg
dGhlIGxvYWQgcmVxdWlyZXMgd2F0Y2hwb2ludHMsIHdlIGp1c3QKKyAgICAgICAgLy8gY2hlY2sg
aWYgd2UncmUgbm90IGluIGEgY2xvYmJlcmVkIHN0YXRlIChpLmUuIGluIGJldHdlZW4gYSBzaWRl
IGVmZmVjdCBhbmQgYW4KKyAgICAgICAgLy8gaW52YWxpZGF0aW9uIHBvaW50KS4KKyAgICAgICAg
Zm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1l
dGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZC5raW5k
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OiAv
LyBPSyBiZWNhdXNlIGNvbnN0YW50cyBhcmUgYWx3YXlzIHNhZmUgdG8gZXhlY3V0ZS4KKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6IC8vIE9LIGJlY2F1c2UgdGhlIE11
bHRpR2V0QnlPZmZzZXQgaGFzIGl0cyBvd24gY2hlY2tzIGZvciBsb2FkaW5nIGZyb20gc2VsZi4K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRo
b2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgT0sgaWYgdGhl
IHN0YXRlIGlzbid0IGNsb2JiZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2UuCisg
ICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpICE9IFN0cnVj
dHVyZXNBcmVXYXRjaGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgaWYgKCFncmFwaC5pc1NhZmVUb0xvYWQobWV0aG9kLnByb3RvdHlwZSgpLT5j
YXN0PEpTT2JqZWN0Kj4oKSwgbWV0aG9kLm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwgZWl0aGVyOgotICAg
ICAgICAgICAgLy8gLSBOb3QgbG9hZCBmcm9tIHRoZSBwcm90b3R5cGUgYmVjYXVzZSBjb25zdGFu
dCBmb2xkaW5nIHdpbGwgc3VjY2VlZCBpbiB0aGUKLSAgICAgICAgICAgIC8vICAgYmFja2VuZCwg
b3IKLSAgICAgICAgICAgIC8vIC0gRW1pdCBpbnZhbGlkIGNvZGUgdGhhdCBmYWlscyB3YXRjaHBv
aW50IGNoZWNrcy4gVGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlCi0gICAgICAgICAgICAvLyAgIHBy
b3BlcnR5IGJlY29tZXMgbXV0YWJsZSBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB3ZSBhbHJlYWR5
IHNldCB0aGUgd2F0Y2hwb2ludAotICAgICAgICAgICAgLy8gICBhYm92ZS4gVGhpcyBjYXNlIGlz
IE9LIHNpbmNlIHRoZSBjb2RlIHdpbGwgZmFpbCB3YXRjaHBvaW50IGNoZWNrcyBhbmQgbmV2ZXIK
LSAgICAgICAgICAgIC8vICAgZ2V0IGluc3RhbGxlZC4KICAgICAgICAgfQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4Niw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50
ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlcyh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcg
aW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4g
RG9uJ3QgbmVlZCB0byB3YXRjaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxM
aW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55
IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBN
dWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkuY2FzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZXMoZ2V0
Q2FzZS5zZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNp
b24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MzcsMjQgKzM4MzcsMjQgQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5tdWx0
aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLmlzRW1wdHko
KSkgeworICAgICAgICBpZiAoZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8v
IFByb3RlY3QgYWdhaW5zdCBjcmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRoIHplcm8gaW5wdXRz
LiBMTFZNIGRvZXNuJ3QgbGlrZSB0aGF0LgogICAgICAgICAgICAgdGVybWluYXRlKEJhZENhY2hl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVmVj
dG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXplKCkpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKKyAgICAgICAg
VmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS5jYXNlcy5zaXplKCkpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykKICAgICAgICAgICAg
IGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBjYXNl
ICIsIGkpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTXVsdGlHZXRCeU9mZnNldCBmYWlsIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY29udGludWF0
aW9uIikpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwog
ICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50
IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KClbal07CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgpOyBqLS07KSB7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNlLnNldCgpW2pdOwog
ICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJsb2Nr
c1tpXSwgV2VpZ2h0KDEpKSk7CiAgICAgICAgICAgICB9CkBAIC0zODY1LDI5ICszODY1LDM2IEBA
IHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0Qmxv
Y2s7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJp
YW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5
T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIEdldEJ5T2Zm
c2V0TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNpemUo
KSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR2V0
QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBiYXNl
U2V0Lm1lcmdlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdDsKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQ7Ci0gICAgICAgICAgICBp
ZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdGFudFJl
c3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAg
ICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJp
YW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb25zdGFudFJl
c3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6
OmVuY29kZShjb25zdGFudFJlc3VsdCkpOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUobWV0
aG9kLmNvbnN0YW50KCktPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6Cisg
ICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogewog
ICAgICAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJh
c2UgPSB3ZWFrUG9pbnRlcih2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zmc2V0
TWV0aG9kOjpMb2FkKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBiYXNlOwot
ICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3
ZWFrUG9pbnRlcihtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxsKCkpOworICAgICAg
ICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgpKSkKICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJhc2UsIG1f
aGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2Fk
UHJvcGVydHkocHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zm
c2V0KCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQcm9w
ZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJO
dW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQu
YW5jaG9yKHJlc3VsdCkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODc2MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAog
ICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBhY3Qp
CiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVz
V2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkpCiAgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5
KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0NyAr
MTMyLDMzIEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgogfQog
Ci1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBv
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAogICAgIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBz
dHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxp
ZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0
IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgICAgICAv
LyB0aGlzIGluIGRlYnVnIG1vZGVzLgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBq
aXQsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGpp
dC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2ludCk7Ci0gICAgICAg
ICAgICBvay5saW5rKCZqaXQpOwotICAgICAgICB9CisgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNo
YWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgY29uZGl0
aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCisgICAg
ICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CisKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgUkVMRUFTRV9B
U1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgIGZh
aWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAg
ICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAg
ICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c3RydWN0dXJlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQsIENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCiAgICAgTWFjcm9B
c3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQ
UlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAg
ICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0NlbGwo
KSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywg
aml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIGZvciAoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBjaGVj
a09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQogfQog
CiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZl
ciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgdGFyZ2V0KQpAQCAtMjk2LDExICsyODIsMTMgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3Rv
bUZvcihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCi0gICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVBy
b3h5LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LAotICAgIENvZGVMb2NhdGlvbkxhYmVs
IHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCisgICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsCisgICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94
eSwKKyAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBz
dWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsCisgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9u
U2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpOworICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNl
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzNyArMzM0LDMxIEBA
IHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5m
bygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1
cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50
Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNv
ZGVCbG9jaykpOwogCiAgICAgaWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRT
ZXQtPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0
dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmpl
Y3QgPSAwOwotICAgIGlmIChjaGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChj
dXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3Ry
dWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAg
ICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZp
cmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50
Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNv
ZGVCbG9jaykpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHVi
SW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAg
ICAgICBBU1NFUlQoIXByb3RvT2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBj
dXJyU3RydWN0dXJlKTsKKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAg
ICAgY29uZGl0aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2Fz
ZXMsIHNjcmF0Y2hHUFIpOworCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAg
ICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgIGlmIChjb25kaXRpb25TZXQu
aXNFbXB0eSgpKQorICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFz
ZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgY3VyclN0cnVjdHVy
ZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAg
ICB9CiAgICAgCi0gICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVw
bGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IElu
dmFsaWRHUFJSZWc7CiAgICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlm
IChjaGFpbikgeworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28g
d2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAg
ICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9m
ZnNldCgpKSwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihhbHRlcm5h
dGVCYXNlKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2Ny
YXRjaEdQUjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZvciBwcm94eSBvYmpl
Y3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5n
IHRoZSBiYXNlR1BSIGludG8KQEAgLTYyNSw5ICs2MDcsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gYWN0aW9uRm9yQ2VsbChWCiAgICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0dGVuRGlj
dGlvbmFyeU9iamVjdCh2bSk7CiAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAg
fQotICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAg
ICAKLSAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5
cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmICghc3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCiAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwogCiAgICAgcmV0dXJuIEF0dGVtcHRUb0NhY2hlOwpAQCAtODI1LDIxICs4
MDYsMjEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIH0K
IAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9m
ZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlw
ZUNoYWluID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAwOwogICAgIAorICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwg
c2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICBpZiAodHlwZUluZm8ucHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgICAgIGlmIChzbG90LmlzVW5z
ZXQoKSkKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywg
c3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMs
IHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY291
bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKAotICAgICAgICAgICAg
ICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAg
ICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KCp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNs
b3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIHByb3Rv
dHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKworICAgICAgICBv
ZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8p
OwpAQCAtODUwLDcgKzgzMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdl
dEJ5SUQKICAgICAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAg
IGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihz
bG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBj
b3VudCwgb2Zmc2V0LCAKKyAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3Rv
bUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgpLCBvZmZz
ZXQsIAogICAgICAgICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hw
b2ludFNldCgpLCAKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0
aW5lKTsKQEAgLTg2OSw3ICs4NTAsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVp
bGRHZXRCeUlECiAgICAgCiAgICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCiAgICAg
ICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJv
dXRpbmUsIHN0cnVjdHVyZSwKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4sIGNvdW50KSk7CisgICAg
ICAgIGNvbmRpdGlvblNldCkpOwogICAgIAogICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29k
ZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwogICAgIApAQCAtOTkxLDI2ICs5
NzIsMjggQEAgc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRT
dHJ1Y3R1cmUoRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMg
Ym9vbCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLCBWTSogdm0s
IFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAorICAgIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRLaW5kIHB1dEtpbmQsCisgICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogewogICAgIFByb3BlcnR5TmFtZSBwbmFt
ZShpZGVudCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAg
b2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVj
dCgpIHx8IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBwcm9wZXJ0eU9mZnNldDsKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xk
U3RydWN0dXJlLCBpZGVudC5pbXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsKIAogICAgIGlmICgh
c3RydWN0dXJlIHx8ICFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSB8fCAhc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBT
a2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRv
bid0IGhhdmUKICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgogICAg
IGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKICAgICAgICAgJiYgb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KQogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAv
LyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhl
IHN0cnVjdHVyZSBoYXMKQEAgLTEwMTgsMTQgKzEwMDEsMTQgQEAgc3RhdGljIFN0cnVjdHVyZSog
ZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0
aGlzISBJbXBsZW1lbnQgaXQhCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMDkxNAogICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5n
SGVhZGVyKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG5vcm1hbGl6ZVBy
b3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVD
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIC8vIGVtaXRQdXRUcmFuc2l0aW9uU3R1YgorICAgIGlmIChwdXRLaW5kID09
IE5vdERpcmVjdCkgeworICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgICAgICAgICAqdm0sIGV4ZWMtPmNvZGVCbG9jaygp
LT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUg
PSBzdHViSW5mby5zdHViUm91dGluZTsKQEAgLTEwODEsMTcgKzEwNjQsOCBAQCBzdGF0aWMgU3Ry
dWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICBv
bGRTdHJ1Y3R1cmUpKTsKICAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0g
ICAgICAgIG9sZFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygp
LCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICBzY3JhdGNoR1BSMSk7
Ci0gICAgICAgICAgICAKLSAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAg
Zm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVhZCgp
OyAqaXQ7ICsraXQpIHsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygK
LSAgICAgICAgICAgICAgICAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9j
aygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICAgICAgICAgIHNj
cmF0Y2hHUFIxKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29u
ZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1Yklu
Zm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUjEpOwogCiAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIApAQCAtMTIyNiw3ICsxMjAwLDcgQEAgc3Rh
dGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgIAogICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIGlmIChh
bGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKQEAgLTEyNTQsOCArMTIyOCw4IEBAIHN0YXRp
YyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgICAgIGV4ZWMtPmNv
ZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCiAg
ICAgICAgICAgICBzdHJ1Y3R1cmUpOwotCi0gICAgcmV0dXJuIG9sZFN0cnVjdHVyZTsKKyAgICAK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
UHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0x
Mjc5LDEyICsxMjUzLDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQKICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQ
dXQoKSkgewogICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQ
cm9wZXJ0eSkgewogCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBp
ZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1
Y3R1cmUpCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlm
ICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGV4ZWMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAog
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
CkBAIC0xMjkyLDcgKzEyNjUsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQ
dXRCeUlECiAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRp
bmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1
dEtpbmQgPT0gRGlyZWN0KTsKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNp
dGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQpAQCAtMTMxMCwy
MCArMTI4MywzMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAg
ICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKIAotICAgICAgICBTdHJ1Y3R1
cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAg
ICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBz
bG90LmJhc2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52
YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBj
b25kaXRpb25TZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYg
KHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3Vz
dG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCks
CisgICAgICAgICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1
Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZz
ZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlz
dDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5l
cmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1
c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZv
LCBjb25kaXRpb25TZXQsIHNsb3QuYmFzZSgpLAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1
cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLApAQCAtMTMzNCw3ICsxMzE4LDcgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBsaXN0LT5hZGRBY2Nl
c3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8g
UHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAg
ICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0
dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwpAQCAtMTM3OCwxNyArMTM2MiwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVl
IHRvIHJlY3Vyc2lvbi4KIAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBl
bWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0KLSAgICAgICAgICAg
IGlmICghb2xkU3RydWN0dXJlKSAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
OworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owor
ICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBj
b25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0g
ICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnBy
b3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5z
dHViUm91dGluZTsKICAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAg
ICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVj
dHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgb2xk
U3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICAgICAg
c3R1YlJvdXRpbmUpKTsKIAogICAgICAgICB9IGVsc2UgewpAQCAtMTQyMSwyMSArMTQwNCwzMiBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgaWYgKChzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQogICAgICAg
ICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlm
IChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFs
aXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFz
ZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52
YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWlu
KGV4ZWMpOwotICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAg
ICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1
cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmlt
cGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAg
ICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29u
ZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRC
eUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQg
PSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJv
cGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291
bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3Rv
bUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNlKCksCiAgICAgICAg
ICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVu
dFNsb3dQYXRoVGFyZ2V0KCkpLApAQCAtMTQ0Niw3ICsxNDQwLDcgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJ
ZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFj
Y2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAg
c3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0
dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5j
dXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwpAQCAtMTQ4NSwxMSArMTQ3OSwxNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
UmVwYXRjaEluKAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0SWdub3JlZDsKLSAgICBKU1ZhbHVlIGZvdW5kU2xvdEJhc2UgPSB3YXNGb3VuZCA/IHNs
b3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKTsKLSAgICBzaXplX3QgY291bnQgPSAhZm91bmRTbG90
QmFzZSB8fCBmb3VuZFNsb3RCYXNlICE9IGJhc2UgPyAKLSAgICAgICAgbm9ybWFsaXplUHJvdG90
eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIGZvdW5kU2xvdEJhc2UsIGlk
ZW50LCBvZmZzZXRJZ25vcmVkKSA6IDA7Ci0gICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5
cGVDaGFpbikKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Cisg
ICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0gYmFzZSkg
eworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgp
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAg
IH0KKyAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwogICAgIAogICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwpAQCAtMTUxNCw3ICsxNTE0LDYgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmU7CiAgICAgCiAgICAgewpAQCAtMTU0NSwxOCArMTU0NCw4IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgICAgIGlmIChzbG90LndhdGNocG9pbnRTZXQo
KSkKICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLT5hZGQoc3R1YkluZm8uYWRkV2F0
Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7Ci0gICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWlu
LT5oZWFkKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCAr
K2l0KSB7Ci0gICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0
cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVy
ZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b3R5cGUtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAg
YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvdHlwZSwg
cHJvdG9TdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAg
ICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaWYg
KHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBv
aW50cygpKQotICAgICAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQ
cm9wZXJ0eShpZGVudCwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAg
ICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgY2hl
Y2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgICAgICBjb25kaXRpb25TZXQsIGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3
YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUNo
YWluLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICA6IG1fZ2xvYmFs
T2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKLXsKLSAg
ICBBU1NFUlQobV9wcm90b3R5cGUuaXNOdWxsKCkgfHwgbV9wcm90b3R5cGUuaXNPYmplY3QoKSk7
Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAo
U3RydWN0dXJlKiBjdXJyZW50ID0gYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1
cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAg
ICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogaGVhZCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAg
ICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkp
Ci17Ci0gICAgaWYgKG1fcHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
Zm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChtX3Byb3RvdHlwZSktPnN0cnVjdHVy
ZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJl
KCkpCi0gICAgICAgIG1fdmVjdG9yLmFwcGVuZChjdXJyZW50KTsKLX0KLQotSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKLSAgICA6IG1f
Z2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlw
ZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIG1fdmVj
dG9yLmFwcGVuZChwcm90b3R5cGVTdHJ1Y3R1cmUpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5
cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGNoYWluLT5oZWFkKClbaV07ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5o
ZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90
eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClb
aV0uZ2V0KCkpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbigpCi17Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZh
bGlkKCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3RvdHlw
ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAhPSBt
X3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFBy
b3RvdHlwZSA9IG1fdmVjdG9yW2ldLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBjaGFp
bi0+aGVhZCgpW2ldLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBpZiAoY2hhaW4tPmhlYWQoKVttX3ZlY3Rvci5zaXplKCldKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6
bWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3Rv
cltpXS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChh
dHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV92ZWN0b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzUHJveHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRha2Vz
U2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0aElu
REZHRm9ySW1wdXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
Ojp0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rvci5pc0Vt
cHR5KCkpOwotICAgIGlmIChtX3ZlY3Rvci5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGFz
T2JqZWN0KG1fcHJvdG90eXBlKTsKLSAgICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92ZWN0
b3Iuc2l6ZSgpIC0gMl0tPnN0b3JlZFByb3RvdHlwZSgpKTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjpvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90
aGVyKSBjb25zdAotewotICAgIHJldHVybiBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2dsb2Jh
bE9iamVjdAotICAgICAgICAmJiBtX3Byb3RvdHlwZSA9PSBvdGhlci5tX3Byb3RvdHlwZQotICAg
ICAgICAmJiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjpnYXRoZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYg
dmVjdG9yKSBjb25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90
eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAg
ICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpOwot
ICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAgICAgdmVj
dG9yLmFwcGVuZChDb25zdGFudFN0cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRT
dHJ1Y3R1cmUpKTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1Y3R1cmUt
PnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFsT2JqZWN0
KTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJm1fcHJvdG90eXBlKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZvaWQgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAg
IGR1bXBJbkNvbnRleHQob3V0LCAwKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihnbG9iYWwgPSAiLCBSYXdQb2ludGVy
KG1fZ2xvYmFsT2JqZWN0KSwgIiwgaGVhZCA9ICIsCi0gICAgICAgIGluQ29udGV4dChtX3Byb3Rv
dHlwZSwgY29udGV4dCksICIsIHZlY3RvciA9IFsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKQotICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9yW2ldLCBj
b250ZXh0KSk7Ci0gICAgb3V0LnByaW50KCJdKSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZpbmUgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCi0KLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNr
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsT2Jq
ZWN0OwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1wQ29udGV4
dDsKLQotY2xhc3MgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVkPElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4+IHsKLXB1YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAg
ICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSopOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAg
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSog
aGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgdW5zaWduZWQgY291bnQpOwotICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7Ci0g
ICAgCi0gICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoU3Ry
dWN0dXJlQ2hhaW4qKSBjb25zdDsKLSAgICBib29sIG1heUludGVyY2VwdFN0b3JlVG8oVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgYm9vbCBpc05vcm1hbGl6ZWQoKTsKLSAgICAKLSAgICBi
b29sIHRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCk7Ci0gICAgCi0gICAgSlNW
YWx1ZSBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAgIAotICAg
IHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0gICAgU3Ry
dWN0dXJlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsg
fQotICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGF0KGluZGV4KTsgfQotICAgIAotICAgIEpTT2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlwZSgpIGNv
bnN0OwotICAgIAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
Lmxhc3QoKTsgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGdhdGhlckNoZWNrcyhDb25zdGFudFN0
cnVjdHVyZUNoZWNrVmVjdG9yJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAg
ICAKLXByaXZhdGU6Ci0gICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotICAgIEpT
VmFsdWUgbV9wcm90b3R5cGU7Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9yOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyMyw2ICsyNzIzLDEzIEBAIEpTT2JqZWN0KiB0aHJv
d1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMKICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwogfQogCit2b2lk
IEpTT2JqZWN0Ojpjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJiB2bSkKK3sKKyAgICBEZWZlcnJlZFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlOwor
ICAgIHNldFN0cnVjdHVyZSgKKyAgICAgICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0
aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZp
cmUpKTsKK30KKwogdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmco
Vk0mIHZtLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVD
YXBhY2l0eUFmdGVyKQogewogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVy
Zmx5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyOSwxMCArNjI5LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYsIHVuc2lnbmVk
IG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxs
b2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKIAotICAgIHZvaWQgY29u
dmVydFRvRGljdGlvbmFyeShWTSYgdm0pCi0gICAgewotICAgICAgICBzZXRTdHJ1Y3R1cmUodm0s
IFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KHZtKSkpOwotICAgIH0KKyAgICB2b2lkIGNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mKTsKIAogICAg
IHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoVk0mIHZtKQogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4NzYwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTk0LDQ4ICsxOTQsNiBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNBZGQoQ2Fs
bEZyYW1lKiBjCiAKICNkZWZpbmUgSW52YWxpZFByb3RvdHlwZUNoYWluIChzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKQogCi1pbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluRm9yQ2hhaW5BY2Nlc3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5T2Zmc2V0JiBzbG90T2Zmc2V0KQotewotICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+
dm0oKTsKLSAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICAKLSAgICB3aGlsZSAoMSkgewot
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAgICAgICByZXR1cm4gSW52
YWxpZFByb3RvdHlwZUNoYWluOwotCi0gICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbyA9
IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLSAgICAgICAgaWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdl
dE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0
Y2hwb2ludHMoKSkKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUHJvdG90eXBlQ2hhaW47Ci0g
ICAgICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JM
b29rdXAoY2FsbEZyYW1lKTsKLQotICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBzbG90QmFz
ZSBpbiB0aGUgYmFzZSdzIHByb3RvdHlwZSBjaGFpbiwgdGhlbiB0aGUgYmFzZQotICAgICAgICAv
LyBtdXN0IGJlIGEgcHJveHkgZm9yIGFub3RoZXIgb2JqZWN0LgotCi0gICAgICAgIGlmICh2Lmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXNsb3RCYXNlKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90b3R5cGVDaGFpbjsKLSAgICAgICAg
fQotCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IHYuYXNDZWxsKCk7Ci0gICAgICAgIHN0cnVjdHVy
ZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2lu
ZyBhIHByb3RvdHlwZSBpbiBhIGxvb3AsIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0Ci0gICAgICAg
IC8vIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCi0gICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0
ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBhc09iamVjdChjZWxsKSk7Ci0gICAgICAgICAgICBp
ZiAoc2xvdEJhc2UgPT0gY2VsbCkKLSAgICAgICAgICAgICAgICBzbG90T2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSk7IAotICAgICAgICB9Ci0gICAgICAgICsrY291bnQ7
Ci0KLSAgICAgICAgaWYgKHNsb3RCYXNlID09IGNlbGwpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgICAgIAotICAgIHJldHVybiBjb3VudDsKLX0KLQogaW5saW5lIHNpemVfdCBub3Jt
YWxpemVQcm90b3R5cGVDaGFpbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwpAQCAtMjU4LDIzICsyMTYs
NiBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKENhCiAgICAgfQogfQog
Ci1pbmxpbmUgYm9vbCBpc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICBmb3IgKDs7KSB7Ci0g
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIHYgPSBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOwotICAgICAgICBpZiAodi5pc051bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgIHN0cnVjdHVyZSA9IHYu
YXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBPcGVyYXRpb25zX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEyLDcgKzQxMiw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVRyYW5zaXQKICAgICBlbHNlCiAgICAgICAgIG1heFRyYW5zaXRpb25MZW5ndGggPSBz
X21heFRyYW5zaXRpb25MZW5ndGg7CiAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbkNvdW50
KCkgPiBtYXhUcmFuc2l0aW9uTGVuZ3RoKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CisgICAg
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9
IHRyYW5zaXRpb24pOwogICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uOwpAQCAtNDg5
LDExICs0ODksMTEgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYQog
ICAgIHJldHVybiBzdHJ1Y3R1cmU7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rp
b25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlL
aW5kIGtpbmQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBraW5kLCBEZWZlcnJl
ZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCiB7CiAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAgIFN0
cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwogCiAgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKQEAgLTUwNyw5ICs1MDcsOSBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpCiAgICAgcmV0dXJuIHRyYW5zaXRp
b247CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJy
ZWQpCiB7Ci0gICAgcmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwg
Q2FjaGVkRGljdGlvbmFyeUtpbmQpOworICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kLCBkZWZlcnJlZCk7CiB9CiAKIFN0
cnVjdHVyZSogU3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTc2MSw2ICs3NjEsMTAgQEAgdm9pZCBTdHJ1
Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQogV2F0Y2hwb2ludFNldCogU3RydWN0dXJl
OjplbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChWTSYgdm0sIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKIHsKICAgICBBU1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
OworCisgICAgLy8gSW4gc29tZSBwbGFjZXMgaXQncyBjb252ZW5pZW50IHRvIGNhbGwgdGhpcyB3
aXRoIGFuIGludmFsaWQgb2Zmc2V0LiBTbywgd2UgZG8gdGhlIGNoZWNrIGhlcmUuCisgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAog
ICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CkBA
IC03ODEsMTEgKzc4NSw3IEBAIHZvaWQgU3RydWN0dXJlOjpzdGFydFdhdGNoaW5nUHJvcGVydHlG
b3IKIHsKICAgICBBU1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGdldCh2bSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAo
IUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBvZmZzZXQpOworICAgIHN0
YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgZ2V0KHZtLCBwcm9wZXJ0eU5h
bWUpKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudChW
TSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKQEAgLTExMTcsNiArMTExNywxNyBAQCB2b2lk
IFN0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgCiAgICAgaWYgKG1fcHJv
dG90eXBlLmdldCgpLmlzQ2VsbCgpKQogICAgICAgICBvdXQucHJpbnQoIiwgUHJvdG86IiwgUmF3
UG9pbnRlcihtX3Byb3RvdHlwZS5nZXQoKS5hc0NlbGwoKSkpOworCisgICAgc3dpdGNoIChkaWN0
aW9uYXJ5S2luZCgpKSB7CisgICAgY2FzZSBOb25lRGljdGlvbmFyeUtpbmQ6CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ2FjaGVkRGljdGlvbmFyeUtpbmQ6CisgICAgICAgIG91dC5wcmludCgi
LCBEaWN0aW9uYXJ5Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5jYWNoZWREaWN0aW9u
YXJ5S2luZDoKKyAgICAgICAgb3V0LnByaW50KCIsIFVuY2FjaGVhYmxlRGljdGlvbmFyeSIpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KCJdIik7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRp
b24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogY2hhbmdlUHJvdG90eXBlVHJhbnNp
dGlvbihWTSYsIFN0cnVjdHVyZSosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0
cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSos
IERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihW
TSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUq
IHNlYWxUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwpAQCAt
MTk0LDcgKzE5NCwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7
IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQogICAgIGJv
b2wgaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2lu
ZCgpID09IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQ7IH0KICAgCi0gICAgYm9vbCBwcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hl
ZERpY3Rpb25hcnlLaW5kICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
OyB9CisgICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQKKyAg
ICAgICAgICAgICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCisgICAg
ICAgICAgICAmJiAhKHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYg
IXR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpOworICAgIH0K
KyAgICAKKyAgICBib29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQorICAgICAgICAgICAg
JiYgdHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKQorICAgICAgICAgICAg
JiYgdHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKTsKKyAgICB9
CiAKICAgICAvLyBXZSB1c2UgU2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBmb3Igc3RydWN0dXJl
cyB0aGF0IG1heSBnZXQgbmV3IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRvIHByZXZlbnQKICAg
ICAvLyBERkcgZnJvbSBpbmxpbmluZyBwcm9wZXJ0eSBhY2Nlc3NlcyBzaW5jZSBzdHJ1Y3R1cmVz
IGRvbid0IHRyYW5zaXRpb24gd2hlbiBhIG5ldyBpbXB1cmUgcHJvcGVydHkgYXBwZWFycy4KQEAg
LTIwMiw3ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZUluZm8o
KS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKTsKICAgICB9Ci0KKyAgICAKICAgICAvLyBU
eXBlIGFjY2Vzc29ycy4KICAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9ibG9iLnR5cGVJbmZv
KG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJl
dHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KQEAgLTUyOCw3ICs1NDAsNyBAQCBwcml2YXRl
OgogICAgIC8vIHRvIHVubG9jayBpdC4KICAgICB2b2lkIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9y
TWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiYgc3RydWN0dXJlcywgU3RydWN0
dXJlKiYsIFByb3BlcnR5VGFibGUqJik7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZSogdG9E
aWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kKTsKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJl
KiwgRGljdGlvbmFyeUtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRG
aXJlKiA9IG51bGxwdHIpOwogCiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJv
cGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24g
MTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBj
b3B5KQpAQCAtNTM2LDYgKzUzNiw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGRpc2NhcmRBbGxDb2RlKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyV2F0Y2hwb2ludEZvcklt
cHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImLCBXYXRjaHBvaW50Kik7CisgICAgCiAgICAg
Ly8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBpdCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRp
Zmllci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0
IFN0cmluZyYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Zv
bGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LXdpdGhvdXQtZm9sZGluZy10
aGUtc3RydWN0dXJlLWNoZWNrLW5ldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zm
c2V0LXdpdGhvdXQtZm9sZGluZy10aGUtc3RydWN0dXJlLWNoZWNrLW5ldy5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1nZXQt
Ynktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUt
Y2hlY2stbmV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKK2Z1bmN0aW9uIGZv
byhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworZnVuY3Rpb24gYmFyKG8pIHsKKyAgICByZXR1
cm4gby5nOworfQorCitmdW5jdGlvbiBiYXoobywgcCwgcSkgeworICAgIHZhciByZXN1bHQgPSAw
OworICAgIGlmIChpc0ZpbmFsVGllcigpKSB7CisgICAgICAgIHAgPSBvOworICAgICAgICBxID0g
bzsKKyAgICAgICAgcmVzdWx0ICs9IDEwMDAwOworICAgIH0KKyAgICByZXN1bHQgKz0gZm9vKHAp
OworICAgIHJlc3VsdCArPSBiYXIocSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9Jbmxp
bmUoYmF6KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciBv
LCBwLCBxOworICAgIHZhciBleHBlY3RlZDE7CisgICAgdmFyIGV4cGVjdGVkMjsKKyAgICBvID0g
e2Y6MTAwLCBnOjEwMX07CisgICAgZXhwZWN0ZWQyID0gMTAwMDAgKyAxMDAgKyAxMDE7CisgICAg
aWYgKGkgJiAxKSB7CisgICAgICAgIHAgPSB7ZToxLCBmOjIsIGc6M307CisgICAgICAgIHEgPSB7
ZTo0LCBmOjUsIGc6Nn07CisgICAgICAgIGV4cGVjdGVkMSA9IDIgKyA2OworICAgIH0gZWxzZSB7
CisgICAgICAgIHAgPSB7Zjo3LCBnOjh9OworICAgICAgICBxID0ge2c6OSwgZjoxMH07CisgICAg
ICAgIGV4cGVjdGVkMSA9IDcgKyA5OworICAgIH0KKyAgICB2YXIgcmVzdWx0ID0gYmF6KG8sIHAs
IHEpOworICAgIGlmIChyZXN1bHQgIT0gZXhwZWN0ZWQxICYmIHJlc3VsdCAhPSBleHBlY3RlZDIp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdCArICIgKGV4cGVj
dGVkICIgKyBleHBlY3RlZDEgKyAiIG9yICIgKyBleHBlY3RlZDIgKyAiKSI7Cit9CisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktZ2V0LWJ5LW9mZnNldC1z
ZWxmLW9yLXByb3RvLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvbXVsdGktZ2V0LWJ5LW9mZnNldC1zZWxmLW9yLXByb3RvLmpzCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1nZXQtYnktb2Zm
c2V0LXNlbGYtb3ItcHJvdG8uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorZnVu
Y3Rpb24gZm9vKG8sIHN0YXJ0KSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IG8uZjsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitub0lubGluZShmb28pOworCit2YXIgbyA9IHt9Oworby5mID0gNDI7Cit2
YXIgZiA9IHt9OworZi5mID0gNDM7CitmLmcgPSA0NDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKQorICAgIG8uZiA9IGk7CitvLmYgPSA0MjsKKworZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHA7CisgICAgaWYgKGkgJiAxKQorICAgICAgICBwID0g
bzsKKyAgICBlbHNlCisgICAgICAgIHAgPSBPYmplY3QuY3JlYXRlKG8pOworICAgIHZhciByZXN1
bHQgPSBmb28ocCk7CisgICAgaWYgKHJlc3VsdCAhPSAxMDAgKiA0MikKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgcSA9IHt9OworcS5mID0g
NDM7Cit2YXIgcmVzdWx0ID0gZm9vKHEpOworaWYgKHJlc3VsdCAhPSAxMDAgKiA0MykKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBsYWNlbWVudC13YXRjaHBvaW50LWRpY3Rp
b25hcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9yZXBsYWNlbWVudC13YXRjaHBvaW50LWRpY3Rpb25hcnkuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQt
ZGljdGlvbmFyeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3IEBACitmdW5jdGlvbiBm
b28obykgeworICAgIHJldHVybiBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBwID0g
e2Y6NDJ9OwordmFyIG8gPSBPYmplY3QuY3JlYXRlKHApOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDsgKytpKSB7CisgICAgcFsiaSIgKyBpXSA9IGk7CisgICAgZm9yICh2YXIgaiA9IDA7IGog
PCAxMDA7ICsraikgeworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgICAgICBpZiAo
cmVzdWx0ICE9IDQyKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworICAgIH0KK30KKworLy8gTWFrZSBwIGEgbm9uLWRpY3Rpb25hcnkuCitmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgdmFyIHRtcCA9IG8uZjsKK30KKworcC5mID0g
NDM7Cit2YXIgcmVzdWx0ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPSA0MykKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBsYWNlbWVudC13YXRjaHBvaW50LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0
Y2hwb2ludC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIyIEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisKK25vSW5saW5l
KGZvbyk7CisKK3ZhciBwID0ge2Y6NDJ9OwordmFyIG8gPSBPYmplY3QuY3JlYXRlKHApOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgcFsiaSIgKyBpXSA9IGk7CisgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCAxMDA7ICsraikgeworICAgICAgICB2YXIgcmVzdWx0ID0gZm9v
KG8pOworICAgICAgICBpZiAocmVzdWx0ICE9IDQyKQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIH0KK30KKworcC5mID0gNDM7Cit2YXIgcmVz
dWx0ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPSA0MykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2Uu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRl
ZmluZWQtYWNjZXNzLWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2UuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3Mt
ZGljdGlvbmFyeS10aGVuLXByb3RvLWNoYW5nZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE3IEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHAgPSB7fTsKKyAgICB2YXIgbyA9IHt9
OworICAgIG8uX19wcm90b19fID0gcDsKKyAgICB2YXIgcmVzdWx0OworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ID0gby5mOworICAgICAgICBpZiAo
aSA9PSA1MCkKKyAgICAgICAgICAgIHAuZiA9IDQyOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9IDQyKQorICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hhbmdlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZp
bmVkLWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNo
YW5nZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACitmdW5jdGlvbiBmb28obykg
eworICAgIHJldHVybiBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBwID0ge307Cit2
YXIgbyA9IE9iamVjdC5jcmVhdGUocCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgeworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAw
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgaW4gbG9vcDogIiArIHJlc3VsdDsK
K30KKworcC5mID0gNDI7Cit2YXIgcmVzdWx0ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPT0gNDIp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE4NzYwNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE1LTA3LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgREZHIHNob3VsZCBoYXZlIGFkYXB0aXZlIHN0cnVjdHVyZSB3
YXRjaHBvaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ2OTI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIGEgbWljcm9iZW5jaG1hcmsgdGhhdCBpbGx1c3RyYXRlcyB0aGUgbmVlZCBmb3IgdGhp
cyBmZWF0dXJlLiBUaGlzIGJlbmNobWFyayBnZXRzIDU4eCBmYXN0ZXIgd2l0aAorICAgICAgICB0
aGlzIGNoYW5nZS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRo
LW11dGF0aW5nLXByb3RvdHlwZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNjZXNzLXdp
dGgtbXV0YXRpbmctcHJvdG90eXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisKIDIwMTUt
MDctMzAgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
cGxhY2UgR29vZ2xlIEFwcCBFbmdpbmUgd2l0aCBBcHBTY2FsZQpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1h
Y2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmct
cHJvdG90eXBlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitK
U1JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZQorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90
eXBlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUt
YWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5
cGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0
YXRpbmctcHJvdG90eXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1t
dXRhdGluZy1wcm90b3R5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3By
b3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOCBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICByZXN1bHQgKz0gby5m
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBwID0ge2Y6
NDJ9OwordmFyIG8gPSBPYmplY3QuY3JlYXRlKHApOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICBwWyJpIiArIGldID0gaTsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8p
OworICAgIGlmIChyZXN1bHQgIT0gNDIgKiAxMDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL3VuZGVmaW5lZC1wcm9wZXJ0eS1hY2Nlc3MuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvdW5kZWZpbmVkLXByb3BlcnR5LWFjY2Vz
cy5qcwkocmV2aXNpb24gMTg3NjA1KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvdW5kZWZpbmVkLXByb3BlcnR5LWFjY2Vzcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEs
NyArMTEsNyBAQCBmdW5jdGlvbiBmb28oKSB7CiB9CiByZXN1bHQgPSBmb28oKTsKIGlmIChyZXN1
bHQgIT0gdW5kZWZpbmVkKQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiAKIC8vIFRoaXMgdGVz
dCBjaGVja3MgdGhhdCBhIGNhY2hlZCBwcm9wZXJ0eSBsb29rdXAgbWlzcyBkb2Vzbid0IGNvbnRp
bnVlIHRvIGZpcmUgd2hlbiB0aGUgcHJvcGVydHkgc3VkZGVubHkgYXBwZWFycyBvbiB0aGUgb2Jq
ZWN0LgogCkBAIC0yNiw3ICsyNiw3IEBAIGZ1bmN0aW9uIGJhcigpIHsKIH0KIHZhciByZXN1bHQg
PSBiYXIoKTsKIGlmIChyZXN1bHQgIT0gMSkKLSAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJl
c3VsdDsKKyAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogc29t
ZUdsb2JhbCA9IHVuZGVmaW5lZDsKIAogLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGEgY2FjaGVk
IHByb3BlcnR5IGxvb2t1cCBtaXNzIGRvZXNuJ3QgY29udGludWUgdG8gZmlyZSB3aGVuIHRoZSBw
cm9wZXJ0eSBzdWRkZW5seSBhcHBlYXJzIG9uIHRoZSBvYmplY3QncyBwcm90b3R5cGUuCkBAIC00
NCw1ICs0NCw1IEBAIGZ1bmN0aW9uIGJheigpIHsKIH0KIHZhciByZXN1bHQgPSBiYXooKTsKIGlm
IChyZXN1bHQgIT0gMikKLSAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB0
aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257940</attachid>
            <date>2015-07-31 12:16:59 -0700</date>
            <delta_ts>2015-07-31 12:25:09 -0700</delta_ts>
            <desc>closer to done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>323121</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5MiBA
QAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5n
ZSwgaWYgeW91IHdhbnRlZCB0byBlZmZpY2llbnRseSB2YWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVj
dCBoYXMgKG9yIGRvZXNuJ3QgaGF2ZSkgYQorICAgICAgICBwcm9wZXJ0eSwgeW91J2QgY2hlY2sg
dGhhdCB0aGUgb2JqZWN0IHN0aWxsIGhhcyB0aGUgc3RydWN0dXJlIHRoYXQgeW91IGZpcnN0IHNh
dyB0aGUgb2JqZWN0IGhhdmUuIFdlCisgICAgICAgIG9wdGltaXplZCB0aGlzIGEgYml0IHdpdGgg
dHJhbnNpdGlvbiB3YXRjaHBvaW50cyBvbiB0aGUgc3RydWN0dXJlLCB3aGljaCBzb21ldGltZXMg
YWxsb3dlZCB1cyB0bworICAgICAgICBlbGlkZSB0aGUgc3RydWN0dXJlIGNoZWNrLgorCisgICAg
ICAgIEJ1dCB0aGlzIGFwcHJvYWNoIGZhaWxzIHdoZW4gdGhhdCBvYmplY3QgZnJlcXVlbnRseSBo
YXMgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXQuIFRoaXMgd291bGQKKyAgICAgICAgY2hhbmdl
IHRoZSBzdHJ1Y3R1cmUgYW5kIGZpcmUgdGhlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCwgc28gdGhl
IGNvZGUgd2UgZW1pdHRlZCB3b3VsZCBiZSBpbnZhbGlkIGFuZAorICAgICAgICB3ZSdkIGhhdmUg
dG8gcmVjb21waWxlIGVpdGhlciB0aGUgSUMgb3IgYW4gZW50aXJlIGNvZGUgYmxvY2suCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBjb25jZXB0OiBhbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uLiBUaGlzIHZhbHVlIGRlc2NyaWJlcyBzb21lCisgICAgICAgIGNvbmRp
dGlvbiBpbnZvbHZpbmcgYSBwcm9wZXJ0eSBvbiBzb21lIG9iamVjdC4gVGhlcmUgYXJlIGZvdXIg
a2luZHM6IHByZXNlbmNlLCBhYnNlbmNlLAorICAgICAgICBhYnNlbmNlLW9mLXNldHRlciwgYW5k
IGVxdWl2YWxlbmNlLiBGb3IgZXhhbXBsZSwgYSBwcmVzZW5jZSBjb25kaXRpb24gc2F5cyB0aGF0
IHdlIGV4cGVjdCB0aGF0IHRoZQorICAgICAgICBvYmplY3QgaGFzIHNvbWUgcHJvcGVydHkgYXQg
c29tZSBvZmZzZXQgd2l0aCBzb21lIGF0dHJpYnV0ZXMuIFRoaXMgYWxsb3dzIHVzIHRvIGltcGxl
bWVudCBhIG5ldyBraW5kCisgICAgICAgIG9mIHdhdGNocG9pbnQsIHdoaWNoIGtub3dzIGFib3V0
IHRoZSBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHRoYXQgaXQncyBiZWluZyB1c2VkIHRvIGVu
Zm9yY2UuIElmCisgICAgICAgIHRoZSB3YXRjaHBvaW50IGZpcmVzIGJlY2F1c2Ugb2YgYSBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbiwgdGhlIHdhdGNocG9pbnQgbWF5IHNpbXBseSByZWluc3RhbGwgaXRz
ZWxmCisgICAgICAgIG9uIHRoZSBuZXcgc3RydWN0dXJlLgorCisgICAgICAgIE9iamVjdCBwcm9w
ZXJ0eSBjb25kaXRpb25zIGFyZSB1c2VkIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgUHV0QnlJ
ZCB0cmFuc2l0aW9ucywgR2V0QnlJZCBtaXNzZXMsCisgICAgICAgIGFuZCBwcm90b3R5cGUgYWNj
ZXNzZXMuIFRoZXkgYXJlIGFsc28gdXNlZCBmb3IgYW55IERGRyBhY2Nlc3NlcyB0byBvYmplY3Qg
Y29uc3RhbnRzLCBpbmNsdWRpbmcKKyAgICAgICAgZ2xvYmFsIHByb3BlcnR5IGFjY2Vzc2VzLgor
CisgICAgICAgIE1vc3RseSBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gZ2xvYmFsIHByb3BlcnR5
IGFjY2VzcywgdGhpcyBpcyBhIDklIHNwZWVkLXVwIG9uIEtyYWtlbi4gSXQncworICAgICAgICBu
ZXV0cmFsIG9uIG1vc3Qgb3RoZXIgdGhpbmdzLiBJdCdzIGEgNjh4IHNwZWVkLXVwIG9uIGEgbWlj
cm9iZW5jaG1hcmsgdGhhdCBpbGx1c3RyYXRlcyB0aGUgcHJvdG90eXBlCisgICAgICAgIGNoYWlu
IHNpdHVhdGlvbi4gSXQncyBhbHNvIGEgc21hbGwgc3BlZWQtdXAgb24gZ2V0dGVyLXJpY2hhcmRz
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpDb21wbGV4R2V0
U3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6dGFrZXNTbG93UGF0aCk6
CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmtpbmQpOgorICAgICAgICAoSlNDOjpD
b21wbGV4R2V0U3RhdHVzOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVz
Ojpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjphdHRyaWJ1
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6c3BlY2lmaWNW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmNoYWluKTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmg6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0
QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6fkdldEJ5SWRWYXJp
YW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6Okdl
dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRW
YXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpvcGVyYXRvciEpOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6c3RydWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFZhcmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJp
YW50OjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0
dXMpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24pOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmll
cik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0
ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VX
aXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpl
cXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpvcGVy
YXRvciEpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b2JqZWN0KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmNvbmRpdGlvbik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpraW5kKToKKyAgICAgICAgKEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnVpZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246
Omhhc0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNQ
cm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc1JlcXVpcmVk
VmFsdWUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cmVxdWlyZWRW
YWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNDb21wYXRpYmxlV2l0
aCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVp
cmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3QpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yQ29uZGl0aW9uS2luZCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNX
aXRoS2luZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNP
bmVTbG90QmFzZUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjptZXJnZWRXaXRoKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFyZVN0aWxsTGl2ZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXApOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCk6CisgICAgICAgIChKU0M6OmdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSk6CisgICAgICAg
ICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaDogQWRkZWQuCisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmlzVmFsaWQpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aXNFbXB0eSk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpiZWdpbik6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjplbmQpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6cmVsZWFzZVJhd1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OkRhdGE6OkRhdGEpOgorICAgICAgICAq
IGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6
fkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsp
OgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDoKKyAgICAgICAg
KEpTQzo6R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5
SWRBY2Nlc3M6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmNvbmRp
dGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnN0dWJSb3V0aW5lKToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjpjaGFpbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vz
czo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6
dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OlB1dEJ5SWRBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFj
Y2Vzczo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6bmV3U3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpjaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OmNo
YWluQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250
ZXh0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXApOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNXYXRjaGFibGVXaGVuVmFsaWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OlByb3BlcnR5Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2UpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246OmFic2VuY2UpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2UpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmtpbmQpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6dWlkKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246Omhhc09mZnNldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0
aW9uOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzQXR0cmli
dXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjphdHRyaWJ1dGVzKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246Omhhc1Byb3RvdHlwZSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6aGFzUmVxdWlyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjpyZXF1aXJlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246
Omhhc2gpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc0NvbXBhdGlibGVXaXRoKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp3
YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b25IYXNoOjplcXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0pOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpzZXR0ZXIpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bWFr
ZXNDYWxscyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25X
aXRoUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJp
YW50OjpraW5kKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlND
OjpQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvZmZz
ZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0dXMpOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6On5TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludDo6cHVzaCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJl
bmNlQW5kQWRkV2F0Y2hwb2ludCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KToKKyAgICAgICAgKEpT
Qzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpjb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OnN0dWJJbmZvKToKKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjpkZXJlZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpzZXRTZWVuKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omlu
c3RhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludDo6ZmlyZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6UHJvcGVydHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Ojpr
ZXkpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQ
cm9wZXJ0eVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgICogZGZnL0RG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omlu
c3RhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6
ZmlyZUludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludDo6a2V5KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hl
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2hlY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9tb3RlVG9Db25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBsYW5Mb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6ZW1pdENoZWNrcyk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyk6Cisg
ICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
Ojpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFz
ZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6YWRkQmFzZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6YWRkQ2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZl
clZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJl
ZFZhbHVlQWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRj
aHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVk
V2F0Y2hwb2ludHM6OmFkZExhemlseSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNo
cG9pbnRzOjpjb25zaWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRz
OjpyZWFsbHlBZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJl
U3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpkdW1w
SW5Db250ZXh0KToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6U2V0UG9pbnRlckFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U2V0UG9pbnRlckFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U2V0UG9pbnRlckFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkluZmVycmVkVmFsdWVBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAo
SlNDOjpERkc6OkluZmVycmVkVmFsdWVBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFs
aWRhdGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRh
cHRvcjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQp
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hl
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6ZHVtcElu
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNo
ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjphZGQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KToK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKToKKyAg
ICAgICAgKiBkZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmg6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6d2F0Y2hDb25kaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1Nh
ZmVUb0xvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aWRlbnRpZmllcnMpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjp3YXRjaHBvaW50cyk6CisgICAgICAgICogZGZnL0RGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRo
b2Q6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9k
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcElu
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAp
OgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRN
ZXRob2Q6OkdldEJ5T2Zmc2V0TWV0aG9kKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNl
dE1ldGhvZDo6Y29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9k
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Q
cm90b3R5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvcGVyYXRv
ciEpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpraW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6cHJvdG90eXBlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpN
dWx0aUdldEJ5T2Zmc2V0Q2FzZTo6TXVsdGlHZXRCeU9mZnNldENhc2UpOgorICAgICAgICAoSlND
OjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok11
bHRpR2V0QnlPZmZzZXRDYXNlOjptZXRob2QpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZl
VG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4p
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KToKKyAgICAgICAgKEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6CisgICAgICAg
IChKU0M6OmNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKToKKyAgICAgICAgKEpTQzo6cmVw
bGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlkU3R1Yik6CisgICAgICAg
IChKU0M6OmFjdGlvbkZvckNlbGwpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0
KToKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6ZW1p
dFB1dFRyYW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAg
ICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0
Y2hJbik6CisgICAgICAgIChKU0M6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aXNQcm90b3R5
cGVDaGFpbk5vcm1hbGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1nZXQtYnkt
b2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hl
Y2stbmV3LmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vz
cy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qczogQWRkZWQuCisK
IDIwMTUtMDctMzAgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CiAK
ICAgICAgICAgQWRkIHRoZSAid2FzbSIgZGlyZWN0b3J5IHRvIHRoZSBBZGRpdGlvbmFsIEluY2x1
ZGUgRGlyZWN0b3JpZXMgZm9yIGpzYy5leGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTAgKzk3LDEzIEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcAogICAgIGJ5dGVjb2Rl
L0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAogICAgIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCiAgICAgYnl0
ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
CiAgICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKICAgICBieXRlY29kZS9Q
cmVjaXNlSnVtcFRhcmdldHMuY3BwCisgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3Bw
CiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAKICAgICBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcApAQCAtMTI4LDYgKzEz
MSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBkZmcvREZHQWJzdHJhY3RI
ZWFwLmNwcAogICAgIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAorICAgIGRmZy9ERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCisgICAgZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKICAgICBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAogICAgIGRmZy9ERkdB
cml0aE1vZGUuY3BwCkBAIC0xOTYsNiArMjAxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2Rl
LmNwcAogICAgIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAorICAgIGRmZy9ERkdNdWx0
aUdldEJ5T2Zmc2V0RGF0YS5jcHAKICAgICBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmNwcAogICAg
IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAgZGZnL0RGR05vZGUuY3BwCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIx
Mi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWls
ZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KICAg
ICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdTdWZmaXh8V2luMzIiPgpAQCAt
MzM3LDEwICszMzcsMTMgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEp1
bXBUYWJsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wY29k
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFZhcmlhbnQuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUmVkdWNlV2hpdGVzcGFjZS5jcHAiIC8+CkBA
IC0zNjUsNiArMzY4LDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERl
YnVnZ2VyU2NvcGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fi
c3RyYWN0SGVhcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJz
dHJhY3RWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50
c1V0aWxpdGllcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJp
dGhNb2RlLmNwcCIgLz4KQEAgLTQzMyw2ICs0MzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05haXZlRG9taW5hdG9ycy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmF0dXJhbExvb3BzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlLmNwcCIgLz4KQEAgLTEwMDksMTEgKzEwMTUs
MTQgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFs
dWVQcm9maWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMTElu
dENhbGxMaW5rSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGNvZGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wZXJhbmRzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRh
cmdldHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5
Q29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkU3RhdHVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkVmFyaWFudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0
S2luZC5oIiAvPgpAQCAtMTA0OSw2ICsxMDU4LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHQWRqYWNlbmN5TGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0FsbG9jYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FuYWx5
c2lzLmgiIC8+CkBAIC0xMTQxLDYgKzExNTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdNaW5pZmllZE5vZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOYWl2ZURvbWluYXRvcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdOb2RlLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsOCBA
QAogCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNFMDRDMTYxNjRBMUIw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1RjE0QjdBNzNFMDA1
REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1Bh
dGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYxNzI1RkYxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzI1RkUxQjQ4NzE5QTAw
QUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICovOyB9OworCQkwRjE4RDNDRjFCNTVBNkUw
MDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NEMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE4RDNDRTFC
NTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxOTBDQUMxODlE
ODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUExODlEODJGNjAwMEFFNUYw
IC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovOyB9OwogCQkwRjE5MENBRDE4OUQ4MkY2
MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUIxODlEODJGNjAwMEFFNUYwIC8qIFBy
b2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjFERDg0QTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxREQ4NDkx
OEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjkzLDggKzI5NSw2IEBACiAJCTBGM0IzQTJDMTU0
NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlk
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYzQjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1
NiAvKiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzRDBCQkMxOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8q
IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovOyB9OwotCQkwRjNEMEJCRDE5NEE0MTQzMDBG
QzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi87IH07
CiAJCTBGM0UwMUFCMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNFMDFBOTE5RDM1
M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAv
KiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01ODgsNiArNTg4
LDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2
RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAv
KiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJ
CTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAv
KiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFBRjAwQzgwRTFFIC8qIERGR0Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLzsgfTsK
KwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNF
NDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNTFCNjE4
QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwICovOyB9OworCQkw
RkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA2MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDBEMUI2MThCNjYw
MEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVy
dHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBFMUUgLyogUHJv
cGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgxQUQy
MTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERG
R0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFMjExNDE3MkNF
MzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5Miw2ICs3MDAsOCBAQAogCQkwRkYwRjE5RTE2Qjcy
QTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5NkIgLyogREZHRWRnZS5jcHAg
Ki87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCAqLzsg
fTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIy
MTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGMkNENUIxQjYxQTRGODAw
NDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBE
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5
NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MkYx
NThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4RUJENTgwMDRDQjlGRiAvKiBV
RGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxl
ci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2Rl
LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjcz
NDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovOyB9OwpAQCAtMTQxMSw4ICsx
NDIxLDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3MTFC
OThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1h
cERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMxOEM1NTNGRTAwRjEwNjI2IC8q
IFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8qIFNwaWxsUmVnaXN0ZXJzTW9k
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE3
ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1M0Y3MTc5NzI2
MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKLQkJQTc4ODUz
RkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1M0Y4MTc5NzI2MjkwMDE0
NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVy
LmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFs
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4
QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovOyB9OwogCQlB
NzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZFMTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg3OSw2ICsxODg3LDggQEAKIAkJMEYx
M0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyog
REZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZEdyYXBoLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8q
IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBwYXRo
ID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FB
MTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBw
YXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRp
c29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVySmV0
dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8q
IEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA2NCw4ICsyMDc0LDYgQEAKIAkJ
MEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
M0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJp
bmcuY3BwOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51
bWJlcmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVQb3N0TnVt
YmVyaW5nLmg7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVy
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzcwLDYgKzIzNzgsMTQgQEAKIAkJMEZEMkM5
MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBk
ZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIx
NDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDAwMUI2MThBQUYw
MEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNF
NDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQz
RTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFF
IC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1MyAvKiBERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rv
bWluYXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb21pbmF0b3JzLmg7IHBh
dGggPSBkZmcvREZHRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjQ2OSw2ICsyNDg1LDggQEAKIAkJMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
T1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0RjcxQUMzNUI0NDAw
RTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0
YWJsZUFsbG9jYXRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4
ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwOyBwYXRoID0gZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRp
R2V0QnlPZmZzZXREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmg7IHBhdGggPSBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZG
IC8qIERpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNh
c3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRp
c2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVRGlz
ODZEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzM0MTU4RUJEOTQwMDRD
QjlGRiAvKiB1ZGlzODZfZGVjb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9
IHVkaXM4Nl9kZWNvZGUuYzsgcGF0aCA9IGRpc2Fzc2VtYmxlci91ZGlzODYvdWRpczg2X2RlY29k
ZS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzIxMyw4ICszMjMxLDYgQEAKIAkJ
QTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODUwN0Q1
MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4ODUzRjcx
Nzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwOyBw
YXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3OEE5NzZEMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmFpbGVkRmluYWxpemVyLmg7IHBh
dGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3OEE5NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmluYWxpemVyLmNwcDsgcGF0aCA9IGRm
Zy9ERkdGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU1MSw4
ICs0NTY3LDYgQEAKIAkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5Lmgg
Ki8sCiAJCQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywKIAkJ
CQlBN0E4QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICovLAotCQkJCUE3ODg1
M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLywKLQkJ
CQlBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICov
LAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAq
LywKIAkJCQlCQzExNjY3QTBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oICov
LAogCQkJCUExQjlFMjMzMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3IuY3BwICovLApA
QCAtNDk1NSw2ICs0OTY5LDEwIEBACiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAw
Q0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYw
MDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAw
QzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAg
Ki8sCisJCQkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovLAorCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NF
MUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywK
IAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAog
CQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlB
NzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywKQEAgLTUxMTQsNiAr
NTEzMiw4IEBACiAJCQkJMEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9k
ZS5oICovLAogCQkJCTBGOEYxNDMxMUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlLmNwcCAqLywKIAkJCQkwRjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGlu
dFJlbW92YWxQaGFzZS5oICovLAorCQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdN
dWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8sCisJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4
IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAw
NkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQx
MDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVB
MkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLApAQCAtNTM4NSw4ICs1NDA1LDYg
QEAKIAkJCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkw
RjZGQzc0RTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJ
MEY2RkM3NEYxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkw
RjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8s
Ci0JCQkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2su
aCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAog
CQkJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwICovLAogCQkJCTBGQzcxMkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suaCAqLywKQEAgLTU0MTksNiArNTQzNywxMCBAQAogCQkJCTBGQjU0NjdD
MTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywK
IAkJCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZS5oICovLAogCQkJCTE0Q0E5NThDMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5oICovLAorCQkJCTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgw
RTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFC
NjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5
NjlBMDc5NDBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBF
RDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4
OTEwIC8qIE9wZXJhbmRzLmggKi8sCkBAIC01NDMwLDYgKzU0NTIsOCBAQAogCQkJCTBGOUZDOEMw
MTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5
ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJ
MEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJ
CTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJ
CQkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJ
CQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJ
CTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5
M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKQEAgLTU5NDUs
NiArNTk2OSw3IEBACiAJCQkJQzI5ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENC
OUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNF
NDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRn
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjAwLDYgKzYyMjUsNyBAQAogCQkJCUE1MzI0Mzk4MTg1
NkE0ODkwMDJFRDY5MiAvKiBDb21iaW5lZERvbWFpbnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0Mzg4MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0
b3JGcm9udGVuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFB
NEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTUzMjQzOEMxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3Rv
Y29sT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZE
IC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjA5LDcgKzYy
MzUsNiBAQAogCQkJCUE3QThBRjNCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUw
MDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3
QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAt
NjIyMiw2ICs2MjQ3LDcgQEAKIAkJCQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNj
cmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4
OTYxOSAvKiBKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVF
QyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYx
OEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21w
aWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDM4LDcgKzY0NjQs
NiBAQAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGlj
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0
QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QzAwOENFNzE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjUyMiw5ICs2NTQ3LDExIEBACiAJCQkJMkFB
RDk2NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExK
U0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVD
MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFD
N0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0
MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8q
IE1hdGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4
MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3
MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NjAyLDYgKzY2MjksNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1
Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMw
NjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZC
QjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYz
QzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFG
MDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03Mzk3LDYgKzc0MjUsNyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAv
KiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVy
dHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFD
NzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4
QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc0MDcsNiArNzQzNiw3IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8q
IEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJC
NzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMx
QjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExP
U1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAw
QkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0NTgsNiArNzQ4OCw3
IEBACiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JB
Z2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0
MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzQ2OSw3ICs3NTAwLDYgQEAK
IAkJCQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3Rz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3
MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4
NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50
ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0
IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0ODYsNiArNzUx
Niw3IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMz
Ml82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMTU4N0Q2RDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVy
YXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAv
KiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1NDEsNyArNzU3Miw2
IEBACiAJCQkJQTUwM0ZBMUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkExRDE4OEUwRkIwMDAxMTBGMTQgLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Mjgw
ODc1MTA3RUMxM0UwMDEzRTdCMiAvKiBKU0xvY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYz
RDBCQkMxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQzI1RDcwOUIxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3NDExN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFw
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjk1MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01h
cEl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzczNyw2ICs3NzY3LDcgQEAKIAkJCQlC
Q0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwMTNDQThC
MUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQz
ODE1QUU0QTFDMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0NGMEQwQzBFRjBCOEE1MDA0MTNDOEYgLyogU3RydWN0dXJl
U3R1YkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzQ2LDYgKzc3NzcsNyBAQAogCQkJCTcw
NUI0MUIxMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8qIERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkEy
QzE3QjE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDAsNyArMzQwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSAwOwog
ICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gMDsKICAgICAgICAgICAgIFBvbHltb3JwaGljR2V0
QnlJZExpc3QqIGxpc3QgPSAwOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHN0
dWJJbmZvLmFjY2Vzc1R5cGUpIHsKQEAgLTM3MCwxMSArMzY5LDYgQEAgdm9pZCBDb2RlQmxvY2s6
OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAicHJvdG90eXBlU3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNo
YWluLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChsaXN0KSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsiLCBs
aXN0KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIHsKQEAgLTM4Miw5ICszNzYsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRC
eUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIp
OwogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7CiAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGxpc3QtPmF0KGkpLnN0cnVjdHVyZSgpLCBp
ZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5jaGFpbigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghbGlzdC0+YXQoaSkuY29uZGl0aW9uU2V0KCkuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgbGlzdC0+YXQoaSkuY2hhaW4oKSwgaWRl
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KGxpc3QtPmF0KGkpLmNvbmRp
dGlvblNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnRmKCIpIik7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDU2LDEwICs0NTAsOCBAQCB2
b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAg
ZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5w
cmV2aW91c1N0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwogICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCAiKTsKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBzdHVi
SW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAg
ICAgICAgICAgIGlmIChTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgi
LCAiKTsKLSAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnUucHV0QnlJ
ZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KQorICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgIiwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewogICAg
ICAgICAgICAgICAgIG91dC5wcmludGYoImxpc3QgPSBbIik7CkBAIC00ODMsMTAgKzQ3NSw4IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgICAg
ICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJldiIsIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUo
KSwgaWRlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0IiwgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXNz
LmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgYWNjZXNzLmNoYWlu
KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYWNjZXNzLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgYWNjZXNzLmNvbmRpdGlvblNldCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoInVua25vd24iKTsKICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ6OmZpcgogICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAKICAgICBtX2NvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgcmVtb3ZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBs
ZXhHZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUg
YSBzdHJ1Y3R1cmUgdGhhdAogICAgIC8vIGhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpIGJ1
dCBmb3Igd2hpY2ggd2UgZG9uJ3QKQEAgLTQwLDMyICszOSwzNCBAQCBDb21wbGV4R2V0U3RhdHVz
IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgLy8gdGhhdCwgeWV0LgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAKKyAgICBBU1NF
UlQoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSk7CisgICAgCiAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUt
PnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB0
YWtlc1Nsb3dQYXRoKCk7CiAgICAgCiAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CiAgICAg
cmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAgCi0gICAgaWYgKGNoYWluICYmIGNoYWlu
Q291bnQpIHsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGhlYWRTdHJ1Y3R1cmUs
IGNoYWluLCBjaGFpbkNvdW50KSk7CisgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAg
Ci0gICAgICAgIGlmICghcmVzdWx0Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICBp
ZiAoIXJlc3VsdC5tX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAg
ICAgICAgICAgIHJldHVybiBza2lwKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGVhZFN0cnVj
dHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotICAgICAgICAgICAg
fHwgcmVzdWx0Lm1fY2hhaW4tPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTbG90QmFzZXMgPQorICAgICAgICAgICAgcmVz
dWx0Lm1fY29uZGl0aW9uU2V0Lm51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29u
ZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mU2xvdEJh
c2VzIDw9IDEpOworICAgICAgICBpZiAoIW51bWJlck9mU2xvdEJhc2VzKSB7CisgICAgICAgICAg
ICAvLyBDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBtaXNzZXMuIFRoYXQncyBhIGJ1bW1lci4K
KyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMDUyCiAgICAgICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOworICAgICAg
ICB9CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2UgPSByZXN1bHQubV9jb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKTsKKyAgICAgICAgQVNTRVJUKGJhc2Uua2luZCgp
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CiAgICAgICAgIAotICAgICAgICBKU09i
amVjdCogY3VycmVudE9iamVjdCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgp
OwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSByZXN1bHQubV9jaGFpbi0+
bGFzdCgpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBj
dXJyZW50T2JqZWN0KTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJl
bnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwotICAgIH0KKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gYmFzZS5vZmZzZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAg
CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNldCkpCiAgICAgICAgIHJldHVy
biB0YWtlc1Nsb3dQYXRoKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29tcGxleEdldFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDggKzI2LDggQEAKICNpZm5kZWYgQ29tcGxleEdldFN0YXR1c19oCiAjZGVmaW5lIENvbXBs
ZXhHZXRTdGF0dXNfaAogCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
ODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgQ29tcGxleEdldFN0YXR1cygpCiAgICAgICAgIDog
bV9raW5kKFNob3VsZFNraXApCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKLSAg
ICAgICAgLCBtX2F0dHJpYnV0ZXMoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTk3
LDIxICs5NiwxNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBDb21wbGV4R2V0
U3RhdHVzIGNvbXB1dGVGb3IoCi0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlKiBoZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVu
c2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgICAgICBTdHJ1
Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlczsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4o
KSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9u
U2V0OyB9CiAgICAgCiBwcml2YXRlOgogICAgIEtpbmQgbV9raW5kOwogICAgIFByb3BlcnR5T2Zm
c2V0IG1fb2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKLSAgICBKU1ZhbHVlIG1f
c3BlY2lmaWNWYWx1ZTsKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFp
bjsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJl
Q2hlY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
LXsKLSAgICBvdXQucHJpbnQoCi0gICAgICAgICIoQ2hlY2sgaWYgIiwgaW5Db250ZXh0KEpTVmFs
dWUobV9jb25zdGFudCksIGNvbnRleHQpLCAiIGhhcyBzdHJ1Y3R1cmUgIiwKLSAgICAgICAgcG9p
bnRlckR1bXBJbkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKSIpOwotfQotCi12b2lk
IENvbnN0YW50U3RydWN0dXJlQ2hlY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsK
LSAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Ci19Ci0KLVN0cnVjdHVyZSogc3RydWN0
dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvciwgSlNDZWxs
KiBjb25zdGFudCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgIGlmICh2ZWN0b3JbaV0uY29uc3RhbnQoKSA9PSBjb25zdGFudCkKLSAgICAg
ICAgICAgIHJldHVybiB2ZWN0b3JbaV0uc3RydWN0dXJlKCk7Ci0gICAgfQotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYgYSwgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgYikKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBhLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1
cmUqIG90aGVyU3RydWN0dXJlID0gc3RydWN0dXJlRm9yKGIsIGFbaV0uY29uc3RhbnQoKSk7Ci0g
ICAgICAgIGlmICghb3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGFbaV0uc3RydWN0dXJlKCkgIT0gb3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIG1lcmdlSW50
byhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImIHRhcmdldCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzb3Vy
Y2Uuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmVGb3IodGFyZ2V0LCBzb3Vy
Y2VbaV0uY29uc3RhbnQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFyZ2V0
LmFwcGVuZChzb3VyY2VbaV0pOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50
U3RydWN0dXJlQ2hlY2suaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0jZGVmaW5lIENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tfaAotCi0jaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKLSNpbmNsdWRlICJKU0Nl
bGwuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBD
b25zdGFudFN0cnVjdHVyZUNoZWNrIHsKLXB1YmxpYzoKLSAgICBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrKCkKLSAgICAgICAgOiBtX2NvbnN0YW50KG51bGxwdHIpCi0gICAgICAgICwgbV9zdHJ1Y3R1
cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2soSlNDZWxsKiBjb25zdGFudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogbV9j
b25zdGFudChjb25zdGFudCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0gICAg
ewotICAgICAgICBBU1NFUlQoISFtX2NvbnN0YW50ID09ICEhbV9zdHJ1Y3R1cmUpOwotICAgIH0K
LSAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbnN0YW50OyB9
Ci0gICAgCi0gICAgSlNDZWxsKiBjb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnQ7
IH0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJl
OyB9Ci0gICAgCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXBy
aXZhdGU6Ci0gICAgSlNDZWxsKiBtX2NvbnN0YW50OwotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1
cmU7Ci19OwotCi10eXBlZGVmIFZlY3RvcjxDb25zdGFudFN0cnVjdHVyZUNoZWNrLCAyPiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yOwotCi1TdHJ1Y3R1cmUqIHN0cnVjdHVyZUZvcihjb25z
dCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIEpTQ2VsbCogY29uc3RhbnQp
OwotYm9vbCBhcmVDb21wYXRpYmxlKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
LCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7Ci12b2lkIG1lcmdlSW50byhj
b25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIHRhcmdldCk7Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNjksOCArMTY5LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBs
aXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpj
b21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlz
dC0+YXQobGlzdEluZGV4KS5jaGFpbigpLAotICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJ
bmRleCkuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgbGlz
dC0+YXQobGlzdEluZGV4KS5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAg
IGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKQEAgLTIwNiw4ICsyMDUsOCBAQCBH
ZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJp
YW50KAotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxl
eEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAotICAgICAgICAg
ICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCisg
ICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksIFdURjo6
bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMjMgKzM0LDE5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVz
PiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExp
bmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAgLCBtX2Fs
dGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkK
ICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RGOjptb3Zl
KGNhbGxMaW5rU3RhdHVzKSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKICAg
ICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFj
aGFpbik7Ci0gICAgfQotICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAg
ICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3RhbnRDaGVja3MpOworICAgICAgICBBU1NF
UlQoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CiAgICAgfQogfQotCisgICAgICAgICAgICAgICAg
ICAgICAKIEdldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlhbnQoKSB7IH0KIAogR2V0QnlJZFZh
cmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKQEAgLTYy
LDggKzU4LDcgQEAgR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldAogR2V0
QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlh
bnQmIG90aGVyKQogewogICAgIG1fc3RydWN0dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7
Ci0gICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9h
bHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
ICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1
cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKTsKQEAgLTcyLDI4ICs2NywyNCBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6
Om9wZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZh
cmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRlcm5hdGVCYXNl
KQotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNl
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7
Ci19Ci0KIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRW
YXJpYW50JiBvdGhlcikKIHsKLSAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90aGVyLm1fYWx0
ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX29mZnNldCAhPSBv
dGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2NhbGxMaW5r
U3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWFyZUNvbXBhdGlibGUobV9jb25zdGFudENoZWNrcywgb3RoZXIubV9jb25zdGFu
dENoZWNrcykpCisKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1f
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgaWYg
KCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0
ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAg
ICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9u
U2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgIAog
ICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKICAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTExMiwxMCArMTAzLDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
IlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsK
LSAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRl
QmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsK
KyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCkpOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBv
dXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjcsOSArMjcsOCBAQAogI2RlZmluZSBHZXRCeUlkVmFyaWFudF9o
CiAKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0
dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIK
IApAQCAtNDMsNyArNDIsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiBwdWJsaWM6CiAgICAg
R2V0QnlJZFZhcmlhbnQoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
ID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQs
Ci0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwK
KyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQoKSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVz
PiBjYWxsTGlua1N0YXR1cyA9IG51bGxwdHIpOwogICAgIAogICAgIH5HZXRCeUlkVmFyaWFudCgp
OwpAQCAtNTUsOSArNTQsMTAgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudENoZWNrczsgfQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3Qg
eyByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOyB9Ci0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1
cmUoKSBjb25zdDsKKworICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBhIGNvbmRpdGlvbiBzZXQgbWVh
bnMgdGhhdCB0aGlzIGlzIGEgcHJvdG90eXBlIGxvYWQuCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9u
U2V0OyB9CisgICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAgICAgCkBAIC03MCw4ICs3MCw3IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdldEJ5SWRTdGF0dXM7CiAgICAgCiAgICAgU3Ry
dWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0
b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOworICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5
T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9j
YWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2
b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAg
ICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBvdXQucHJpbnQoIjwiLCBpbkNvbnRleHQoSlNWYWx1ZShtX29iamVjdCksIGNvbnRl
eHQpLCAiOiAiLCBpbkNvbnRleHQobV9jb25kaXRpb24sIGNvbnRleHQpLCAiPiIpOworfQorCit2
b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24udmFs
aWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBtX29iamVjdCk7
Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiBpc1N0aWxsVmFsaWQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQo
c3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShtX29i
amVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpp
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9y
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIG1fb2JqZWN0LCBlZmZvcnQpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGUoc3RydWN0dXJlLCBtX29iamVj
dCwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFi
bGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7
CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVy
biBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFIZWFwOjppc01h
cmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4g
bV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2Vk
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0
cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52YWxpZGF0ZVJlZmVyZW5j
ZXModHJhY2tlZCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjphdHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigpIGNvbnN0
Cit7CisgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0gY29uZGl0aW9uKCkuYXR0ZW1wdFRv
TWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0KCkpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICByZXR1cm4g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24ob2JqZWN0KCksIHJlc3VsdCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2Rl
ZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
I2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24oKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUgdG9rZW4pCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRp
dGlvbih0b2tlbikKKyAgICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24p
CisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRp
dGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBv
ZmZzZXQsIGF0dHJpYnV0ZXMpOyAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
cykKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIob2Jq
ZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorCisgICAgLy8gTk9URTogVGhl
IHByb3RvdHlwZSBpcyB0aGUgc3RvcmVkUHJvdG90eXBlLCBub3QgdGhlIHByb3RvdHlwZUZvckxv
b2t1cC4KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRC
YXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAg
IHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJh
cnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQor
ICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4g
YWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0
aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAg
ICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNl
dHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2Vu
Y2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2Jq
ZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3du
ZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0
LCB1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCog
b2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9v
YmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29u
ZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmpl
Y3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93
bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1
aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlv
bjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkua2luZCgpOyB9CisgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgp
OyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNP
ZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNv
bmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5zaWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0
IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJpYnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAg
ICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3Rv
dHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRp
dGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSBy
ZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgp
OyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhh
c2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkgKyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIu
bV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29uZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9u
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJl
IGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlm
ZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJlbnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0
dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQor
ICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxl
bmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVy
YWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBz
cGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAgLy8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBm
b3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUK
KyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJl
bid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4KKyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmpl
Y3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRp
dHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3Rl
YWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYg
eW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1z
CisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2Fu
dCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJl
IHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAg
ICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJv
cGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZhbGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVx
dWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29u
c3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBu
ZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVu
IGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0
cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChT
dHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSBjb25zdDsKKworICAgIC8vIENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0
aWxsIGhvbGRzLiBNYXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0
IGFuZAorICAgIC8vIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlv
bi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiB0cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlv
biBzdGlsbCByZXF1aXJlcyBzb21lIHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRp
b24gdG8gY2hlY2tpbmcgdGhlCisgICAgLy8gc3RydWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVj
ayBpZiB0aGUgY29uZGl0aW9uIGhvbGRzIGJ5IHVzaW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisg
ICAgLy8gdXNlIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZh
bGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7Cisg
ICAgCisgICAgLy8gU2hvcnRoYW5kIGZvciBjb25kaXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0
dXJlKS4KKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25z
dDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSgpIGNvbnN0OworICAgIAorICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNl
IHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0
aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4K
KyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisg
ICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxp
dHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAg
Ym9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAg
ICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRp
b246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mg
c3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRy
YW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBp
c1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRp
b246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2Vz
KSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlv
bjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMp
IGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53
YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9Cisg
ICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1l
bnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUg
b2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGls
bExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBU
cmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCisgICAgYm9vbCBpc1ZhbGlkVmFsdWVGb3JQcmVz
ZW5jZShKU1ZhbHVlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlv
bigpLmlzVmFsaWRWYWx1ZUZvclByZXNlbmNlKHZhbHVlKTsKKyAgICB9CisKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBhdHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigp
IGNvbnN0OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0
eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBl
cXVhbCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsK
KyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlw
ZWRlZiBKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xp
c3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNv
bnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
IDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisg
ICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJv
cGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25kaXRp
b246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQo
KSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0
dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK3Vuc2lnbmVkIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRp
dGlvbjo6S2luZCBraW5kKSBjb25zdAoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkKKyAgICAgICAgICAgIHJlc3Vs
dCsrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZSkgPT0gMTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWduZWQgbnVtRm91bmQgPSAwOworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAg
ICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkg
eworICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOworICAgICAgICAgICAgbnVtRm91bmQr
KzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChudW1Gb3VuZCA9PSAxKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bWVyZ2VkV2l0aCgKKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwg
IW90aGVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKworICAgIFZlY3Rv
cjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gcmVzdWx0OworICAgIAorICAgIGlmICghaXNFbXB0
eSgpKQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKG1fZGF0YS0+dmVjdG9yKTsKKyAgICAK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBuZXdDb25kaXRpb24gOiBv
dGhlcikgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBleGlz
dGluZ0NvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgICAgICBpZiAobmV3Q29uZGl0aW9uID09
IGV4aXN0aW5nQ29uZGl0aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKCFuZXdDb25kaXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub25F
bXB0eShyZXN1bHQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1
Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7Cisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMp
IHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExp
dmUoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxp
ZCgpKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAg
ICAgb3V0LnByaW50KGxpc3REdW1wSW5Db250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7
CisgICAgb3V0LnByaW50KCJdIik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91
dCwgbnVsbHB0cik7Cit9CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNlOwor
CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvbigKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbktpbmQpCit7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCJDcmVhdGluZyBjb25kaXRpb24gIiwgY29uZGl0aW9uS2luZCwgIiBmb3Ig
IiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKSwgIlxuIik7CisKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiByZXN1bHQ7CisgICAgc3dpdGNoIChjb25kaXRpb25LaW5kKSB7CisgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zm
c2V0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAg
ICAgIHJlc3VsdCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSh2bSwgb3duZXIs
IG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXN1bHQg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSgKKyAgICAgICAgICAgIHZtLCBvd25l
ciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9iamVj
dCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246
OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICByZXN1bHQgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6YWJzZW5jZU9mU2V0dGVyKAorICAgICAgICAgICAgdm0sIG93bmVyLCBvYmplY3QsIHVp
ZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cisg
ICAgfQorCisgICAgaWYgKCFyZXN1bHQuc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBjcmVhdGUgY29uZGl0aW9uOiAiLCByZXN1bHQsICJc
biIpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICB9CisK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiTmV3IGNvbmRpdGlvbjogIiwgcmVz
dWx0LCAiXG4iKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitlbnVtIENvbmN1cnJlbmN5IHsK
KyAgICBNYWluVGhyZWFkLAorICAgIENvbmN1cnJlbnQKK307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zKAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsCisgICAg
Q29uY3VycmVuY3kgY29uY3VycmVuY3kgPSBNYWluVGhyZWFkKQoreworICAgIFZlY3RvcjxPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbj4gY29uZGl0aW9uczsKKyAgICAKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgc3Ry
dWN0dXJlOiAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUpLCAiXG4iKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSXQncyBhIHByb3h5LCBzbyBpbnZhbGlkLlxuIik7
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCk7CisgICAgICAgIAorICAgICAgICBp
ZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvdG90eXBlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJl
YWNoZWQgZW5kIHVwIHByb3RvdHlwZSBjaGFpbiBhcyBleHBlY3RlZCwgZG9uZS5cbiIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZGx5IHJlYWNoZWQgZW5kIG9m
IHByb3RvdHlwZSBjaGFpbiwgc28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7Cisg
ICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSByZXBlYXRlZGx5LCBpdCdz
IGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQgbm90IGJlCisgICAgICAgIC8vIHRyZWF0ZWQgYXMg
YSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewor
ICAgICAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IE1haW5UaHJlYWQpCisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgb2JqZWN0KTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDYW5ub3QgZmxhdHRlbiBkaWN0aW9uYXJ5IHdoZW4gbm90IG9u
IG1haW4gdGhyZWFkLCBzbyBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIWZ1bmN0b3IoY29uZGl0aW9ucywgb2JqZWN0KSkgeworICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiRnVuY3RvciBm
YWlsZWQsIGludmFsaWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
b2JqZWN0ID09IHByb3RvdHlwZSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiUmVhY2hlZCBkZXNpcmVkIHByb3RvdHlwZSwgZG9uZS5cbiIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgZGF0YUxvZygiUmV0dXJuaW5nIGNvbmRpdGlvbnM6ICIsIGxpc3REdW1wKGNvbmRp
dGlvbnMpLCAiXG4iKTsKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5v
bkVtcHR5KGNvbmRpdGlvbnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNz
KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdl
bmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwKKyAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsK
KyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2UpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKK30KKworT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNz
KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdl
bmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwKKyAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsK
KyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2VPZlNldHRlcik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVu
ZChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworfQorCitP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAg
ICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJv
dG90eXBlLAorICAgICAgICBbJl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNv
bmRpdGlvbnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJvb2wgeworICAgICAgICAgICAgUHJvcGVy
dHlDb25kaXRpb246OktpbmQga2luZCA9CisgICAgICAgICAgICAgICAgb2JqZWN0ID09IHByb3Rv
dHlwZSA/IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSA6IFByb3BlcnR5Q29uZGl0aW9uOjpB
YnNlbmNlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0KKyAg
ICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBr
aW5kKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBwcm90b3R5cGUsCisgICAgICAg
IFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmpl
Y3QqIG9iamVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlw
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24o
dm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9KTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlv
bnMoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsCisg
ICAgICAgIFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywg
SlNPYmplY3QqIG9iamVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiByZXN1bHQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBu
dWxscHRyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcik7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0sIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gK
KyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworLy8gQW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0
byByZXByZXNlbnQgdGhlIHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVl
ZCB0byBiZSBtZXQgZm9yIHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2Fu
IGhhdmUgdGhlIGZvbGxvd2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5
OiBUaGVyZSBhcmUgbm8gc3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisv
LyBJbnZhbGlkOiBUaGUgaGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6
IFRoZXJlIGFyZSBzb21lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUg
dmFsaWQuCisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0
UmVmKG5ldyBEYXRhKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9y
PE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZl
Y3Rvci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQoKTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAg
ICAgICByZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRhLT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Rh
dGE7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdpbigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0KKyAg
ICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVj
dCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQ
cm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNv
bmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICBi
b29sIGhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gSWYgdGhp
cyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1
YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNvbmRpdGlvbiBvbiB0aGUgcHJvdG90eXBl
IGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAor
ICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FT
U0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFByZXNlbmNlCisgICAgLy8gaW4gdGhlIHNl
dCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2VuY2UuCisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0
IHRvIGNyZWF0ZSBhIG5ldyBjb25kaXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0
aGUgb3RoZXIgb25lLiBUaGlzIHdpbGwKKyAgICAvLyBmYWlsIGlmIGFueSBvZiB0aGUgY29uZGl0
aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlci4gV2hlbiBpZiBmYWlscywgaXQg
cmV0dXJucworICAgIC8vIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBtZXJnZWRXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29u
c3Q7CisgICAgCisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdDsKKyAg
ICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIEhlbHBlcnMgZm9y
IHVzaW5nIHRoaXMgaW4gYSB1bmlvbi4KKyAgICB2b2lkKiByZWxlYXNlUmF3UG9pbnRlcigpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkp
OworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgYWRvcHRSYXdQ
b2ludGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0
aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZnJvbVJhd1BvaW50ZXIo
dm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihy
YXdQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIC8vIEludGVybmFsbHksIHRoaXMgcmVwcmVzZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9p
bnRlciB0byBhIERhdGEgdGhhdCBoYXMgYW4gZW1wdHkgdmVjdG9yLgorICAgIAorICAgIC8vIEZJ
WE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IGhhdmluZyBpdCBpbnRlcm5h
bGx5IHVzZSBhIHZlY3RvciB0aGF0IGp1c3QgaGFzCisgICAgLy8gdGhlIG5vbi11aWQgcG9ydGlv
biBvZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgYW5kIHRoZW4gcmVxdWlyaW5nIHRoYXQgdGhl
IGNhbGxlcnMgb2YgYWxsCisgICAgLy8gb2YgdGhlIEFQSXMgc3VwcGx5IHRoZSB1aWQuCisgICAg
CisgICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7Cisg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsK
KyAgICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1
cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90
eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc2MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUs
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWdu
ZWQgY2hhaW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKICAgICA6IG1fdHlwZSh0eXBlKQotICAg
ICwgbV9jaGFpbkNvdW50KGNoYWluQ291bnQpCiAgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIs
IHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKICAgICAsIG1f
c3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBtX2No
YWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKIH0KIAogR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRB
Y2Nlc3MoKQpAQCAtNzEsNyArNjksNyBAQCBib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhS
ZXBhdGNoQnVmCiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0
cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9jaGFpbiAm
JiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAgaWYgKCFtX2NvbmRpdGlvblNl
dC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHVi
Um91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAj
aW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtNTMsMTMgKzU0LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICBHZXRCeUlk
QWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291
bnQoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4s
IFN0cnVjdHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9IDAsIHVuc2lnbmVkIGNoYWlu
Q291bnQgPSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgfkdldEJ5SWRBY2Nlc3Mo
KTsKICAgICAKQEAgLTcyLDggKzcyLDcgQEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAKLSAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9
Ci0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW5Db3VudDsg
fQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5l
KiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtOTEsOSArOTAsOCBAQCBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7
Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsgLy8gRklYTUUg
d2hhdCBhYm91dCBiYXJyaWVycz8KICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJv
dXRpbmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgUHV0QnlJZEFjY2Vz
cyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgICAgICByZXN1bHQubV90eXBlID0gVHJh
bnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQu
bV9uZXdTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1
Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLmNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigKKyAgICAgICAgICAgIHN0
dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKICAgICAgICAgcmVz
dWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIApAQCAtNjQsNiArNjUsOSBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6
OmZyb21TdHJ1Y3R1CiAKIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVT
dGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1f
b2xkU3RydWN0dXJlLmdldCgpKSkKQEAgLTc0LDE1ICs3OCwxMSBAQCBib29sIFB1dEJ5SWRBY2Nl
c3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFNldHRlcjoKICAgICBjYXNlIEN1c3RvbVNldHRlcjoKICAgICAgICAgaWYgKCFIZWFwOjppc01h
cmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAko
cmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJP
cGNvZGUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90
LmgiCkBAIC01Myw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkK
ICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9N
QVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAg
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LAogICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAg
ICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBl
ID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIG9sZFN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93
bmVyLCBjaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1
LDggKzk1LDcgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisg
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAg
ICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAg
ICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0
LDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAg
ICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAg
ICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewot
ICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAg
ICAgICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQu
bV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0
aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAg
IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0g
ICAgICAgIHJldHVybiBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBj
aGFpbkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlz
Q3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRp
bmUoKSBjb25zdAogICAgIHsKQEAgLTE3OCw4ICsxNjQsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vz
c1R5cGUgbV90eXBlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJl
OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291
bnQ7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAg
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKwordm9pZCBQ
cm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29u
dGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5w
cmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0
LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBvZmZzZXQoKSwgIiB3
aXRoIGF0dHJpYnV0ZXMgIiwgYXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50
KCIgd2l0aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTVmFsdWUocHJvdG90eXBlKCkpLCBjb250
ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBv
dXQucHJpbnQoIiB3aXRoICIsIGluQ29udGV4dChyZXF1aXJlZFZhbHVlKCksIGNvbnRleHQpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7Cisg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJEZXRlcm1p
bmluZyB2YWxpZGl0eSBvZiAiLCAqdGhpcywgIiB3aXRoIHN0cnVjdHVyZSAiLCBwb2ludGVyRHVt
cChzdHJ1Y3R1cmUpLCAiIGFuZCBiYXNlICIsCisgICAgICAgICAgICBKU1ZhbHVlKGJhc2UpLCAi
IGFzc3VtaW5nIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50cyBhcmUgc2V0LlxuIik7CisgICAg
fQorICAgIAorICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgdW5zZXQuXG4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiSW52YWxpZCBiZWNhdXNlIGFjY2Vzc2VzIGFyZSBub3QgY2FjaGVhYmxlLlxuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsK
KyAgICBjYXNlIFByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVz
OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGN1cnJl
bnRPZmZzZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2Ugd2UgbmVlZCBvZmZzZXQsIGF0
dHJpYnV0ZXMgdG8gYmUgIiwgb2Zmc2V0KCksICIsICIsIGF0dHJpYnV0ZXMoKSwKKyAgICAgICAg
ICAgICAgICAgICAgIiBidXQgdGhleSBhcmUgIiwgY3VycmVudE9mZnNldCwgIiwgIiwgY3VycmVu
dEF0dHJpYnV0ZXMsICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJ
bnZhbGlkIGJlY2F1c2UgaXQncyBhIGRpY3Rpb25hcnkuXG4iKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIGlmIChjdXJy
ZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSB0aGUgcHJvcGVydHkgZXhp
c3RzIGF0IG9mZnNldDogIiwgY3VycmVudE9mZnNldCwgIlxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZU9iamVjdCgpICE9IHByb3RvdHlwZSgpKSB7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAg
ICJJbnZhbGlkIGJlY2F1c2UgdGhlIHByb3RvdHlwZSBpcyAiLCBzdHJ1Y3R1cmUtPnN0b3JlZFBy
b3RvdHlwZSgpLCAiIGV2ZW4gdGhvdWdoICIKKyAgICAgICAgICAgICAgICAgICAgIml0IHNob3Vs
ZCBoYXZlIGJlZW4gIiwgSlNWYWx1ZShwcm90b3R5cGUoKSksICJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6IHsK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSBpdCdz
IGEgZGljdGlvbmFyeS5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9
IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50QXR0cmlidXRlcyAmIChB
Y2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAg
ICAiSW52YWxpZCBiZWNhdXNlIHdlIGV4cGVjdGVkIG5vdCB0byBoYXZlIGEgc2V0dGVyLCBidXQg
d2UgaGF2ZSBvbmUgYXQgb2Zmc2V0ICIsCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
T2Zmc2V0LCAiIHdpdGggYXR0cmlidXRlcyAiLCBjdXJyZW50QXR0cmlidXRlcywgIlxuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVk
UHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90eXBlKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIklu
dmFsaWQgYmVjYXVzZSB0aGUgcHJvdG90eXBlIGlzICIsIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCksICIgZXZlbiB0aG91Z2ggIgorICAgICAgICAgICAgICAgICAgICAiaXQgc2hvdWxkIGhh
dmUgYmVlbiAiLCBKU1ZhbHVlKHByb3RvdHlwZSgpKSwgIlxuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAg
ICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJlKCkgIT0gc3RydWN0dXJlKSB7CisgICAg
ICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2
ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICAgICAvLyBvYmplY3Qu
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIGJhc2Ug
b3IgdGhlIGJhc2UgaGFzIHRoZSB3cm9uZyBzdHJ1Y3R1cmU6ICIsCisgICAgICAgICAgICAgICAg
ICAgIFJhd1BvaW50ZXIoYmFzZSksICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhp
cyBpcyBzb21ld2hhdCByYWN5LCBhbmQgbWF5YmUgbW9yZSByaXNreSB0aGFuIHdlIHdhbnQuCisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEK
KyAgICAgICAgCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIEpTVmFsdWUgY3VycmVudFZhbHVl
ID0gYmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRPZmZzZXQpOworICAgICAgICBpZiAoY3VycmVudFZh
bHVlICE9IHJlcXVpcmVkVmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNh
dXNlIHRoZSB2YWx1ZSBpcyAiLCBjdXJyZW50VmFsdWUsICIgYnV0IHdlIHJlcXVpcmUgIiwgcmVx
dWlyZWRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFi
c2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxW
YWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAg
aWYgKCFpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1
cmUsIGJhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDdXJyZW50bHkgd2Ug
YXNzdW1lIHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNhbiBjYXVzZSBhIHByb3BlcnR5IHRvIGFw
cGVhciwgYW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRvdyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVy
dHkgb24gdGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBhZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5k
CisgICAgLy8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZlY3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1
c2UgaW1wdXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIgc2V0dGVycy4KKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2Ug
RXF1aXZhbGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJl
R2V0T3duUHJvcGVydHlTbG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVu
VmFsaWQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZv
cnQpIGNvbnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRI
YXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBz
b21lIHZhcmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0cnVlLCB3aGljaAorICAgICAgICAvLyBp
bXBsaWVzIHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGtub3dz
IG9mIHRoZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAgICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmll
ZCB0aGF0IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFibGUgZGljdGlvbmFyeSwgd2hpY2ggbWVh
bnMgd2UKKyAgICAgICAgLy8gc2hvdWxkbid0IGhhdmUgYSBUT0NUT1UgcmFjZSBlaXRoZXIuCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAg
CisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAgICAgICAgc3dpdGNoIChlZmZvcnQpIHsK
KyAgICAgICAgY2FzZSBNYWtlTm9DaGFuZ2VzOgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJl
LT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRW5zdXJlV2F0Y2hhYmlsaXR5OgorICAgICAgICAgICAgc2V0
ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCgKKyAg
ICAgICAgICAgICAgICAqSGVhcDo6aGVhcChzdHJ1Y3R1cmUpLT52bSgpLCBvZmZzZXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghc2V0IHx8
ICFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVy
dHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0
Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0
KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBp
c1N0aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5W
YWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246Omlz
U3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgcHJvdG90eXBl
KCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRW
YWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKS5pc0NlbGwoKQorICAgICAgICAmJiAh
SGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0
aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQp
IGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNr
KHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAg
ICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25k
aXRpb246OmlzVmFsaWRWYWx1ZUZvckF0dHJpYnV0ZXMoSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKK3sKKyAgICBib29sIGF0dHJpYnV0ZXNDbGFpbUFjY2Vzc29yID0gISEoYXR0
cmlidXRlcyAmIEFjY2Vzc29yKTsKKyAgICBib29sIHZhbHVlQ2xhaW1zQWNjZXNzb3IgPSAhIWpz
RHluYW1pY0Nhc3Q8R2V0dGVyU2V0dGVyKj4odmFsdWUpOworICAgIHJldHVybiBhdHRyaWJ1dGVz
Q2xhaW1BY2Nlc3NvciA9PSB2YWx1ZUNsYWltc0FjY2Vzc29yOworfQorCitib29sIFByb3BlcnR5
Q29uZGl0aW9uOjppc1ZhbGlkVmFsdWVGb3JQcmVzZW5jZShKU1ZhbHVlIHZhbHVlKSBjb25zdAor
eworICAgIHJldHVybiBpc1ZhbGlkVmFsdWVGb3JBdHRyaWJ1dGVzKHZhbHVlLCBhdHRyaWJ1dGVz
KCkpOworfQorCitQcm9wZXJ0eUNvbmRpdGlvbiBQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0ZW1wdFRv
TWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAoIXN0
cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQoKSkpCisgICAgICAgIHJldHVybiBQcm9wZXJ0
eUNvbmRpdGlvbigpOworICAgIEpTVmFsdWUgdmFsdWUgPSBiYXNlLT5nZXREaXJlY3Qob2Zmc2V0
KCkpOworICAgIGlmICghaXNWYWxpZFZhbHVlRm9yUHJlc2VuY2UodmFsdWUpKQorICAgICAgICBy
ZXR1cm4gUHJvcGVydHlDb25kaXRpb24oKTsKKyAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0
QmFycmllcih1aWQoKSwgdmFsdWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlv
bikgeworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAg
IG91dC5wcmludCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2Vu
Y2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAg
ICBvdXQucHJpbnQoIkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25k
aXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvcGVy
dHlDb25kaXRpb25faAorI2RlZmluZSBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgUHJvcGVydHlDb25kaXRpb24gewor
cHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIFByZXNlbmNlLAorICAgICAgICBBYnNl
bmNlLAorICAgICAgICBBYnNlbmNlT2ZTZXR0ZXIsCisgICAgICAgIEVxdWl2YWxlbmNlIC8vIEFu
IGFkYXB0aXZlIHdhdGNocG9pbnQgb24gdGhpcyB3aWxsIGJlIGEgcGFpciBvZiB3YXRjaHBvaW50
cywgYW5kIHdoZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9ucywgd2Ugd2lsbCBzZXQgdGhlIHJl
cGxhY2VtZW50IHdhdGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1Y3R1cmUuCisgICAgfTsKKyAgICAK
KyAgICBQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV91aWQobnVsbHB0cikKKyAgICAg
ICAgLCBtX2tpbmQoUHJlc2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVv
Zih1KSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1f
a2luZChBYnNlbmNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2VXaXRob3V0
QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IFByZXNlbmNlOworICAgICAgICByZXN1bHQudS5wcmVzZW5jZS5vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRp
b24gcHJlc2VuY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0
ZXMpOworICAgIH0KKworICAgIC8vIE5PVEU6IFRoZSBwcm90b3R5cGUgaXMgdGhlIHN0b3JlZFBy
b3RvdHlwZSBub3QgdGhlIHByb3RvdHlwZUZvckxvb2t1cC4KKyAgICBzdGF0aWMgUHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpT
T2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IEFic2VuY2U7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBl
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVy
dHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
aWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAg
ICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhv
dXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAg
ICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBYnNlbmNlT2ZT
ZXR0ZXI7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7
CisgICAgICAgIHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3Rv
dHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFs
ZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAg
ICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFcXVpdmFs
ZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuZXF1aXZhbGVuY2UudmFsdWUgPSBKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkgJiYgb3duZXIpCisgICAgICAgICAgICB2bS5o
ZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhv
dXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAg
IAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wg
aGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7
IH07CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldDsKKyAg
ICB9CisgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBt
X2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIHUu
cHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5cGUo
KSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQg
PT0gQWJzZW5jZU9mU2V0dGVyKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHUu
YWJzZW5jZS5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9Cisg
ICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCho
YXNSZXF1aXJlZFZhbHVlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuZXF1
aXZhbGVuY2UudmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhh
c2gobV91aWQpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXN1bHQg
Kz0gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5jZS5h
dHRyaWJ1dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAg
ICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQ
dHJIYXNoPEpTT2JqZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBFbmNvZGVkSlNWYWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldCA9
PSBvdGhlci51LnByZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2VuY2Uu
YXR0cmlidXRlcyA9PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNhc2Ug
QWJzZW5jZToKKyAgICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXR1
cm4gdS5hYnNlbmNlLnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOworICAg
ICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2Uu
dmFsdWUgPT0gb3RoZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9CisgICAg
CisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRp
Y2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMuIElmCisgICAgLy8gZmFsc2Ug
aXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxp
Y3QgLSBmb3IgZXhhbXBsZSBpZiB0aGVyZSBpcworICAgIC8vIGEgUHJlc2VuY2UgYW5kIGFuIEVx
dWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBnZW5lcmFs
IG9mIHRoZSB0d28KKyAgICAvLyB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUg
bW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UKKyAg
ICAvLyBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhl
IHNhbWUgdWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlkCisgICAgLy8gY29uZGl0aW9ucyBhcmVu
J3QgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChj
b25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
ISp0aGlzIHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuICp0aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpOworICAgIH0KKyAgICAK
KyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUg
cHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9
IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFu
IGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisg
ICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgor
ICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1
cmUqKSBjb25zdDsKKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBpcyBzdGls
bCB2YWxpZCByaWdodCBub3cgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIHN0cnVjdHVyZS4KKyAg
ICAvLyBNYXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZCBz
dHJ1Y3R1cmUgYWxvbmUgZG9uJ3QgZ3VhcmFudGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbi4gVGhp
cyBoYXBwZW5zIGZvciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3QgdGhhdCBtYXkg
aGF2ZSBpbXB1cmUKKyAgICAvLyBwcm9wZXJ0aWVzLiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBzdXBw
bGllZCwgdGhlbiBhICJ0cnVlIiByZXR1cm4gaW5kaWNhdGVzIHRoYXQgY2hlY2tpbmcgaWYKKyAg
ICAvLyBhbiBvYmplY3QgaGFzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgZ3VhcmFudGVlcyB0aGUgY29u
ZGl0aW9uIHN0aWxsIGhvbGRzLiBJZiBhbiBvYmplY3QgaXMKKyAgICAvLyBzdXBwbGllZCwgdGhl
biB5b3UgbWF5IG5lZWQgdG8gdXNlIHNvbWUgb3RoZXIgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVj
dCB0byBndWFyYW50ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uIGluIGFkZGl0aW9uIHRvIHRoZSBz
dHJ1Y3R1cmUgY2hlY2suCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNPYmpl
Y3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2VzLCB0
aGUgY29uZGl0aW9uIGlzIG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNoYWJs
ZSBieSBlbmFibGluZyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3IgZXhh
bXBsZSwgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNvbWUK
KyAgICAvLyBhY2Nlc3MgaXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVjdHVy
ZS4gVGhpcyBpcyBtYWlubHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5IHBy
b3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBpdCdz
IGFsd2F5cyBzYWZlIHRvCisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0IHRo
aXMgaXMgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmlsaXR5
RWZmb3J0IHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhhdCB3
ZSBkb24ndCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAgLy8g
b2JqZWN0LCBhbmQgaW1wbGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0byBi
ZSB3YXRjaGFibGUgdGhlbiB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJsZS4g
VGhpcyBpcyBtYW5kYXRvcnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBpcyBh
bHNvIHNvbWV3aGF0CisgICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGluZyB3
aGV0aGVyIHRvIHdhdGNoIGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgorICAg
ICAgICAvLyBub3QgZnJvbSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBzZWUg
aWYgd2Ugc2hvdWxkIGFkYXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5vdCBi
ZWluZyBpbml0aWFsaXplZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRvbid0
IGtub3cgZW5vdWdoCisgICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8gd2F0
Y2ggLS0gYXMgaW4sIHRoZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAgICAg
ICAvLyBzdGFiaWxpemVkIHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBjb25k
aXRpb24gd2lsbCBob2xkIGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhvbGQg
Zm9yIGEgd2hpbGUgYWxyZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAgCisg
ICAgICAgIC8vIERvIHdoYXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5IGNh
biBiZSB3YXRjaGVkLCBpZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNlcnZh
YmxlIGVmZmVjdC4gRm9yIG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3VyZSB0
aGF0IGEgcHJvcGVydHkKKyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBlbmFi
bGVkIGlmIGl0IGhhZG4ndCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlzCisg
ICAgICAgIC8vIGZyb20gSklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcgd2F0
Y2hwb2ludHMgaXMgbm90IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxpdHkK
KyAgICB9OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFu
ZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAg
Ly8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJv
cGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVs
bHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9y
Y2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJl
KiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9D
aGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50bHks
IHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAgcmV0
dXJuICEhKnRoaXM7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50
V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBtX2tp
bmQgPT0gRXF1aXZhbGVuY2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNT
dGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25z
dCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZh
bHVlRm9yQXR0cmlidXRlcyhKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKwor
ICAgIGJvb2wgaXNWYWxpZFZhbHVlRm9yUHJlc2VuY2UoSlNWYWx1ZSkgY29uc3Q7CisKKyAgICBQ
cm9wZXJ0eUNvbmRpdGlvbiBhdHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcihK
U09iamVjdCogYmFzZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdo
ZW5WYWxpZChTdHJ1Y3R1cmUqLCBXYXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAg
IHN0cnVjdCB7CisgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFi
c2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZTsKKyAgICAgICAgfSBlcXVpdmFsZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVy
dHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoCisgICAgICAgIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpT
Qzo6UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5
Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTkwLDE5ICs5MCwyMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
cm9tCiAgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNv
ZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5n
ZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVj
dHVyZUNoYWluLmdldCgpOwotICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChj
aGFpbik7CiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCi0gICAgUmVm
UHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGludGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWlu
KQotICAgICAgICBpbnRlbmRlZENoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4ocHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBjaGFpbikpOworICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5v
cGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwp
CisgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUo
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lKSkgeworICAgICAgICBj
b25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlT
ZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52
bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBpbnRlbmRlZENo
YWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogfQogCiBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsxNjgsMTQgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAK
ICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAg
ICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbikgewotICAgICAg
ICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0g
ICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CisgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICBz
dHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKICAg
ICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0
KCksCi0gICAgICAgICAgICAgICAgY2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTIxOSwxNSArMjIwLDExIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgICAgIGlmIChh
Y2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5l
dyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmls
ZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4oKSkpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNoYWluLT5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9u
U2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3Vy
ZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNs
b3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6
dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBh
Y2Nlc3MubmV3U3RydWN0dXJlKCksIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAg
ICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIApAQCAtMjM1LDcgKzIzMiw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1
cmUsIGFjY2Vzcy5jaGFpbigpLCBhY2Nlc3MuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2lu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lw
OgpAQCAtMjUzLDcgKzI1MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJs
b2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0
U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhH
ZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6Om1v
dmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTM2OCwyMiArMzY1LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcigKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwog
ICAgIAotICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICAgICAgaWYg
KCFpc0RpcmVjdCkgewotICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAg
ICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5
IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KLSAgICAgICAgICAgIGlmIChjaGFpbi0+bWF5SW50
ZXJjZXB0U3RvcmVUbyh1aWQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5
cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXplZCAoaS5lLiB0aGVyZSBhcmUgcHJveGllcyBv
ciBkaWN0aW9uYXJpZXMpCi0gICAgICAgICAgICAvLyB0aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9u
YXJ5IGNhc2Ugd291bGQgb25seSBoYXBwZW4gaWYgdGhpcyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVu
Ci0gICAgICAgICAgICAvLyB1c2VkIGluIGFuIG9wdGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlv
bi4gQW5kIHJlYWxseSB0aGUgb25seSByZWFzb24gd2h5IHdlIHdvdWxkCi0gICAgICAgICAgICAv
LyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJlYWxseSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBv
cHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgotICAgICAgICAgICAgLy8gZGljdGlvbmFyaWVz
IGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IHRob3NlIG9iamVjdHMgd2VyZSBu
ZXZlciB1c2VkIGFzCi0gICAgICAgICAgICAvLyBwcm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHBy
b3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YK
LSAgICAgICAgICAgIC8vIHRoZSBvdGhlciBjaGVja3MgYmVsb3cgd2lsbCBmYWlsLgotICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpIHx8ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkp
CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT52
bSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQogICAgIApAQCAtMzk0LDcgKzM4MCw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgQVNTRVJUKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVz
dWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWluLmdldCgpLCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQpKTsKICAgICAgICAgaWYgKCFkaWRBcHBlbmQpCiAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQm
IFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKICAg
ICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOwogICAgIG1fbmV3U3RydWN0
dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVy
Lm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5h
dGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAg
bV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1
cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtT
dGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTY0LDI5ICs2MywyNiBAQCBQdXRC
eUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1
dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1f
a2luZCA9IFRyYW5zaXRpb247CiAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0
dXJlOwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAo
c3RydWN0dXJlQ2hhaW4pCi0gICAgICAgIHN0cnVjdHVyZUNoYWluLT5nYXRoZXJDaGVja3MocmVz
dWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRp
dGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0
dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cykKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1f
a2luZCA9IFNldHRlcjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0g
ICAgaWYgKGNoYWluKSB7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29u
c3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRl
cm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgfQorICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNv
bmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1f
Y2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpOwogICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC0xMzQsMTggKzEzMCw2IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2Fs
bHMoKSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVT
ZXQgUHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAotewotICAgIEFTU0VSVChr
aW5kKCkgPT0gU2V0dGVyKTsKLSAgICAKLSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZSgpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
c3RydWN0dXJlRm9yKG1fY29uc3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKLSAgICByZXR1cm4gc3RydWN0dXJlOwotfQotCiBib29s
IFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3Ro
ZXIpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQpAQCAtMTU1LDggKzEz
OSw4IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICBjYXNl
IFJlcGxhY2U6CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAgICAgICAgIGNhc2Ug
UmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRDaGVja3MuaXNFbXB0eSgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbnN0YW50Q2hlY2tzLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5Niw2ICsxODAsNyBAQCBib29sIFB1dEJ5
SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zCiAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJl
cGxhY2UubV9vZmZzZXQpOwogICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkp
OwogICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJU
KHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKICAgICAKICAgICAvLyBUaGlzIHNv
cnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGlj
aCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKICAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1
cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhp
cyBkb2Vzbid0CkBAIC0yMzIsMTUgKzIxNywxMyBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1w
SW5Db250ZXh0KFByaW50CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNp
dGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAg
ICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAi
LCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNv
bnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6CiAgICAg
ICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0
dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0KGNv
bnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIpOwotICAgICAgICBpZiAobV9hbHRlcm5hdGVC
YXNlKQotICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRl
eHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CisgICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBvdXQucHJpbnQo
Iiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIs
ICptX2NhbGxMaW5rU3RhdHVzKTsKICAgICAgICAgb3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNp
b24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUHV0QnlJZFZhcmlh
bnRfaAogI2RlZmluZSBQdXRCeUlkVmFyaWFudF9oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNp
bmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBA
IC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICBQdXRCeUlkVmFyaWFudCgpCiAgICAgICAgIDog
bV9raW5kKE5vdFNldCkKICAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQotICAgICAg
ICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQogICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRP
ZmZzZXQpCiAgICAgewogICAgIH0KQEAgLTU0LDE2ICs1MywxNSBAQCBwdWJsaWM6CiAgICAgUHV0
QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRCeUlkVmFyaWFudCYg
b3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZh
cmlhbnQgcmVwbGFjZSgKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2Uo
Y29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQ
dXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9s
ZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
OworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zm
c2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAg
ICAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyk7CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKICAgICAKICAg
ICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKQEAgLTc2LDYgKzc0
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwogICAgIH0KICAg
ICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7CisgICAgfQorICAgIAogICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVy
KTsKQEAgLTEwMCwxMCArMTAzLDcgQEAgcHVibGljOgogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9y
YWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAgICAgCi0gICAgY29u
c3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7Ci0gICAgfQorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVy
biBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNv
bnN0CiAgICAgewpAQCAtMTExLDE0ICsxMTEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X29mZnNldDsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1
cm4gbV9hbHRlcm5hdGVCYXNlOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0
cnVjdHVyZSgpIGNvbnN0OwotICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1
cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CkBAIC0x
MzYsOCArMTI4LDcgQEAgcHJpdmF0ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBTdHJ1Y3R1cmVT
ZXQgbV9vbGRTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKLSAgICBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0gICAgSlNPYmpl
Y3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2Nv
bmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNywzMyArMzcsNDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojp+U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCgpIHsgfQogCiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXksCiAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIs
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+JiBo
ZWFkKQogewotICAgIGhlYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQ+KGhvbGRlciwgV1RGOjptb3ZlKGhlYWQpKTsKKyAgICBoZWFkID0gc3RkOjpt
YWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PihrZXksIGhvbGRlciwg
V1RGOjptb3ZlKGhlYWQpKTsKICAgICByZXR1cm4gaGVhZC5nZXQoKTsKIH0KIAogdm9pZCBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFp
bCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTog
c3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBi
ZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxp
c3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJv
YnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0gICAgbV9ob2xkZXIuY29kZUJsb2NrKCkt
PnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAgaWYgKCFtX2tleSB8fCAhbV9r
ZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsK
KyAgICAgICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1
YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KKyAgICAgICAgLy8gVGhhdCB3b3Jrcywg
YmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBs
aXN0LCBhbmQKKyAgICAgICAgLy8gdGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcg
aXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2luZy4KKyAgICAgICAgbV9ob2xkZXIuY29k
ZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9rZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQ
cmVzZW5jZSkgeworICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIHByZXNlbmNlIGNvbmRpdGlvbiwg
bGV0J3Mgd2F0Y2ggdGhlIHByb3BlcnR5IGZvciByZXBsYWNlbWVudHMuIFRoaXMgaXMgcHJvZml0
YWJsZQorICAgICAgICAvLyBmb3IgdGhlIERGRywgd2hpY2ggd2lsbCB3YW50IHRoZSByZXBsYWNl
bWVudCBzZXQgdG8gYmUgdmFsaWQgaW4gb3JkZXIgdG8gZG8gY29uc3RhbnQgZm9sZGluZy4KKyAg
ICAgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAobV9rZXkub2JqZWN0KCkpLT52bSgpOworICAgICAg
ICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgbV9rZXkub2Zmc2V0KCkpOworICAgIH0KKworICAgIG1fa2V5Lm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7CiB9CiAKIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbygpCiB7CiB9CiAKLVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9p
bnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCgpCitTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKLSAgICByZXR1cm4g
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6cHVzaCgqdGhpcywgbV9oZWFkKTsKKyAg
ICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6cHVzaChrZXksICp0aGlz
LCBtX2hlYWQpOwogfQogCiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQo
CiAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSkKIHsKICAgICBpZiAoIWhvbGRlclJlZikKICAgICAgICAgaG9sZGVyUmVmID0g
YWRvcHRSZWYobmV3IFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyhjb2RlQmxvY2ssIHN0
dWJJbmZvKSk7CkBAIC03Miw3ICs4NSw3IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQqIFdhdGNocG8KICAgICAgICAgQVNTRVJUKGhvbGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHVi
SW5mbyk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQo
KTsKKyAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KGtleSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZp
c2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKIAorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAg
LTQ2LDE1ICs0NywxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50IDog
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludCgKLSAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvJiBob2xkZXIpCi0gICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50PiBuZXh0KQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikK
KyAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICwgbV9ob2xkZXIoaG9sZGVyKQogICAgICAg
ICAsIG1fbmV4dChXVEY6Om1vdmUobmV4dCkpCiAgICAgewogICAgIH0KQEAgLTYyLDYgKzU5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgflN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQo
KTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogcHVz
aCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAgICAgICAg
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiYgaGVhZCk7CiAKQEAgLTY5
LDYgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29u
c3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIG1fa2V5OwogICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgbV9o
b2xkZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQ+IG1fbmV4dDsKIH07CkBAIC04MywxMSArODIsMTEgQEAgcHVibGljOgogICAgIAogICAgIH5X
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKTsKICAgICAKLSAgICBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KCk7CisgICAgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCogZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKICAgICAgICAgUmVmUHRyPFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwKLSAgICAgICAgQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8qLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9zdHViSW5m
bzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00OCw5ICs0OCwxMiBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAg
ICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX2RpcmVjdDoKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0
UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CisgICAgICAg
IHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF9yZXBsYWNlOgogICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgogICAgICAgICAvLyBU
aGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVt
b3J5CkBAIC03NSw4ICs3OCwxMCBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtS
ZWZlcmVuCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKICAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgp
KQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3Ry
dWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRy
YW5zaXRpb24uY2hhaW4uZ2V0KCkpKQorICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUu
cHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1Bv
aW50ZXIoCisgICAgICAgICAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25T
ZXQpLmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIklu
c3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAj
aW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKQEAgLTExMyw3ICsxMTQsNyBAQCBzdHJ1
Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5p
dFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2
aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wg
aXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsx
MjMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgICAgIHUucHV0QnlJZFRy
YW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1
cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwg
b3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25T
ZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lk
IGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFz
ZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc2LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVT
dHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgIH0KICAgICAgICAgCi0gICAgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBv
aW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCiAgICAgewog
ICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZl
cmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9j
aywgdGhpcyk7CisgICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0aGlzLCBjb25k
aXRpb24pOwogICAgIH0KICAgICAKICAgICBpbnQ4X3QgYWNjZXNzVHlwZTsKQEAgLTIxNywyMyAr
MjE5LDEyIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgICAgICBXcml0ZUJh
cnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKICAgICAgICAgfSBnZXRC
eUlkU2VsZjsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+IHByb3RvdHlwZVN0cnVjdHVyZTsKLSAgICAgICAgICAgIGJvb2wgaXNE
aXJlY3Q7Ci0gICAgICAgIH0gZ2V0QnlJZFByb3RvOwotICAgICAgICBzdHJ1Y3QgewotICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGNvdW50IDogMzE7Ci0gICAgICAgICAgICBib29sIGlzRGlyZWN0IDog
MTsKLSAgICAgICAgfSBnZXRCeUlkQ2hhaW47Ci0gICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg
ICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICB9IGdldEJ5SWRMaXN0Owog
ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IHByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1
cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hh
aW4+IGNoYWluOworICAgICAgICAgICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwogICAgICAgICB9
IHB1dEJ5SWRUcmFuc2l0aW9uOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nzks
NyArMTc3OSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3VidGxlPwogICAgICAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tpXS5hbHRlcm5hdGVCYXNlKCkpOworICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQg
aW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3ZSdkCisgICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCisgICAgICAgICAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0
YW50UmVzdWx0ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewpAQCAtMjA2MCwzMCArMjA2MywyMiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUg
YmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFz
ZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0
ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5
T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMp
IHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBnZXRDYXNlLnNldCgpOwogICAgICAg
ICAgICAgc2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAg
ICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgIGJhc2VG
b3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlLm1fdmFsdWU7Ci0gICAgICAgICAgICBKU1Zh
bHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0
YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkLCB2YXJpYW50LmJh
c2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0
YW50UmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0g
R2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1h
a2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAg
ICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAg
ICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKKyAgICAgICAgICAgICAg
ICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAogICAgICAgICAgICAgICAgIG1fc3RhdGUu
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNS
ZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6QWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tl
eShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOworfQorCit2
b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRjaGFibGUoKSk7CisgICAgCisgICAgbV9r
ZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1
Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX2tl
eS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShtX2tleS51aWQoKSk7Cisg
ICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9w
ZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgIHNldC0+YWRkKCZtX3By
b3BlcnR5V2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50OjpmaXJlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICAvLyBP
bmUgb2YgdGhlIHdhdGNocG9pbnRzIGZpcmVkLCBidXQgdGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1h
a2Ugc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlbSBhcmUKKyAgICAvLyBpbiBhbnkgc2V0IGFueW1v
cmUuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgYnkgYWxsb3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRo
ZSB3YXRjaHBvaW50cworICAgIC8vIHdoZXJldmVyIGZyb20gc2NyYXRjaC4KKyAgICBpZiAobV9z
dHJ1Y3R1cmVXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fc3RydWN0dXJlV2F0Y2hw
b2ludC5yZW1vdmUoKTsKKyAgICBpZiAobV9wcm9wZXJ0eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkK
KyAgICAgICAgbV9wcm9wZXJ0eVdhdGNocG9pbnQucmVtb3ZlKCk7CisgICAgCisgICAgaWYgKG1f
a2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7
CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1f
a2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgIH0KKyAgICAKKyAgICBTdHJp
bmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5
LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAgICBTdHJpbmdGaXJlRGV0YWlsIHN0cmlu
Z0RldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+
amV0dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNo
cG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZzdHJpbmdEZXRhaWwpOworfQorCit2b2lkIEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2lu
dDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBw
dHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoCisgICAgICAgIEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAg
ICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9
CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNl
dCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJ
bnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90
IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fcHJvcGVydHlXYXRjaHBvaW50KTsKKyAgICAKKyAgICBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAg
IGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigK
KyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAg
CisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKworcHVibGljOgorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAgIAorICAgIHZvaWQg
aW5zdGFsbCgpOworCitwcml2YXRlOgorICAgIGNsYXNzIFN0cnVjdHVyZVdhdGNocG9pbnQgOiBw
dWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBTdHJ1Y3R1cmVXYXRjaHBv
aW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVy
bmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9OworICAgIGNsYXNzIFByb3Bl
cnR5V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFByb3BlcnR5V2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVh
bCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsK
KyAgICAKKyAgICB2b2lkIGZpcmUoY29uc3QgRmlyZURldGFpbCYpOworICAgIAorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cisg
ICAgU3RydWN0dXJlV2F0Y2hwb2ludCBtX3N0cnVjdHVyZVdhdGNocG9pbnQ7CisgICAgUHJvcGVy
dHlXYXRjaHBvaW50IG1fcHJvcGVydHlXYXRjaHBvaW50OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAg
ICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2Vt
ZW50V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6
Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOwor
ICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNo
cG9pbnQodGhpcyk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJl
SW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIGlmIChtX2tleS5pc1dh
dGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAg
ICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6
c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikg
b24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRT
dHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWls
ZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBzdHJpbmdEZXRhaWwo
b3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29u
KAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBD
b3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
Ik9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAg
ICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMywyNyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5k
bGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVu
Y3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hl
Y2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUqIGhhbmRs
ZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUg
b3AgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRl
ZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zm
c2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZz
ZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBi
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5
T2Zmc2V0KTsKKworICAgIC8vIENyZWF0ZSBhIHByZXNlbmNlIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIGJhc2VkIG9uIHNvbWUga25vd24gb2Zmc2V0IGFuZCBzdHJ1Y3R1cmUgc2V0LiBEb2VzIG5v
dAorICAgIC8vIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uZGl0aW9uLCBidXQgaXQgbWF5
IHJldHVybiBhIG51bGwgb25lIGlmIGl0IGVuY291bnRlcnMgYSBjb250cmFkaWN0aW9uLgorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlTGlrZSgKKyAgICAgICAgSlNPYmplY3Qq
IGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3Ry
dWN0dXJlU2V0Jik7CisgICAgCisgICAgLy8gQXR0ZW1wdCB0byB3YXRjaCB0aGUgcHJlc2VuY2Ug
b2YgYSBwcm9wZXJ0eS4gSXQgd2lsbCB3YXRjaCB0aGF0IHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50
IGluIHRoZSBzYW1lCisgICAgLy8gd2F5IGFzIGluIGFsbCBvZiB0aGUgc3RydWN0dXJlcyBpbiB0
aGUgc2V0LiBJdCBtYXkgZW1pdCBjb2RlIGluc3RlYWQgb2YganVzdCBzZXR0aW5nIGEgd2F0Y2hw
b2ludC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBhbGwgd29ya3Mgb3V0LgorICAgIGJv
b2wgY2hlY2tQcmVzZW5jZUxpa2UoSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgdm9pZCBjaGVj
a1ByZXNlbmNlTGlrZShOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICAKKyAgICAvLyBXb3JrcyB3aXRoIGJvdGgg
R2V0QnlJZFZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFyaWFudC4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0
ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJp
YW50VHlwZSYpOworCisgICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgICAgIAogICAg
IHZvaWQgaGFuZGxlR2V0QnlJZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3Bl
Y3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAg
ICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsKQEAgLTIxMiw3ICsyMzIsMzIgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAg
ICAgYm9vbCBpc0RpcmVjdCk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImKTsKKyAgICAKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRj
aHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uIFJldHVybnMgZmFsc2Ug
aWYgdGhlCisgICAgLy8gY29uZGl0aW9uIG5vIGxvbmdlciBob2xkcywgYW5kIHRoZXJlZm9yZSBu
byByZWFzb25hYmxlIGNoZWNrIGNhbiBiZSBlbWl0dGVkLgorICAgIGJvb2wgY2hlY2soY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBw
cm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZCk7CisgICAgCisgICAgLy8gRWl0aGVy
IHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9u
LiBJdCBtdXN0IGJlIGEgUHJlc2VuY2UKKyAgICAvLyBjb25kaXRpb24uIEl0IHdpbGwgYXR0ZW1w
dCB0byBwcm9tb3RlIGEgUHJlc2VuY2UgY29uZGl0aW9uIHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRp
dGlvbi4KKyAgICAvLyBFbWl0cyBjb2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNv
bmRpdGlvbiBndWFyZHMsIGFuZCByZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhl
IGxvYWRlZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlmIHRoZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhv
bGRzLgorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJik7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmLCBOb2RlVHlwZSA9IEdldEJ5
T2Zmc2V0KTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIAorICAgIC8vIENh
bGxzIGNoZWNrKCkgZm9yIGVhY2ggY29uZGl0aW9uIGluIHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVp
dGhlciBlbWl0cyBjaGVja3Mgb3IgcmVnaXN0ZXJzCisgICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEg
Y29tYmluYXRpb24gb2YgdGhlIHR3bykgdG8gbWFrZSB0aGUgY29uZGl0aW9ucyBob2xkLiBJZiBh
bnkgb2YgdGhvc2UKKyAgICAvLyBjb25kaXRpb25zIGFyZSBubyBsb25nZXIgY2hlY2thYmxlLCBy
ZXR1cm5zIGZhbHNlLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmKTsKKyAgICAKKyAgICAvLyBDYWxscyBjaGVjaygpIGZvciB0aG9zZSBjb25kaXRpb25z
IHRoYXQgYXJlbid0IHRoZSBzbG90IGJhc2UsIGFuZCBjYWxscyBsb2FkKCkgZm9yIHRoZSBzbG90
CisgICAgLy8gYmFzZS4gRG9lcyBhIGNvbWJpbmF0aW9uIG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0
aW9uIGFuZCBjaGVjayBlbWlzc2lvbiB0byBndWFyZCB0aGUKKyAgICAvLyBjb25kaXRpb25zLCBh
bmQgZW1pdHMgY29kZSB0byBsb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzbG90IGJhc2UuIFJldHVy
bnMgYSBub2RlIGNvbnRhaW5pbmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51
bGwgaWYgYW55IG9mIHRoZSBjb25kaXRpb25zIHdlcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAg
ICBHZXRCeU9mZnNldE1ldGhvZCBwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYpOworICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICB2b2lkIHBy
ZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiAr
NzUxLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0
dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBu
b3QgdGhlIG90aGVyIHdheSBhcm91bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMg
Z2V0cyBubyBwcm9maXQgZnJvbSB1c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xs
IG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUg
YXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9i
amVjdE5vZGUgPSB3ZWFrSlNDb25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSks
IG9iamVjdE5vZGUpOwogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKQEAgLTIyMjEsMTUgKzIy
NjksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQo
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgTm9kZVR5cGUgb3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlP
ZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAg
ICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFu
dCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3Ry
dWN0dXJlU2V0LCBvZmZzZXQpKSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJh
c2UpOwotICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBA
IC0yMjQ1LDYgKzIyODYsMTggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zm
c2V0KAogICAgIHJldHVybiBnZXRCeU9mZnNldDsKIH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2Us
IGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQoreworICAgIGlmIChiYXNl
LT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFw
aC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQs
IG9mZnNldCkpIHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAg
ICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQsIG9wKTsKK30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9y
YWdlOwpAQCAtMjI2MiwxMCArMjMxNSwyOTkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9y
KQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbikKK3sKKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRp
b24pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFjb25kaXRpb24u
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwKKyAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3
ZWFrSlNDb25zdGFudChjb25kaXRpb24ub2JqZWN0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworR2V0QnlPZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KEdl
dEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCkKK3sKKyAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGUKKyAgICAgICAgJiYgbWV0aG9kLnByb3Rv
dHlwZSgpLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBpZiAoSlNW
YWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShtZXRob2QucHJv
dG90eXBlKCktPnZhbHVlKCksIG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCksIG1ldGhv
ZC5vZmZzZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0
YW50KG1fZ3JhcGguZnJlZXplKGNvbnN0YW50KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBt
ZXRob2Q7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nKCJQbGFubmluZyBhIGxvYWQ6ICIsIGNvbmRpdGlvbiwgIlxu
Iik7CisgICAgCisgICAgLy8gV2UgbWlnaHQgcHJvbW90ZSB0aGlzIHRvIEVxdWl2YWxlbmNlLCBh
bmQgYSBsYXRlciBERkcgcGFzcyBtaWdodCBhbHNvIGRvIHN1Y2ggcHJvbW90aW9uCisgICAgLy8g
ZXZlbiBpZiB3ZSBmYWlsLCBidXQgZm9yIHNpbXBsaWNpdHkgdGhpcyBjYW5ub3QgYmUgYXNrZWQg
dG8gbG9hZCBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24uCisgICAgLy8gTm9uZSBvZiB0aGUgY2xp
ZW50cyBvZiB0aGlzIG1ldGhvZCB3aWxsIHJlcXVlc3QgYSBsb2FkIG9mIGFuIEVxdWl2YWxlbmNl
IGNvbmRpdGlvbiBhbnl3YXksCisgICAgLy8gYW5kIHN1cHBvcnRpbmcgaXQgd291bGQgY29tcGxp
Y2F0ZSB0aGUgaGV1cmlzdGljcyBiZWxvdy4KKyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24u
a2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgCisgICAgLy8gSGVy
ZSdzIHRoZSByYW5raW5nIG9mIGhvdyB0byBoYW5kbGUgdGhpcywgZnJvbSBtb3N0IHByZWZlcnJl
ZCB0byBsZWFzdCBwcmVmZXJyZWQ6CisgICAgLy8KKyAgICAvLyAxKSBXYXRjaHBvaW50IG9uIGFu
IGVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbmQgcmV0dXJuIGEgY29uc3RhbnQgbm9kZSBmb3IgdGhl
IGxvYWRlZCB2YWx1ZS4KKyAgICAvLyAgICBObyBvdGhlciBjb2RlIGlzIGVtaXR0ZWQsIGFuZCB0
aGUgc3RydWN0dXJlIG9mIHRoZSBiYXNlIG9iamVjdCBpcyBuZXZlciByZWdpc3RlcmVkLgorICAg
IC8vICAgIEhlbmNlIHRoaXMgcmVzdWx0cyBpbiB6ZXJvIGNvZGUgYW5kIHdlIHdvbid0IGpldHRp
c29uIHRoaXMgY29tcGlsYXRpb24gaWYgdGhlIG9iamVjdAorICAgIC8vICAgIHRyYW5zaXRpb25z
LCBldmVuIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgd2F0Y2hhYmxlIHJpZ2h0IG5vdy4KKyAgICAvLwor
ICAgIC8vIDIpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUg
b2YgdGhlIGJhc2UgaXMgZ29pbmcgdG8gYmUgd2F0Y2hlZCBieSB0aGUKKyAgICAvLyAgICBERkcg
YW55d2F5IChpLmUuIGRmZ1Nob3VsZFdhdGNoKS4gV2F0Y2ggdGhlIHN0cnVjdHVyZSBhbmQgZW1p
dCB0aGUgbG9hZC4gRG9uJ3Qgd2F0Y2ggdGhlCisgICAgLy8gICAgY29uZGl0aW9uLCBzaW5jZSB0
aGUgYWN0IG9mIHR1cm5pbmcgdGhlIGJhc2UgaW50byBhIGNvbnN0YW50IGluIElSIHdpbGwgY2F1
c2UgdGhlIERGRyB0bworICAgIC8vICAgIHdhdGNoIHRoZSBzdHJ1Y3R1cmUgYW55d2F5IGFuZCBk
b2luZyBzbyB3b3VsZCBzdWJzdW1lIHdhdGNoaW5nIHRoZSBjb25kaXRpb24uCisgICAgLy8KKyAg
ICAvLyAzKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9m
IHRoZSBiYXNlIGlzIHdhdGNoYWJsZSBidXQgbm90IGJ5IHRoZQorICAgIC8vICAgIERGRyAoaS5l
LiB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpIGFuZCAhZGZnU2hvdWxkV2F0
Y2hJZlBvc3NpYmxlKCkpLiBXYXRjaAorICAgIC8vICAgIHRoZSBjb25kaXRpb24sIGFuZCBlbWl0
IGEgbG9hZC4KKyAgICAvLworICAgIC8vIDQpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUg
Y3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgbm90IHdhdGNoYWJsZS4gRW1pdCBhCisg
ICAgLy8gICAgc3RydWN0dXJlIGNoZWNrLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAv
LyA1KSBUaGUgY29uZGl0aW9uIGRvZXMgbm90IGhvbGQuIEdpdmUgdXAgYW5kIHJldHVybiBudWxs
LgorICAgIAorICAgIC8vIEZpcnN0LCB0cnkgdG8gcHJvbW90ZSBQcmVzZW5jZSB0byBFcXVpdmFs
ZW5jZS4gV2UgZG8gdGhpcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZQorICAgIC8vIGJlY2F1
c2UgaXQncyB0aGUgbW9zdCBwcm9maXRhYmxlLiBBbHNvLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUg
dGhlIHByZXNlbmNlIGlzIHdhdGNoYWJsZSBidXQKKyAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHdh
dGNoIGl0IHVubGVzcyBpdCBiZWNhbWUgYW4gZXF1aXZhbGVuY2UgKHNlZSB0aGUgcmVsYXRpb25z
aGlwIGJldHdlZW4KKyAgICAvLyAoMSksICgyKSwgYW5kICgzKSBhYm92ZSkuCisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VDb25kaXRpb24gPSBjb25kaXRpb24uYXR0ZW1w
dFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoKTsKKyAgICBpZiAobV9ncmFwaC53YXRj
aENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiBHZXRCeU9m
ZnNldE1ldGhvZDo6Y29uc3RhbnQobV9ncmFwaC5mcmVlemUoZXF1aXZhbGVuY2VDb25kaXRpb24u
cmVxdWlyZWRWYWx1ZSgpKSk7CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UnbGwgaGF2
ZSB0byBtYXRlcmlhbGl6ZSB0aGUgY29uZGl0aW9uJ3MgYmFzZSBhcyBhIGNvbnN0YW50IGluIERG
RyBJUi4gT25jZQorICAgIC8vIHdlIGRvIHRoaXMsIHRoZSBmcm96ZW4gdmFsdWUgd2lsbCBoYXZl
IGl0cyBvd24gaWRlYSBvZiB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMuIFVzZSB0aGF0IGZyb20KKyAg
ICAvLyBub3cgb24ganVzdCBiZWNhdXNlIGl0J3MgbGVzcyBjb25mdXNpbmcuCisgICAgRnJvemVu
VmFsdWUqIGJhc2UgPSBtX2dyYXBoLmZyZWV6ZShjb25kaXRpb24ub2JqZWN0KCkpOworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgLy8gQ2hl
Y2sgaWYgdGhlIHN0cnVjdHVyZSB0aGF0IHdlJ3ZlIHJlZ2lzdGVyZWQgbWFrZXMgdGhlIGNvbmRp
dGlvbiBob2xkLiBJZiBub3QsIGp1c3QgZ2l2ZQorICAgIC8vIHVwLiBUaGlzIGlzIGNhc2UgKDUp
IGFib3ZlLgorICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1
Y3R1cmUpKQorICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAKKyAgICAv
LyBJZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoZWQgYnkgdGhlIERGRyBhbHJlYWR5LCB0aGVuIGp1
c3QgdXNlIHRoaXMgZmFjdCB0byBlbWl0IHRoZSBsb2FkLgorICAgIC8vIFRoaXMgaXMgY2FzZSAo
MikgYWJvdmUuCisgICAgaWYgKHN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKKyAgICAgICAg
cmV0dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3Rv
dHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBJZiB3ZSBjYW4g
d2F0Y2ggdGhlIGNvbmRpdGlvbiByaWdodCBub3csIHRoZW4gd2UgY2FuIGVtaXQgdGhlIGxvYWQg
YWZ0ZXIgd2F0Y2hpbmcgaXQuIFRoaXMKKyAgICAvLyBpcyBjYXNlICgzKSBhYm92ZS4KKyAgICBp
ZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAgICByZXR1cm4gcHJv
bW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2Us
IGNvbmRpdGlvbi5vZmZzZXQoKSkpOworICAgIAorICAgIC8vIFdlIGNhbid0IHdhdGNoIGFueXRo
aW5nIGJ1dCB3ZSBrbm93IHRoYXQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIHNhdGlzZmllcyB0aGUg
Y29uZGl0aW9uLiBTbywKKyAgICAvLyBjaGVjayBmb3IgdGhhdCBzdHJ1Y3R1cmUgYW5kIHRoZW4g
ZW1pdCB0aGUgbG9hZC4KKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwg
CisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAg
ICAgICAgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oYmFzZSkpKTsKKyAgICByZXR1cm4g
cHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJh
c2UsIGNvbmRpdGlvbi5vZmZzZXQoKSkpOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kLAorICAgIE5vZGVUeXBlIG9wKQor
eworICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRo
b2Q6OkludmFsaWQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGNhc2UgR2V0QnlPZmZz
ZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8obWV0aG9kLmNvbnN0YW50KCkpKTsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGFkZFRvR3Jh
cGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5wcm90b3R5cGUoKSkpOworICAgICAgICByZXR1
cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1i
ZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOworICAgIH0KKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpMb2FkOgorICAgICAgICAvLyBXaWxsIG5ldmVyIHNlZSB0aGlzIGZyb20gcGxhbkxvYWQo
KS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAor
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24sIE5vZGVUeXBlIG9wKQoreworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1l
dGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvbik7CisgICAgcmV0dXJuIGxvYWQocHJlZGljdGlvbiwg
bV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25kaXRpb24udWlkKCkpLCBtZXRob2QsIG9w
KTsKK30KKworYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlvblNldCkgeworICAgICAgICBpZiAoIWNo
ZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cGxhbkxv
YWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiY29uZGl0aW9uU2V0ID0gIiwgY29uZGl0
aW9uU2V0LCAiXG4iKTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25T
ZXQpIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IXJlc3VsdCk7IC8vIFNob3VsZCBvbmx5IHNlZSBleGFjdGx5IG9uZSBvZiB0aGVzZS4KKyAgICAg
ICAgICAgIHJlc3VsdCA9IHBsYW5Mb2FkKGNvbmRpdGlvbik7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCFjaGVjayhj
b25kaXRpb24pKQorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQo
ISFyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIE5vZGVUeXBlIG9wKQoreworICAgIEdldEJ5
T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvblNldCk7CisgICAgcmV0dXJu
IGxvYWQoCisgICAgICAgIHByZWRpY3Rpb24sCisgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMo
KS5lbnN1cmUoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkudWlkKCkpLAorICAgICAg
ICBtZXRob2QsIG9wKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gQnl0ZUNvZGVQYXJz
ZXI6OnByZXNlbmNlTGlrZSgKKyAgICBKU09iamVjdCoga25vd25CYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0
KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQo
KSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKKyAgICBQcm9wZXJ0eU9mZnNldCBmaXJzdE9mZnNldCA9IHNldFswXS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgaWYgKGZpcnN0T2Zmc2V0ICE9IG9mZnNldCkK
KyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBvdGhl
ckF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG90aGVyT2Zmc2V0ID0gc2V0W2ld
LT5nZXRDb25jdXJyZW50bHkodWlkLCBvdGhlckF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob3Ro
ZXJPZmZzZXQgIT0gb2Zmc2V0IHx8IG90aGVyQXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKQorICAg
ICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgfQorICAgIHJl
dHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcihrbm93
bkJhc2UsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKK30KKworYm9vbCBCeXRlQ29kZVBhcnNl
cjo6Y2hlY2tQcmVzZW5jZUxpa2UoCisgICAgSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHNldCkKK3sKKyAgICByZXR1cm4gY2hlY2socHJlc2VuY2VMaWtlKGtub3duQmFzZSwgdWlkLCBv
ZmZzZXQsIHNldCkpOworfQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpjaGVja1ByZXNlbmNlTGlr
ZSgKKyAgICBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIGlmIChKU09iamVjdCog
a25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKKyAg
ICAgICAgaWYgKGNoZWNrUHJlc2VuY2VMaWtlKGtub3duQmFzZSwgdWlkLCBvZmZzZXQsIHNldCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVj
dHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNldCkpLCBiYXNlKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAgICAvLyBN
YWtlIHN1cmUgYmFja3dhcmRzIHByb3BhZ2F0aW9uIGtub3dzIHRoYXQgd2UndmUgdXNlZCBiYXNl
LgorICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgCisgICAgYm9vbCBuZWVkU3Ry
dWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIAorICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0g
YmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKKyAgICAgICAgLy8gVHJ5
IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90
IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKKyAgICAgICAgLy8gaWYgdGhlIGJhc2Un
cyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRm
Z1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEgcHJvdG90
eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCisgICAgICAgICAgICAgICAg
Ly8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBh
bGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gdmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUgcHJvdG90eXBlIChpdCB3b3VsZCBiZSBoaWxhcmlv
dXNseSByYXJlIGlmIHRoZXkKKyAgICAgICAgICAgICAgICAvLyBkaWRuJ3QpLiBOb3RlIHRoYXQg
d2UgYXJlIHJlbHlpbmcgb24gc3RydWN0dXJlU2V0KCkgaGF2aW5nIGF0IGxlYXN0IG9uZSBlbGVt
ZW50LiBUaGF0CisgICAgICAgICAgICAgICAgLy8gd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJl
Y2F1c2Ugb2YgaG93IEdldEJ5SWRTdGF0dXMvUHV0QnlJZFN0YXR1cyB3b3JrLgorICAgICAgICAg
ICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpWzBdLT5z
dG9yZWRQcm90b3R5cGVPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBib29sIGFsbEFncmVlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgdmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKVtpXS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90
eXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxBZ3JlZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGFsbEFncmVlKSB7CisgICAgICAgICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgICAgICAgICAgICAgICAg
ICBrbm93bkJhc2UsIHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkU3RydWN0dXJlQ2hl
Y2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UncmUgbG9hZGluZyBkaXJlY3RseSBmcm9tIGJh
c2UuIFdlIGNhbiBhdm9pZCBhbGwgb2YgdGhlIGNvZGUgdGhhdCBmb2xsb3dzCisgICAgICAgICAg
ICAgICAgLy8gaWYgd2UgY2FuIHByb3ZlIHRoYXQgdGhlIHByb3BlcnR5IGlzIGEgY29uc3RhbnQu
IE90aGVyd2lzZSwgd2UgdHJ5IHRvIHByb3ZlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgLy8g
cHJvcGVydHkgaXMgd2F0Y2hhYmx5IHByZXNlbnQsIGluIHdoaWNoIGNhc2Ugd2UgZ2V0IHJpZCBv
ZiB0aGUgc3RydWN0dXJlIGNoZWNrLgorCisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gcHJlc2VuY2VDb25kaXRpb24gPQorICAgICAgICAgICAgICAgICAgICBwcmVzZW5j
ZUxpa2Uoa25vd25CYXNlLCB1aWQsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkpOworCisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZh
bGVuY2VDb25kaXRpb24gPQorICAgICAgICAgICAgICAgICAgICBwcmVzZW5jZUNvbmRpdGlvbi5h
dHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigpOworICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGVxdWl2YWxlbmNlQ29uZGl0aW9uKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGVxdWl2YWxlbmNlQ29uZGl0aW9u
LnJlcXVpcmVkVmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQg
YXR0cmlidXRlcyB3ZSdyZSBpbnRlcmVzdGVkIGluLiBIb3BlZnVsbHkgYWxsIG9mIHRoZSBzdHJ1
Y3R1cmVzIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIHN0cnVjdHVyZSBzZXQgYWdyZWUuCisg
ICAgICAgICAgICAgICAgaWYgKGNoZWNrKHByZXNlbmNlQ29uZGl0aW9uKSkKKyAgICAgICAgICAg
ICAgICAgICAgbmVlZFN0cnVjdHVyZUNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAobmVlZFN0cnVjdHVyZUNoZWNrKQorICAgICAgICBhZGRU
b0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBs
b2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlwZSBsb2FkT3A7CisgICAgaWYgKHZhcmlhbnQuY2Fs
bExpbmtTdGF0dXMoKSkgeworICAgICAgICBsb2FkUHJlZGljdGlvbiA9IFNwZWNDZWxsT3RoZXI7
CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRlclNldHRlckJ5T2Zmc2V0OworICAgIH0gZWxzZSB7
CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gcHJlZGljdGlvbjsKKyAgICAgICAgbG9hZE9wID0g
R2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE5vZGUqIGxvYWRlZFZhbHVlOworICAgIGlm
ICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgIGxvYWRlZFZhbHVl
ID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFyaWFudC5jb25kaXRpb25TZXQoKSwgbG9hZE9wKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKKyAg
ICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAorICAgICAgICAgICAgbG9hZE9wKTsK
KyAgICB9CisKKyAgICByZXR1cm4gbG9hZGVkVmFsdWU7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlk
VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworCisgICAgY2hlY2tQcmVz
ZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50
Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKKyAgICByZXR1cm4gaGFuZGxlUHV0QnlP
ZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOwogfQogCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjI4OCwxOCArMjYzMCwzNiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigp
KQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJ
ZCgpOwotICAgIAorICAgICAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2Vz
OworICAgICAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNr
cyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAgICAg
ICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNlIGlu
IHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNrcyBh
bmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAodW5z
aWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50
SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFudElu
ZGV4XS5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgR2V0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAg
ICAgICAgIGlmICh2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNl
dENhc2UoCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNldCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5v
ZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxv
YWQodmFyaWFudC5jb25kaXRpb25TZXQoKSk7CisgICAgICAgICAgICBpZiAoIW1ldGhvZCkgewor
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwK
KyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZXMuYXBw
ZW5kKE11bHRpR2V0QnlPZmZzZXRDYXNlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIG1ldGhvZCkp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAg
ICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKKyAg
ICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0QnlPZmZzZXQKICAgICAgICAgTXVsdGlH
ZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEuYWRk
KCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gZ2V0QnlJZFN0YXR1cy52YXJpYW50cygpOwor
ICAgICAgICBkYXRhLT5jYXNlcyA9IGNhc2VzOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVt
YmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbk9wZXJhbmQpLAogICAgICAgICAgICAgYWRkVG9HcmFwaChNdWx0aUdldEJ5T2Zmc2V0
LCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwpAQCAtMjMwOSwzMCAr
MjY2OSwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIEFTU0VS
VChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CiAgICAgR2V0QnlJZFZhcmlhbnQg
dmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAgICAgICAgICAgICAgCisgICAgTm9kZSog
bG9hZGVkVmFsdWUgPSBsb2FkKHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZh
cmlhbnQpOworICAgIGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlk
LCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkK
ICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwog
ICAgIAotICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7Ci0gICAgCi0gICAgZW1pdENoZWNr
cyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotCi0gICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKQotICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVC
YXNlKCkpOwotICAgIAotICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQgdG8KLSAgICAvLyBl
bnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxp
dmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCi0gICAgLy8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMu
IFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1
Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcg
dGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UuCi0gICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNl
KQotICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZSk7Ci0gICAgCi0gICAg
Tm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgdmFyaWFudC5j
YWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0gICAgICAgIGJh
c2UsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9m
ZnNldCgpLAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0
ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICAKICAgICBpZiAoIXZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSkgewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3Bl
cmFuZCksIGxvYWRlZFZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM2OSw3ICsyNzE1LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyAgICBzaW5jZSB3
ZSBvbmx5IHJlYWxseSBjYXJlIGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBu
b3QgZ29pbmcgdG8gdGFrZSB0aGF0CiAgICAgLy8gICAgc2hvcnRjdXQuCiAgICAgaW50IG5leHRS
ZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
LSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJ
bW1lZGlhdGVOYWtlZFNldCk7CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAKICAgICBoYW5kbGVDYWxsKAogICAg
ICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2Fs
bCwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLApAQCAtMjQwMywxNyArMjc0OSwyMCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQot
ICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgp
OwotICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlh
bnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJ
bmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0
dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
KyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGgu
Y29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgCiAgICAgICAg
IE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXRE
YXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFu
dHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CkBAIC0yNDI2LDggKzI3NzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKICAgICBjYXNlIFB1dEJ5SWRW
YXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2Up
OwotICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJp
YW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAgICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkK
ICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQzNSw3ICsyNzgzLDEwIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbjogewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAg
ICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICBpZiAo
IWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJ
ZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3Qp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHZhcmlh
bnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhh
c0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI0ODYsMTkgKzI4MzcsMTEgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
UHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBi
YXNlOwotICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgIENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUo
KSkpLCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFu
dENoZWNrcygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KSkKLSAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5
T2Zmc2V0KAotICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgdmFyaWFudC5iYXNlU3Ry
dWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAg
ICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0g
bG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50KTsKKyAg
ICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgeworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwg
aWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTm9kZSogc2V0dGVy
ID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZhbHVlKTsKICAgICAgICAgCkBAIC0yNTI2
LDcgKzI4NjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CiAg
ICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJl
Z2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0
KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIHZhbHVlLCBJ
bW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAgICAgICAgIGhhbmRsZUNhbGwoCkBAIC0zNDY2LDYg
KzM4MDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworCiAgICAgICAgICAgICAgICAgR2V0
QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVyZSwg
dWlkKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnN0YXRlKCkgIT0gR2V0QnlJZFN0YXR1
czo6U2ltcGxlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1cy5udW1WYXJpYW50cygpICE9
IDEKQEAgLTM0NzMsOSArMzgxNywxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwg
YWRkVG9HcmFwaChHZXRCeUlkRmx1c2gsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0
dXNbMF0uc3RydWN0dXJlU2V0KCkub25seVN0cnVjdHVyZSgpKTsKKworICAgICAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSB3ZWFrSlNDb25zdGFudChnbG9iYWxPYmplY3QpOworICAgICAgICAgICAg
ICAgIE5vZGUqIHJlc3VsdCA9IGxvYWQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgc3RhdHVzWzBdKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBzdGF0dXNbMF0u
c3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKKyAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTM2
MTksMTAgKzM5NjUsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZp
ZXJOdW1iZXIpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSksIGdldChWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzWzBdLnN0cnVjdHVyZSgpLm9ubHlTdHJ1
Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxs
Q29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29w
ZSkpKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVy
TnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4ob3BlcmFuZCksIGdldChWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUpKSk7CisgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IHdlYWtKU0Nv
bnN0YW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRp
Zmllck51bWJlciwgc3RhdHVzWzBdLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwogICAg
ICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiAr
ODksOSBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAg
ICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVS
ZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBmb3IgKEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNl
cyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50
LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CkBAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Nl
bGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+
IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOwogICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ+IHdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRz
OwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQs
MjEgKzI5NCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBn
ZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRy
dWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGlu
Z3MgdG8gdGhpcy4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAg
ICAgICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0cnVjdHVyZVNldCgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52
YXJpYW50cy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJl
bW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0
YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSYgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGdl
dENhc2Uuc2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChn
ZXRDYXNlLnNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5j
YXNlc1tpLS1dID0gZGF0YS5jYXNlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLmNhc2VzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAx
KQorICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhc2VzLnNpemUoKSAhPSAxKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbWl0
R2V0QnlPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFz
ZVZhbHVlLCBkYXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwg
ZGF0YS5jYXNlc1swXSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTM3NCw4ICszNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMu
bnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tp
XS5jb25zdGFudENoZWNrcygpLmlzRW1wdHkoKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwg
c3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0
YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90eXBlIGNhc2VzLgogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDM4NgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTIsNyArMzkwLDEy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5t
X211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlh
bnRzID0gc3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPmNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE11bHRp
R2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuc3Ry
dWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRo
b2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvTXVsdGlHZXRCeU9mZnNldChkYXRhKTsKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTQzMiw5ICs0MzUsMzEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTspCi0gICAgICAgICAg
ICAgICAgICAgIGFkZENoZWNrcyhvcmlnaW4sIGluZGV4SW5CbG9jaywgc3RhdHVzW2ldLmNvbnN0
YW50Q2hlY2tzKCkpOworCisgICAgICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVz
LnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxHb29kKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9u
KGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9i
amVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBub2RlLT5vcmln
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgY29uZGl0aW9uLm9iamVjdCgpLCBLbm93
bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50
cygpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5C
bG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0sIGlkZW50aWZpZXJOdW1iZXIpOwpAQCAt
NTI5LDQxICs1NTQsNzIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFu
Z2VkOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRl
eEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29u
c3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgeworICAgICAgICAvLyBXaGVuIHdlIGdldCB0byBoZXJlIHdlIGhhdmUgYWxyZWFk
eSBlbWl0dGVkIGFsbCBvZiB0aGUgcmVxdWlzaXRlIGNoZWNrcyBmb3IgZXZlcnl0aGluZy4KKyAg
ICAgICAgLy8gU28sIHdlIGp1c3QgbmVlZCB0byBlbWl0IHdoYXQgdGhlIG1ldGhvZCBvYmplY3Qg
dGVsbHMgdXMgdG8gZW1pdC4KICAgICAgICAgCisgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleElu
QmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZ2V0Q2FzZS5zZXQoKSk7CisKKyAgICAgICAgR2V0QnlP
ZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpJbnZhbGlkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQo
bm9kZSwgbWV0aG9kLmNvbnN0YW50KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBl
bWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBub2RlLT5jaGlsZDEoKSwgaWRlbnRp
Zmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlw
ZTogeworICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25z
dGFudCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbWV0aG9k
LnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldCgKKyAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVzZSksIGlkZW50
aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJs
b2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IEdl
dEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsK
LSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2Ug
Y2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAKICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4
SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAg
ICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZUZvckxvYWQ7Ci0gICAgICAgIGlmICh2YXJpYW50LmFs
dGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5h
dGVCYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZVZh
bHVlLm1fdmFsdWU7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRD
b25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFy
aWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgLy8gV2UgYXJlbid0IHNldCB1cCB0byBoYW5kbGUg
cHJvdG90eXBlIHN0dWZmLgorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlh
bnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1
ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlVmFsdWUubV92YWx1ZSwgdmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKICAgICAgICAgICAgIG1f
Z3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFsdWUpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlh
bnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5CbG9jaywgb3JpZ2luLCB2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGlsZEVkZ2UgPSBFZGdlKGNoaWxkLCBLbm93bkNl
bGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5v
ZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
Tm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkK
KyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVk
Z2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJm
bHksIG5vZGUtPm9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5hZGQoKTsKLSAgICAgICAgZGF0YS5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOworICAgICAg
ICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0g
aWRlbnRpZmllck51bWJlcjsKICAgICAgICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5
T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CkBAIC02NDMsMTUgKzY5OSw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDaGVjayhpbmRleEluQmxvY2ss
IG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFk
ZENoZWNrcygKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY2hlY2tzKQotICAgIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoZWNrcy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIG9y
aWdpbiwgaW5kZXhJbkJsb2NrLCBjaGVja3NbaV0uY29uc3RhbnQoKSwgY2hlY2tzW2ldLnN0cnVj
dHVyZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2Vs
bCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBpZiAobV9ncmFw
aC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUoKSkgPT0gU3RydWN0dXJlUmVnaXN0
ZXJlZEFuZFdhdGNoZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
dm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcs
IENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29t
bW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1
dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmlu
Z1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMjMgQEAg
dm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVy
cmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEm
IGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAv
LyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFr
IG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0g
ICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFk
ZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9u
KQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRp
b246OkVxdWl2YWxlbmNlOgorICAgICAgICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsg
fQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShK
U0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCit2b2lkIERlc2ly
ZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7Cit9CisK
IGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
IHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTg4LDYgKzEwNyw3
IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2lubGlu
ZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9pbmZlcnJlZFZh
bHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1
cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2ly
ZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC05NSw3ICsxMTUsMTggQEAg
Ym9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgIHJldHVybiBtX3Nl
dHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlk
KCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAg
JiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYnVmZmVyVmll
d3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFy
ZVN0aWxsVmFsaWQoKTsKK30KKwordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJEZXNpcmVkIHdhdGNocG9pbnRzOlxuIik7CisgICAgb3V0LnByaW50KCIgICAg
V2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9zZXRzLCBjb250ZXh0KSwgIlxuIik7Cisg
ICAgb3V0LnByaW50KCIgICAgSW5saW5lIHdhdGNocG9pbnQgc2V0czogIiwgaW5Db250ZXh0KG1f
aW5saW5lU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIEluZmVycmVk
IHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsK
KyAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZp
ZXdzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5
IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4
dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlz
aW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJERkdD
b21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNp
bmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
QEAgLTQwLDMzICs0Miw1NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFz
cyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBHZW5lcmljU2V0QWRhcHRv
ciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIFQgc2V0LCBXYXRjaHBvaW50KiB3
YXRjaHBvaW50KQorc3RydWN0IFNldFBvaW50ZXJBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBh
ZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21tb25EYXRhJiBjb21tb24pCiAgICAg
ewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2ludCk7CisgICAgICAgIHJldHVybiBz
ZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOwogICAgIH0KICAgICBz
dGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVl
bkludmFsaWRhdGVkKCk7IH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIFQgc2V0LCBEdW1wQ29udGV4dCopCisgICAgeworICAgICAgICBvdXQucHJpbnQo
UmF3UG9pbnRlcihzZXQpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0
b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0
Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVl
KiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChJbmZl
cnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGluZmVycmVk
VmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwogICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUs
IER1bXBDb250ZXh0KikKKyAgICB7CisgICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKGluZmVy
cmVkVmFsdWUpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2lu
dEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVy
VmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNB
cnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbklu
dmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOwor
ICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEpT
QXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAg
ICAgIG91dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZSh2aWV3KSwgY29udGV4dCkpOworICAgIH0K
K307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBz
dGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
LCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtl
eS5pc1dhdGNoYWJsZSgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KAor
ICAgICAgICBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNv
bnRleHQoa2V5LCBjb250ZXh0KSk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgV2F0
Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBHZW5lcmljU2V0QWRhcHRvcjxXYXRj
aHBvaW50U2V0VHlwZT4+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlw
ZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNs
YXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2ludFNldFR5cGUsIGJvb2w+IFN0YXRlTWFwOwpAQCAt
ODcsNyArMTEyLDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWFsbHlB
ZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8mIHNldCA6IG1fc2V0cykKLSAgICAg
ICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uLndhdGNocG9pbnRzLmFk
ZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwg
Y29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQgPSB0cnVlOwogICAgIH0K
QEAgLTEwNyw2ICsxMzIsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zZXRzLmNvbnRh
aW5zKHNldCk7CiAgICAgfQogCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgICAgICBmb3IgKGNvbnN0IFdhdGNocG9pbnRTZXRUeXBlJiBlbnRyeSA6
IG1fc2V0cykgeworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgIEFk
YXB0b3I6OmR1bXBJbkNvbnRleHQob3V0LCBlbnRyeSwgY29udGV4dCk7CisgICAgICAgIH0KKyAg
ICB9CisKIHByaXZhdGU6CiAgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZT4gbV9zZXRzOwog
ICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTEyMiw2ICsxNTYsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAgICB2b2lkIGFkZExhemlseShKU0Fy
cmF5QnVmZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3Ug
ZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdo
aWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90
aGVyIGJvb2trZWVwaW5nLgorICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAK
ICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21tb25EYXRhJik7CkBAIC0xNDQsMTIg
KzE4MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5p
c1dhdGNoZWQodmlldyk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0
cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5lU2V0czsKICAgICBHZW5lcmljRGVz
aXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9p
bmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZm
ZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7
CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShy
ZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsMTQgQEAgRGVz
aXJlZFdlYWtSZWZlcmVuY2VzOjp+RGVzaXJlZFdlYWtSZWZlcgogCiB2b2lkIERlc2lyZWRXZWFr
UmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBtX3JlZmVyZW5jZXMu
YWRkKGNlbGwpOworICAgIGlmIChjZWxsKQorICAgICAgICBtX3JlZmVyZW5jZXMuYWRkKGNlbGwp
OworfQorCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTVmFsdWUgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhZGRMYXppbHkodmFsdWUu
YXNDZWxsKCkpOwogfQogCiBib29sIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6Y29udGFpbnMoSlND
ZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IAogCiBjbGFzcyBDb2RlQmxvY2s7
CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFz
cyBWTTsKIApAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6CiAgICAgfkRlc2lyZWRXZWFrUmVmZXJl
bmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXppbHkoSlNDZWxsKik7CisgICAgdm9pZCBhZGRMYXpp
bHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsKICAgICAKICAgICB2b2lk
IHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDggKzI1Nyw4IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBpZiAobm9kZS0+aGFz
TXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYg
ZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAgICAgICAgIG91dC5wcmludChj
b21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClbZGF0
YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250ZXh0KSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNlc1tpXSwgY29udGV4dCkpOwogICAg
IH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7
CkBAIC01MzAsNiArNTMwLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQwogICAgICAgICBpZiAodmFsdWUtPnBvaW50c1RvSGVhcCgpKQogICAgICAgICAgICAgb3V0
LnByaW50KCIgICAgIiwgaW5Db250ZXh0KCp2YWx1ZSwgJm15Q29udGV4dCksICJcbiIpOwogICAg
IH0KKworICAgIG91dC5wcmludChpbkNvbnRleHQod2F0Y2hwb2ludHMoKSwgJm15Q29udGV4dCkp
OwogICAgIAogICAgIGlmICghbXlDb250ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICBteUNvbnRl
eHQuZHVtcChvdXQpOwpAQCAtODQ4LDYgKzg1MCwzMCBAQCB2b2lkIEdyYXBoOjpjbGVhckZsYWdz
T25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCitib29sIEdyYXBoOjp3YXRjaENvbmRpdGlv
bihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIGlmICgha2V5Lmlz
V2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3BsYW4ud2Vh
a1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAgaWYgKGtleS5oYXNQcm90
b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucHJv
dG90eXBlKCkpOworICAgIGlmIChrZXkuaGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICBtX3Bs
YW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5yZXF1aXJlZFZhbHVlKCkpOworICAgIAor
ICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKKworICAgIGlmIChrZXkua2lu
ZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkKKyAgICAgICAgbV9zYWZlVG9Mb2Fk
LmFkZChzdGQ6Om1ha2VfcGFpcihrZXkub2JqZWN0KCksIGtleS5vZmZzZXQoKSkpOworICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3Qq
IGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gbV9zYWZlVG9Mb2Fk
LmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOworfQorCiBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVu
ZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2sp
OwpAQCAtMTAyMCw4ICsxMDQ2LDEyIEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJv
cGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNW
YWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0
dXJlLmlzQ2xvYmJlcmVkKCkpCisgICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVy
ZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBqdXN0IGNvbnZlcnRl
ZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bgorICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1mb2xkIHRoZSBwcm9wZXJ0eS4KKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI3MQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICAKICAgICByZXR1cm4gdHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBzdHJ1Y3R1cmUuc2V0KCksIG9mZnNldCk7CiB9CkBAIC0x
MTY3LDE3ICsxMTk3LDkgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpOwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6ZSgpOyBqLS07KQotICAgICAgICAgICAg
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihzZXRb
al0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gbWFyayBhbnl0aGlu
ZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAotICAgICAgICAgICAg
ICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERv
bid0IG5lZWQgdG8gbWFyayB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2FsbExpbmtTdGF0
dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0LgotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA6IGdldENhc2Uuc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHN0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4
NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtNjY1LDYgKzY2NSwxNSBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZElkZW50aWZpZXJz
JiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQogICAgIERlc2ly
ZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7
IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbnZh
bGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEgUHJlc2VuY2UgY29uZGl0aW9uLAorICAg
IC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBxdWVyeSBpZiB0aGUgY29uZGl0aW9uIGhv
bGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mga25vd3MKKyAgICAvLyB3aGF0J3MgZ29p
bmcgb24uCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYpOworCisgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20g
dGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKKyAg
ICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGgg
d2F0Y2hDb25kaXRpb24oKS4KKyAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwg
UHJvcGVydHlPZmZzZXQpOworICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVz
c0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3Io
SW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkBAIC04NDQsNiArODUzLDcgQEAgcHVibGljOgogICAg
IFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAg
IEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNz
Pj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlx
dWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5dGVjb2RlS2lsbHM7CisgICAgSGFzaFNldDxzdGQ6
OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKICAgICBEb21p
bmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJl
cmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgR2V0QnlPZmZzZXRN
ZXRob2Q6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoiKTsKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludChw
b2ludGVyRHVtcEluQ29udGV4dChjb25zdGFudCgpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQo
b2Zmc2V0KCksICJAIiwgcG9pbnRlckR1bXBJbkNvbnRleHQocHJvdG90eXBlKCksIGNvbnRleHQp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBHZXRCeU9mZnNldE1ldGhvZDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBu
dWxscHRyKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSwgIjoiLCBpbkNvbnRleHQobV9tZXRob2Qs
IGNvbnRleHQpKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgR2V0QnlPZmZzZXRNZXRob2Q6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQo
IkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICBvdXQucHJpbnQo
IkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGcm9tUHJvdG90eXBlIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKyNkZWZpbmUgREZHTXVsdGlHZXRCeU9m
ZnNldERhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJEdW1wQ29udGV4
dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRnJvemVuVmFsdWU7CisK
K2NsYXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAg
ICAgICBJbnZhbGlkLAorICAgICAgICBDb25zdGFudCwKKyAgICAgICAgTG9hZCwKKyAgICAgICAg
TG9hZEZyb21Qcm90b3R5cGUKKyAgICB9OworICAgIAorICAgIEdldEJ5T2Zmc2V0TWV0aG9kKCkK
KyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFudChGcm96ZW5WYWx1ZSogdmFsdWUpCisgICAgewor
ICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3RhbnQgPSB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEdldEJ5T2Zmc2V0TWV0aG9k
IGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRN
ZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZDsKKyAgICAgICAgcmVz
dWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBsb2FkRnJvbVByb3RvdHlwZShG
cm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAg
ICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBM
b2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5wcm90b3R5cGUgPSBwcm90
b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkOyB9CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICBy
ZXR1cm4gdS5jb25zdGFudDsKKyAgICB9CisgICAgCisgICAgRnJvemVuVmFsdWUqIHByb3RvdHlw
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWRGcm9tUHJvdG90
eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IExvYWQgfHwga2luZCgpID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0
dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHVuaW9uIHsKKyAgICAgICAgRnJvemVu
VmFsdWUqIGNvbnN0YW50OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRnJvemVuVmFs
dWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAg
ICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1fa2luZDsKK307CisKK2NsYXNzIE11bHRp
R2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZShjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCkKKyAgICAgICAgOiBt
X3NldChzZXQpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgU3RydWN0dXJlU2V0JiBzZXQoKSB7IHJldHVybiBtX3NldDsgfQorICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25zdCBHZXRC
eU9mZnNldE1ldGhvZCYgbWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRob2Q7IH0KKyAgICAK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0
cnVjdHVyZVNldCBtX3NldDsKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBtX21ldGhvZDsKK307CisK
K3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2VzOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpLaW5k
KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXBvY2guaCIKICNpbmNsdWRlICJERkdM
YXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgiCiAjaW5j
bHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1
ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwxMSArNjYsNiBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vz
c0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiB9OwogCi1zdHJ1Y3QgTXVs
dGlHZXRCeU9mZnNldERhdGEgewotICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7Ci0gICAg
VmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKLX07Ci0KIHN0cnVjdCBNdWx0aVB1
dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKICAgICBWZWN0
b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjQsMTAgKzMyNCwxOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zm
c2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CisKKyAgICAgICAgaWYgKHN0
YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkKSB7Cisg
ICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9IG5vZGUtPmNoaWxkMSgpLT5keW5h
bWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAgICAgICAgICAgICAgIGlmIChncmFw
aC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAgaWYgKHZhbHVlLmlzSW5maW5pdGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9k
ZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgaWYgKCF2YWx1ZVtpXS0+aXNWYWxp
ZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMzNyw0
MiArMzQ1LDI4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIC8vIFdlIGNhbid0
IGFsd2F5cyBndWFyYW50ZWUgdGhhdCB0aGUgTXVsdGlHZXRCeU9mZnNldCBpcyBzYWZlIHRvIGV4
ZWN1dGUgaWYgaXQKLSAgICAgICAgLy8gY29udGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5cGVzLiBX
ZSBrbm93IHRoYXQgaXQgd29uJ3QgbG9hZCBmcm9tIHRob3NlIHByb3RvdHlwZXMgaWYKLSAgICAg
ICAgLy8gd2Ugd2F0Y2ggdGhlIG11dGFiaWxpdHkgb2YgdGhlIHByb3BlcnRpZXMgYmVpbmcgbG9h
ZGVkLiBTbywgaGVyZSB3ZSB0cnkgdG8KLSAgICAgICAgLy8gY29uc3RhbnQtZm9sZCBwcm90b3R5
cGUgbG9hZHMsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSBjbGFpbSB0aGF0IHdlIGNhbm5vdCBob2lz
dC4gV2UKLSAgICAgICAgLy8gYWxzbyBrbm93IHRoYXQgYSBsb2FkIGlzIHNhZmUgdG8gZXhlY3V0
ZSBpZiB3ZSBhcmUgd2F0Y2hpbmcgdGhlIHByb3RvdHlwZSdzCi0gICAgICAgIC8vIHN0cnVjdHVy
ZS4KLSAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG5vZGUtPm11
bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMpIHsKLSAgICAgICAgICAgIGlmICghdmFyaWFu
dC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIHByb3Rv
dHlwZSBsb2FkLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJhc2UgPSB2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBncmFwaC5mcmVlemUoYmFz
ZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3Ry
dWN0dXJlc0FyZVdhdGNoZWQKLSAgICAgICAgICAgICAgICAmJiBmcm96ZW4tPnN0cnVjdHVyZSgp
LT5kZmdTaG91bGRXYXRjaCgpCi0gICAgICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUo
KS0+aXNWYWxpZE9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgIC8v
IFdlJ3JlIGFscmVhZHkgd2F0Y2hpbmcgdGhhdCBpdCdzIHNhZmUgdG8gbG9hZCBmcm9tIHRoaXMu
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPSBncmFwaC50cnlHZXRDb25zdGFu
dFByb3BlcnR5KAotICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJp
YW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBpZiAo
IWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgY29uc3RhbnQt
Zm9sZCBhIHByb3RvdHlwZSBsb2FkLiBUaGVyZWZvcmUsIHdlIHNob3VsZG4ndCBob2lzdAotICAg
ICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHNhZmV0eSBvZiB0aGUgbG9hZCBkZXBlbmRzIG9u
IHN0cnVjdHVyZSBjaGVja3Mgb24gdGhlIHByb3RvdHlwZSwKLSAgICAgICAgICAgICAgICAvLyBh
bmQgd2UncmUgdG9vIGNoZWFwIHRvIHZlcmlmeSB0aGF0IGhlcmUuCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAvLyBjb250YWlucyBsb2FkcyBmcm9tIHByb3RvdHlwZXMu
IElmIHRoZSBsb2FkIHJlcXVpcmVzIGEgY2hlY2sgaW4gSVIsIHdoaWNoIGlzIHJhcmUsIHRoZW4K
KyAgICAgICAgLy8gd2UgY3VycmVudGx5IGNsYWltIHRoYXQgd2UgZG9uJ3Qga25vdyBpZiBpdCdz
IHNhZmUgdG8gZXhlY3V0ZSBiZWNhdXNlIGZpbmRpbmcgdGhhdAorICAgICAgICAvLyBjaGVjayBp
biB0aGUgYWJzdHJhY3Qgc3RhdGUgd291bGQgYmUgaGFyZC4gSWYgdGhlIGxvYWQgcmVxdWlyZXMg
d2F0Y2hwb2ludHMsIHdlIGp1c3QKKyAgICAgICAgLy8gY2hlY2sgaWYgd2UncmUgbm90IGluIGEg
Y2xvYmJlcmVkIHN0YXRlIChpLmUuIGluIGJldHdlZW4gYSBzaWRlIGVmZmVjdCBhbmQgYW4KKyAg
ICAgICAgLy8gaW52YWxpZGF0aW9uIHBvaW50KS4KKyAgICAgICAgZm9yIChjb25zdCBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2Fz
ZXMpIHsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0
aG9kKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OiAvLyBPSyBiZWNhdXNlIGNvbnN0
YW50cyBhcmUgYWx3YXlzIHNhZmUgdG8gZXhlY3V0ZS4KKyAgICAgICAgICAgIGNhc2UgR2V0QnlP
ZmZzZXRNZXRob2Q6OkxvYWQ6IC8vIE9LIGJlY2F1c2UgdGhlIE11bHRpR2V0QnlPZmZzZXQgaGFz
IGl0cyBvd24gY2hlY2tzIGZvciBsb2FkaW5nIGZyb20gc2VsZi4KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90
eXBlOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgT0sgaWYgdGhlIHN0YXRlIGlzbid0IGNsb2Ji
ZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2UuCisgICAgICAgICAgICAgICAgaWYg
KHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpICE9IFN0cnVjdHVyZXNBcmVXYXRjaGVkKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFn
cmFwaC5pc1NhZmVUb0xvYWQobWV0aG9kLnByb3RvdHlwZSgpLT5jYXN0PEpTT2JqZWN0Kj4oKSwg
bWV0aG9kLm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwgZWl0aGVyOgotICAgICAgICAgICAgLy8gLSBOb3Qg
bG9hZCBmcm9tIHRoZSBwcm90b3R5cGUgYmVjYXVzZSBjb25zdGFudCBmb2xkaW5nIHdpbGwgc3Vj
Y2VlZCBpbiB0aGUKLSAgICAgICAgICAgIC8vICAgYmFja2VuZCwgb3IKLSAgICAgICAgICAgIC8v
IC0gRW1pdCBpbnZhbGlkIGNvZGUgdGhhdCBmYWlscyB3YXRjaHBvaW50IGNoZWNrcy4gVGhpcyBj
b3VsZCBoYXBwZW4gaWYgdGhlCi0gICAgICAgICAgICAvLyAgIHByb3BlcnR5IGJlY29tZXMgbXV0
YWJsZSBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB3ZSBhbHJlYWR5IHNldCB0aGUgd2F0Y2hwb2lu
dAotICAgICAgICAgICAgLy8gICBhYm92ZS4gVGhpcyBjYXNlIGlzIE9LIHNpbmNlIHRoZSBjb2Rl
IHdpbGwgZmFpbCB3YXRjaHBvaW50IGNoZWNrcyBhbmQgbmV2ZXIKLSAgICAgICAgICAgIC8vICAg
Z2V0IGluc3RhbGxlZC4KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDE1ICs4Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlH
ZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+
bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lz
dGVyU3RydWN0dXJlcyh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBj
aGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUg
YmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byB3YXRj
aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ug
d2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZXMoZ2V0Q2FzZS5zZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4MzcsMjQgKzM4MzcsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIE11
bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
OwogCi0gICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAo
ZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBj
cmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRoIHplcm8gaW5wdXRzLiBMTFZNIGRvZXNuJ3QgbGlr
ZSB0aGF0LgogICAgICAgICAgICAgdGVybWluYXRlKEJhZENhY2hlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAy
PiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2Nr
LCAyPiBibG9ja3MoZGF0YS5jYXNlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBjYXNlICIsIGkpKTsKICAgICAgICAg
TEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNl
dCBmYWlsIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY29udGludWF0aW9uIikpOwogICAgICAgICAK
ICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBTdHJ1Y3R1cmVT
ZXQgYmFzZVNldDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZh
cmlhbnRzW2ldOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdmFyaWFudC5zdHJ1Y3R1
cmVTZXQoKS5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KClbal07CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNlLnNldCgpW2pdOwogICAgICAgICAgICAgICAgIGJh
c2VTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRj
aENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7
CiAgICAgICAgICAgICB9CkBAIC0zODY1LDI5ICszODY1LDM2IEBAIHByaXZhdGU6CiAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CiAgICAgICAgIAogICAg
ICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9j
a3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNl
ID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9
IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0g
OiBleGl0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFu
dCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsKLSAgICAgICAgICAg
IEpTVmFsdWUgY29uc3RhbnRSZXN1bHQ7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5h
dGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdGFudFJlc3VsdCA9IG1fZ3JhcGgudHJ5
R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5hbHRlcm5h
dGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb25zdGFudFJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudFJl
c3VsdCkpOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3
aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUobWV0aG9kLmNvbnN0YW50KCktPnZh
bHVlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogewogICAgICAgICAgICAgICAgIExW
YWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcih2
YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkKQogICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBiYXNlOwotICAgICAgICAgICAgICAgIGlm
ICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcihtZXRob2Qu
cHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNJ
bmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0
dGVyZmx5KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkocHJvcGVydHlC
YXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQcm9wZXJ0eSgKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZz
ZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHJlc3VsdCkpOwog
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcg
QEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0
ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAg
ICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAgICAgICAg
IHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0NyArMTMyLDMzIEBAIHN0YXRpYyB2
b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAogICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQ
UikKIHsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0
dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0
cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChj
b2RlQmxvY2spKTsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAg
IC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3Ry
dWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgICAgICAvLyB0aGlzIGluIGRlYnVnIG1v
ZGVzLgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
b2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBv
ayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBqaXQsCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24o
UmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2ludCk7Ci0gICAgICAgICAgICBvay5saW5rKCZqaXQp
OwotICAgICAgICB9CisgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1
Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCisgICAgICAgICAgICBzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2Jq
ZWN0KSwgc2NyYXRjaEdQUik7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlv
bi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSkpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNv
bmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
Ci0gICAgICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJl
KSk7CisgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAK
LXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHBy
b3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCiAgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQog
ewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LAotICAgICAgICBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQs
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQpAQCAtMjk2
LDExICsyODIsMTMgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcgog
CiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJ
ZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5j
dGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCBzaXplX3QgY291bnQsCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0
KiB3YXRjaHBvaW50U2V0LAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29k
ZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1
YlJvdXRpbmUpCisgICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisg
ICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwKKyAgICBXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYg
c3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1
cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworICAgIAogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJl
Z3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzNyArMzM0LDMxIEBAIHN0YXRpYyBib29sIGdlbmVy
YXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3Bl
cnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHko
cHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCiAgICAg
aWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJl
ID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGlmIChj
aGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVh
ZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkg
ewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90
b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVj
dHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0
cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkK
LSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHko
cHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAg
ICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3Rv
T2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAg
ICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY3Vy
clN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoIXByb3Rv
T2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKKyAg
ICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9uU2V0LCBj
b2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwor
CisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBTdHJ1Y3R1cmUqIGN1
cnJTdHJ1Y3R1cmU7CisgICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAgICB9CiAgICAgCi0gICAgY3Vy
clN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zm
c2V0KTsKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAg
aWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxk
IGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQg
ZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJn
ZXRGcm9tUHJveHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdl
dEdQUik7Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0dWJKaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRv
IGFsbCB0aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8K
QEAgLTYyNSw5ICs2MDcsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2Vs
bChWCiAgICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7
CiAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQotICAgIEFTU0VSVCghc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBpZiAodHlwZUlu
Zm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVBy
b3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAg
ICAgcmV0dXJuIEF0dGVtcHRUb0NhY2hlOwpAQCAtODI1LDIxICs4MDYsMjEgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIH0KIAogICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVk
T2Zmc2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICBz
aXplX3QgY291bnQgPSAwOwogICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9
IGJhc2VWYWx1ZSkgewogICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwogCiAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAg
IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQu
aW1wbCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90
b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKAotICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKGNvdW50ID09
IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50Lmlt
cGwoKSk7CisKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKworICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5z
ZXQoKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5v
ZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9
IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8pOwpAQCAtODUwLDcgKzgzMSw3
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIGJvb2wgcmVzdWx0ID0gZ2Vu
ZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3Rv
bUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCAKKyAg
ICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1Yklu
Zm8sIGNvbmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgpLCBvZmZzZXQsIAogICAgICAgICBzdHJ1
Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAKICAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3Vy
cmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKQEAgLTg2OSw3ICs4
NTAsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAg
ICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwK
LSAgICAgICAgcHJvdG90eXBlQ2hhaW4sIGNvdW50KSk7CisgICAgICAgIGNvbmRpdGlvblNldCkp
OwogICAgIAogICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywg
c3R1YlJvdXRpbmUuZ2V0KCkpOwogICAgIApAQCAtOTkxLDI2ICs5NzIsMjggQEAgc3RhdGljIGJv
b2wgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgU3Ry
dWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoRXhlY1N0YXRl
KiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNp
dGlvblN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVj
dHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCisg
ICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQogewogICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgb2xkU3RydWN0dXJlID0gc3Ry
dWN0dXJlOwogICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBwcm9w
ZXJ0eU9mZnNldDsKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBpZGVudC5p
bXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsKIAogICAgIGlmICghc3RydWN0dXJlIHx8ICFzdHJ1
Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCAhc3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhl
IGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKICAgICAvLyBl
bm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgogICAgIGlmIChHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyA8IDYKICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQogICAgICAgICAmJiBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBTa2lwIG9wdGltaXppbmcg
dGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKQEAg
LTEwMTgsMTQgKzEwMDEsMTQgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25T
dHViQQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQh
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAog
ICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMs
IHN0cnVjdHVyZSkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YgorICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgeworICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3MoCisgICAgICAgICAgICAqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUo
KSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91
dGluZTsKQEAgLTEwODEsMTcgKzEwNjQsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJh
bnNpdGlvblN0dWJBCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKICAg
ICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIG9sZFN0cnVjdHVy
ZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwgZmFpbHVyZUNhc2VzLAotICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAKLSAg
ICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAo
Kml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1
YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAg
Y29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1
cmVDYXNlcywgc2NyYXRjaEdQUjEpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOwogICAgIApAQCAtMTIyNiw3ICsxMjAwLDcgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1p
dFB1dFRyYW5zaXRpb25TdHViQQogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAg
ICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VS
ZWdpc3RlcnMoKSkKQEAgLTEyNTQsOCArMTIyOCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4
ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCiAgICAgICAgICAgICBzdHJ1Y3R1
cmUpOwotCi0gICAgcmV0dXJuIG9sZFN0cnVjdHVyZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0xMjc5LDEyICsxMjUzLDExIEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAoc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewogICAgICAgICBp
ZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewogCi0gICAg
ICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFu
ZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1Yklu
Zm8sIHB1dEtpbmQpOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRp
b25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2lu
ZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
cHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAg
ICAgICAgCiAgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAogICAgICAgICAgICAgICAgIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCkBAIC0xMjkyLDcgKzEyNjUs
NyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0
UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRT
dHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsK
KyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQpAQCAtMTMxMCwyMCArMTI4MywzMSBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICYmIHN0dWJJbmZv
LnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKIAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9m
ZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFzZVZhbHVl
ICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQs
IG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJh
c2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewor
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAg
ICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1
Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuaW1wbCgp
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0K
KyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVy
dHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVh
YmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0
aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0
OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBz
dHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAg
ICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1
YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNs
b3QuYmFzZSgpLAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRy
LAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpLApAQCAtMTMzNCw3ICsxMzE4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6
c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAog
ICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0
dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJl
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5l
KSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0
ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1
bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAt
MTM3OCwxNyArMTM2MiwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRC
eUlkCiAgICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAot
ICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0
dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJl
KSAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFl
bWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1
cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMp
OwogICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAg
ICAgICAgIGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0
cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBw
cm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAog
ICAgICAgICB9IGVsc2UgewpAQCAtMTQyMSwyMSArMTQwNCwzMiBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRj
aC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xv
dC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUs
IG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJv
dG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9
CiAgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3QuYmFz
ZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAg
ICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBvZmZzZXQgPSBzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0
ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRL
aW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHVi
KAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21G
b3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBl
eGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1Yklu
Zm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNlKCksCiAgICAgICAgICAgICBvZmZzZXQsIHN0cnVj
dHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkp
LApAQCAtMTQ0Niw3ICsxNDQwLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxk
UHV0QnlJZAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAog
ICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAg
ICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0
QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1
YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTQ4NSwxMSAr
MTQ3OSwxNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3Ry
dWN0dXJlKCp2bSk7CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKLSAg
ICBKU1ZhbHVlIGZvdW5kU2xvdEJhc2UgPSB3YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpT
VmFsdWUoKTsKLSAgICBzaXplX3QgY291bnQgPSAhZm91bmRTbG90QmFzZSB8fCBmb3VuZFNsb3RC
YXNlICE9IGJhc2UgPyAKLSAgICAgICAgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFj
Y2VzcyhleGVjLCBzdHJ1Y3R1cmUsIGZvdW5kU2xvdEJhc2UsIGlkZW50LCBvZmZzZXRJZ25vcmVk
KSA6IDA7Ci0gICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKHdhc0ZvdW5kKSB7
CisgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0gYmFzZSkgeworICAgICAgICAgICAgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisg
ICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5TWlzcygKKyAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgIH0KKyAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAog
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0OwpAQCAtMTUxNCw3ICsxNTE0LDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJl
cGF0Y2hJbigKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIH0KICAgICAK
LSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4
ZWMpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgCiAgICAg
ewpAQCAtMTU0NSwxOCArMTU0NCw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBh
dGNoSW4oCiAgICAgICAgIGlmIChzbG90LndhdGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNs
b3Qud2F0Y2hwb2ludFNldCgpLT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2sp
KTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgICAg
ICBKU09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBl
Rm9yTG9va3VwKGV4ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUg
PSBwcm90b3R5cGUtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJvdG9TdHJ1Y3R1cmUsIGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50
eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAg
ICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1
cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbnMoCisgICAgICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0
R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCi0jaW5jbHVkZSA8
d3RmL0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dCkKLSAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKLXsKLSAgICBBU1NFUlQobV9wcm90b3R5
cGUuaXNOdWxsKCkgfHwgbV9wcm90b3R5cGUuaXNPYmplY3QoKSk7Ci0gICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50
ID0gYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBw
ZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZCkK
LSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKGhl
YWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgaWYgKG1fcHJv
dG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1
cnJlbnQgPSBhc09iamVjdChtX3Byb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50OyBjdXJy
ZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCi0gICAgICAgIG1fdmVj
dG9yLmFwcGVuZChjdXJyZW50KTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBT
dHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVG
b3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIG1fdmVjdG9yLmFwcGVuZChwcm90b3R5
cGVTdHJ1Y3R1cmUpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVy
ZUNoYWluKiBjaGFpbikKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9i
YWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGNoYWluLT5oZWFkKClbaV07
ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwot
fQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwg
dW5zaWduZWQgY291bnQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xv
YmFsT2JqZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1J
bnRlbmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpCi17Ci19Ci0K
LWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKLXsKLSAg
ICBKU1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3RvdHlwZTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGFzT2Jq
ZWN0KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAhPSBtX3ZlY3RvcltpXSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IG1fdmVjdG9y
W2ldLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiogY2hhaW4p
IGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBjaGFpbi0+aGVhZCgpW2ldLmdldCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoY2hhaW4tPmhlYWQo
KVttX3ZlY3Rvci5zaXplKCldKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVU
byhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVu
dGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRP
bmx5IHwgQWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbV92ZWN0b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVy
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLUpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW5hbFByb3RvdHlw
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rvci5pc0VtcHR5KCkpOwotICAgIGlmICht
X3ZlY3Rvci5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGFzT2JqZWN0KG1fcHJvdG90eXBl
KTsKLSAgICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0
b3JlZFByb3RvdHlwZSgpKTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpvcGVy
YXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotewotICAg
IHJldHVybiBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2dsb2JhbE9iamVjdAotICAgICAgICAm
JiBtX3Byb3RvdHlwZSA9PSBvdGhlci5tX3Byb3RvdHlwZQotICAgICAgICAmJiBtX3ZlY3RvciA9
PSBvdGhlci5tX3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpnYXRo
ZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKSBjb25zdAotewot
ICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBKU09iamVjdCogY3VycmVu
dE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUq
IGN1cnJlbnRTdHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAgICAgdmVjdG9yLmFwcGVuZChDb25zdGFu
dFN0cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRTdHJ1Y3R1cmUpKTsKLSAgICAg
ICAgY3VycmVudFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1
cChtX2dsb2JhbE9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hh
aW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFsT2JqZWN0KTsKLSAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkVmFsdWUoJm1fcHJvdG90eXBlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRQb2ludGVyKCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0
LCAwKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5w
cmludCgKLSAgICAgICAgIihnbG9iYWwgPSAiLCBSYXdQb2ludGVyKG1fZ2xvYmFsT2JqZWN0KSwg
IiwgaGVhZCA9ICIsCi0gICAgICAgIGluQ29udGV4dChtX3Byb3RvdHlwZSwgY29udGV4dCksICIs
IHZlY3RvciA9IFsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29t
bWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9yW2ldLCBjb250ZXh0KSk7Ci0gICAgb3V0
LnByaW50KCJdKSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4u
aAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZpbmUgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bl9oCi0KLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0
dXJlQ2hhaW47Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1wQ29udGV4dDsKLQotY2xhc3MgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVuZGVkU3RydWN0dXJlQ2hh
aW4+IHsKLXB1YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSopOwotICAgIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVh
ZCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291
bnQpOwotICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7Ci0gICAgCi0gICAgYm9vbCBpc1N0
aWxsVmFsaWQoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoU3RydWN0dXJlQ2hhaW4qKSBjb25z
dDsKLSAgICBib29sIG1heUludGVyY2VwdFN0b3JlVG8oVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
Ci0gICAgYm9vbCBpc05vcm1hbGl6ZWQoKTsKLSAgICAKLSAgICBib29sIHRha2VzU2xvd1BhdGhJ
bkRGR0ZvckltcHVyZVByb3BlcnR5KCk7Ci0gICAgCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBj
b25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAgIAotICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0gICAgU3RydWN0dXJlKiBhdChzaXplX3Qg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsgfQotICAgIFN0cnVjdHVyZSog
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAg
IAotICAgIEpTT2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0OwotICAgIAotICAgIFN0
cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmxhc3QoKTsgfQotICAgIAot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluJikgY29uc3Q7
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVy
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9y
JikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAg
SlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotICAgIEpTVmFsdWUgbV9wcm90b3R5cGU7
Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDE4NzYwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2VsbCgpIGNvbnN0Owog
ICAgIEpTQ2VsbCogYXNDZWxsKCkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBp
c1ZhbGlkQ2FsbGVlKCk7Ci0gICAgICAgIAorCiAgICAgSlNWYWx1ZSBzdHJ1Y3R1cmVPclVuZGVm
aW5lZCgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MjMsNiArMjcyMywxMyBAQCBKU09i
amVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsK
IH0KIAordm9pZCBKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeShWTSYgdm0pCit7CisgICAg
RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBv
aW50RmlyZTsKKyAgICBzZXRTdHJ1Y3R1cmUoCisgICAgICAgIHZtLCBTdHJ1Y3R1cmU6OnRvQ2Fj
aGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksICZkZWZlcnJlZFdh
dGNocG9pbnRGaXJlKSk7Cit9CisKIHZvaWQgSlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJG
bGF0dGVuaW5nKFZNJiB2bSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qg
b3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKIHsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRo
aXMtPmJ1dHRlcmZseSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MjksMTAgKzYyOSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0m
LCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1
cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiwgU3RydWN0dXJlKik7CiAKLSAg
ICB2b2lkIGNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mIHZtKQotICAgIHsKLSAgICAgICAgc2V0U3Ry
dWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSh2bSkpKTsKLSAgICB9CisgICAgdm9pZCBjb252ZXJ0VG9EaWN0aW9uYXJ5KFZN
Jik7CiAKICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KFZNJiB2bSkKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lv
biAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5NCw0OCArMTk0LDYgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGpzQWRkKENhbGxGcmFtZSogYwogCiAjZGVmaW5lIEludmFsaWRQcm90b3R5cGVDaGFpbiAoc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKIAotaW5saW5lIHNpemVfdCBub3JtYWxp
emVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgc2xvdE9mZnNldCkKLXsKLSAgICBWTSYgdm0gPSBj
YWxsRnJhbWUtPnZtKCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgCi0gICAgd2hp
bGUgKDEpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAg
cmV0dXJuIEludmFsaWRQcm90b3R5cGVDaGFpbjsKLQotICAgICAgICBjb25zdCBUeXBlSW5mbyYg
dHlwZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0gICAgICAgIGlmICh0eXBlSW5mby5o
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVy
dHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFByb3RvdHlw
ZUNoYWluOwotICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7Ci0KLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZp
bmQgc2xvdEJhc2UgaW4gdGhlIGJhc2UncyBwcm90b3R5cGUgY2hhaW4sIHRoZW4gdGhlIGJhc2UK
LSAgICAgICAgLy8gbXVzdCBiZSBhIHByb3h5IGZvciBhbm90aGVyIG9iamVjdC4KLQotICAgICAg
ICBpZiAodi5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKCFzbG90QmFzZSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUHJvdG90eXBlQ2hhaW47
Ci0gICAgICAgIH0KLQotICAgICAgICBKU0NlbGwqIGNlbGwgPSB2LmFzQ2VsbCgpOwotICAgICAg
ICBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAvLyBTaW5jZSB3ZSdy
ZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBp
dAotICAgICAgICAvLyBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgotICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgc3RydWN0
dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgYXNPYmplY3QoY2VsbCkpOwotICAg
ICAgICAgICAgaWYgKHNsb3RCYXNlID09IGNlbGwpCi0gICAgICAgICAgICAgICAgc2xvdE9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICAgICAgfQotICAgICAg
ICArK2NvdW50OwotCi0gICAgICAgIGlmIChzbG90QmFzZSA9PSBjZWxsKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KIGlubGluZSBz
aXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKQEAgLTI1
OCwyMyArMjE2LDYgQEAgaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbihDYQog
ICAgIH0KIH0KIAotaW5saW5lIGJvb2wgaXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6ZWQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgZm9y
ICg7OykgewotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgaWYgKHYuaXNOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBzdHJ1
Y3R1cmUgPSB2LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIAotICAgICAgICBp
ZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3BlcmF0aW9uc19o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgZWxzZQogICAgICAgICBtYXhUcmFuc2l0aW9u
TGVuZ3RoID0gc19tYXhUcmFuc2l0aW9uTGVuZ3RoOwogICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25Db3VudCgpID4gbWF4VHJhbnNpdGlvbkxlbmd0aCkgewotICAgICAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25h
cnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKICAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZSAhPSB0cmFuc2l0aW9uKTsKICAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRk
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm4gdHJhbnNpdGlv
bjsKQEAgLTQ4OSwxMSArNDg5LDExIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVD
aGFuZ2VUcmEKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBE
aWN0aW9uYXJ5S2luZCBraW5kKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRy
YW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2lu
ZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQog
ewogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAg
ICAKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7Cisg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVk
KTsKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7CkBAIC01MDcsOSArNTA3
LDkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaQogICAgIHJldHVy
biB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0
aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZp
cmUqIGRlZmVycmVkKQogewotICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kKTsKKyAgICByZXR1cm4gdG9EaWN0aW9uYXJ5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCwgZGVmZXJyZWQp
OwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC03NjEsNiArNzYxLDEwIEBA
IHZvaWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKIFdhdGNocG9pbnRTZXQq
IFN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoVk0mIHZt
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFpc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpKTsKKworICAgIC8vIEluIHNvbWUgcGxhY2VzIGl0J3MgY29udmVuaWVudCB0byBj
YWxsIHRoaXMgd2l0aCBhbiBpbnZhbGlkIG9mZnNldC4gU28sIHdlIGRvIHRoZSBjaGVjayBoZXJl
LgorICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIGFsbG9jYXRlUmFyZURh
dGEodm0pOwpAQCAtNzgxLDExICs3ODUsNyBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yCiB7CiAgICAgQVNTRVJUKCFpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsK
ICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBnZXQodm0sIHByb3BlcnR5TmFtZSk7
Ci0gICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0
KTsKKyAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIGdldCh2bSwg
cHJvcGVydHlOYW1lKSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5UmVw
bGFjZW1lbnQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkBAIC0xMTE3LDYgKzExMTcs
MTcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgIAogICAg
IGlmIChtX3Byb3RvdHlwZS5nZXQoKS5pc0NlbGwoKSkKICAgICAgICAgb3V0LnByaW50KCIsIFBy
b3RvOiIsIFJhd1BvaW50ZXIobV9wcm90b3R5cGUuZ2V0KCkuYXNDZWxsKCkpKTsKKworICAgIHN3
aXRjaCAoZGljdGlvbmFyeUtpbmQoKSkgeworICAgIGNhc2UgTm9uZURpY3Rpb25hcnlLaW5kOgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZERpY3Rpb25hcnlLaW5kOgorICAgICAgICBv
dXQucHJpbnQoIiwgRGljdGlvbmFyeSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVuY2Fj
aGVkRGljdGlvbmFyeUtpbmQ6CisgICAgICAgIG91dC5wcmludCgiLCBVbmNhY2hlYWJsZURpY3Rp
b25hcnkiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAogICAgIG91dC5wcmludCgiXSIp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2
OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVy
dHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNl
dCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3Rv
dHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNp
dGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0
aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBTdHJ1Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBu
dWxscHRyKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRy
YW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
U3RydWN0dXJlKiBzZWFsVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6ZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1
cmUqKTsKQEAgLTE5NCw3ICsxOTQsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5
KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7
IH0KICAgICBib29sIGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGlj
dGlvbmFyeUtpbmQoKSA9PSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wg
cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkg
IT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0
eUNhY2hpbmcoKTsgfQorICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25h
cnlLaW5kCisgICAgICAgICAgICAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmcoKQorICAgICAgICAgICAgJiYgISh0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5
U2xvdCgpICYmICF0eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkK
KyAgICB7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAg
ICAgICAgICAgICYmIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAg
ICAgICAgICAgICYmIHR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRz
KCk7CisgICAgfQogCiAgICAgLy8gV2UgdXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9y
IHN0cnVjdHVyZXMgdGhhdCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBw
cmV2ZW50CiAgICAgLy8gREZHIGZyb20gaW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ug
c3RydWN0dXJlcyBkb24ndCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFw
cGVhcnMuCkBAIC0yMDIsNyArMjE0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAg
CiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxv
Yi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CkBAIC01MjgsNyArNTQwLDcg
QEAgcHJpdmF0ZToKICAgICAvLyB0byB1bmxvY2sgaXQuCiAgICAgdm9pZCBmaW5kU3RydWN0dXJl
c0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0cnVjdHVy
ZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwogICAgIAotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5
S2luZCk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYs
IFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYs
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQg
cmVtb3ZlKFByb3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzNiw2ICs1MzYsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNo
cG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOwor
ICAgIAogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3
aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0
LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay1uZXcuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8t
Z2V0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay1uZXcuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ZvbGQt
bXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LXdpdGhvdXQtZm9sZGluZy10aGUt
c3RydWN0dXJlLWNoZWNrLW5ldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACitm
dW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisKK2Z1bmN0aW9uIGJhcihvKSB7
CisgICAgcmV0dXJuIG8uZzsKK30KKworZnVuY3Rpb24gYmF6KG8sIHAsIHEpIHsKKyAgICB2YXIg
cmVzdWx0ID0gMDsKKyAgICBpZiAoaXNGaW5hbFRpZXIoKSkgeworICAgICAgICBwID0gbzsKKyAg
ICAgICAgcSA9IG87CisgICAgICAgIHJlc3VsdCArPSAxMDAwMDsKKyAgICB9CisgICAgcmVzdWx0
ICs9IGZvbyhwKTsKKyAgICByZXN1bHQgKz0gYmFyKHEpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK25vSW5saW5lKGJheik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsK
KyAgICB2YXIgbywgcCwgcTsKKyAgICB2YXIgZXhwZWN0ZWQxOworICAgIHZhciBleHBlY3RlZDI7
CisgICAgbyA9IHtmOjEwMCwgZzoxMDF9OworICAgIGV4cGVjdGVkMiA9IDEwMDAwICsgMTAwICsg
MTAxOworICAgIGlmIChpICYgMSkgeworICAgICAgICBwID0ge2U6MSwgZjoyLCBnOjN9OworICAg
ICAgICBxID0ge2U6NCwgZjo1LCBnOjZ9OworICAgICAgICBleHBlY3RlZDEgPSAyICsgNjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBwID0ge2Y6NywgZzo4fTsKKyAgICAgICAgcSA9IHtnOjksIGY6
MTB9OworICAgICAgICBleHBlY3RlZDEgPSA3ICsgOTsKKyAgICB9CisgICAgdmFyIHJlc3VsdCA9
IGJheihvLCBwLCBxKTsKKyAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVkMSAmJiByZXN1bHQgIT0g
ZXhwZWN0ZWQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQg
KyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQxICsgIiBvciAiICsgZXhwZWN0ZWQyICsgIikiOwor
fQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211bHRpLWdldC1i
eS1vZmZzZXQtc2VsZi1vci1wcm90by5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL211bHRpLWdldC1ieS1vZmZzZXQtc2VsZi1vci1wcm90by5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGkt
Z2V0LWJ5LW9mZnNldC1zZWxmLW9yLXByb3RvLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzUgQEAKK2Z1bmN0aW9uIGZvbyhvLCBzdGFydCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBvLmY7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIG8gPSB7fTsKK28u
ZiA9IDQyOwordmFyIGYgPSB7fTsKK2YuZiA9IDQzOworZi5nID0gNDQ7CisKK2ZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICBvLmYgPSBpOworby5mID0gNDI7CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBwOworICAgIGlmIChpICYgMSkKKyAg
ICAgICAgcCA9IG87CisgICAgZWxzZQorICAgICAgICBwID0gT2JqZWN0LmNyZWF0ZShvKTsKKyAg
ICB2YXIgcmVzdWx0ID0gZm9vKHApOworICAgIGlmIChyZXN1bHQgIT0gMTAwICogNDIpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHEgPSB7
fTsKK3EuZiA9IDQzOwordmFyIHJlc3VsdCA9IGZvbyhxKTsKK2lmIChyZXN1bHQgIT0gMTAwICog
NDMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hw
b2ludC1kaWN0aW9uYXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC1kaWN0aW9uYXJ5LmpzCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBsYWNlbWVudC13
YXRjaHBvaW50LWRpY3Rpb25hcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAor
ZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28pOwor
Cit2YXIgcCA9IHtmOjQyfTsKK3ZhciBvID0gT2JqZWN0LmNyZWF0ZShwKTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHBbImkiICsgaV0gPSBpOworICAgIGZvciAodmFy
IGogPSAwOyBqIDwgMTAwOyArK2opIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdDogIiArIHJlc3VsdDsKKyAgICB9Cit9CisKKy8vIE1ha2UgcCBhIG5vbi1kaWN0aW9uYXJ5
LgorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHZhciB0bXAgPSBvLmY7Cit9
CisKK3AuZiA9IDQzOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0gNDMpCisg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGxh
Y2VtZW50LXdhdGNocG9pbnQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMiBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQor
Citub0lubGluZShmb28pOworCit2YXIgcCA9IHtmOjQyfTsKK3ZhciBvID0gT2JqZWN0LmNyZWF0
ZShwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHBbImkiICsgaV0g
PSBpOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTAwOyArK2opIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGZvbyhvKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9Cit9CisKK3AuZiA9IDQz
OwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0gNDMpCisgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4tcHJv
dG8tY2hhbmdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRlZmlu
ZWQtYWNjZXNzLWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2UuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNyBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciBwID0ge307CisgICAg
dmFyIG8gPSB7fTsKKyAgICBvLl9fcHJvdG9fXyA9IHA7CisgICAgdmFyIHJlc3VsdDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCA9IG8uZjsKKyAg
ICAgICAgaWYgKGkgPT0gNTApCisgICAgICAgICAgICBwLmYgPSA0MjsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSA0MikK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3Rv
LWNoYW5nZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3VuZGVmaW5lZC1hY2Nlc3MtdGhlbi1wcm90by1jaGFuZ2UuanMJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3MtdGhl
bi1wcm90by1jaGFuZ2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorZnVuY3Rp
b24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28pOworCit2YXIg
cCA9IHt9OwordmFyIG8gPSBPYmplY3QuY3JlYXRlKHApOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQg
IT09IHZvaWQgMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGluIGxvb3A6ICIg
KyByZXN1bHQ7Cit9CisKK3AuZiA9IDQyOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1
bHQgIT09IDQyKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1
bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODc2MDUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBz
dHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBhIG1pY3JvYmVuY2htYXJrIHRoYXQgaWxsdXN0cmF0ZXMgdGhlIG5l
ZWQgZm9yIHRoaXMgZmVhdHVyZS4gVGhpcyBiZW5jaG1hcmsgZ2V0cyA1OHggZmFzdGVyIHdpdGgK
KyAgICAgICAgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL3Byb3RvdHlwZS1h
Y2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUu
aHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBl
LWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qczogQWRkZWQuCisgICAgICAgIChmb28p
OgorCiAyMDE1LTA3LTMwICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXBsYWNlIEdvb2dsZSBBcHAgRW5naW5lIHdpdGggQXBwU2NhbGUKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1z
dHJ1Y3R1cmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtb2JqZWN0
LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgt
bXV0YXRpbmctc3RydWN0dXJlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC1vYmpl
Y3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0
cnVjdHVyZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9i
YWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNz
LXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3Rv
dHlwZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdy
ZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vz
cy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5n
LXByb3RvdHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11
dGF0aW5nLXN0cnVjdHVyZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVy
ZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0
ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICByZXN1bHQg
Kz0gZjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGluZShmb28pOworCitmID0gNDI7
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0aGlzWyJpIiArIGldID0g
aTsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAqIDEwMCkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJbmRleDog
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRo
LW11dGF0aW5nLXByb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBl
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
cHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHZhciByZXN1bHQgPSAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBv
LmY7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIHAgPSB7
Zjo0Mn07Cit2YXIgbyA9IE9iamVjdC5jcmVhdGUocCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgeworICAgIHBbImkiICsgaV0gPSBpOworICAgIHZhciByZXN1bHQgPSBmb28o
byk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAqIDEwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvdW5kZWZpbmVkLXByb3BlcnR5LWFjY2Vzcy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy91bmRlZmluZWQtcHJvcGVydHktYWNj
ZXNzLmpzCShyZXZpc2lvbiAxODc2MDUpCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy91bmRlZmluZWQtcHJvcGVydHktYWNjZXNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0x
MSw3ICsxMSw3IEBAIGZ1bmN0aW9uIGZvbygpIHsKIH0KIHJlc3VsdCA9IGZvbygpOwogaWYgKHJl
c3VsdCAhPSB1bmRlZmluZWQpCi0gICAgdGhyb3cgIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cisg
ICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKIAogLy8gVGhpcyB0
ZXN0IGNoZWNrcyB0aGF0IGEgY2FjaGVkIHByb3BlcnR5IGxvb2t1cCBtaXNzIGRvZXNuJ3QgY29u
dGludWUgdG8gZmlyZSB3aGVuIHRoZSBwcm9wZXJ0eSBzdWRkZW5seSBhcHBlYXJzIG9uIHRoZSBv
YmplY3QuCiAKQEAgLTI2LDcgKzI2LDcgQEAgZnVuY3Rpb24gYmFyKCkgewogfQogdmFyIHJlc3Vs
dCA9IGJhcigpOwogaWYgKHJlc3VsdCAhPSAxKQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiBz
b21lR2xvYmFsID0gdW5kZWZpbmVkOwogCiAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgYSBjYWNo
ZWQgcHJvcGVydHkgbG9va3VwIG1pc3MgZG9lc24ndCBjb250aW51ZSB0byBmaXJlIHdoZW4gdGhl
IHByb3BlcnR5IHN1ZGRlbmx5IGFwcGVhcnMgb24gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4KQEAg
LTQ0LDUgKzQ0LDUgQEAgZnVuY3Rpb24gYmF6KCkgewogfQogdmFyIHJlc3VsdCA9IGJheigpOwog
aWYgKHJlc3VsdCAhPSAyKQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257941</attachid>
            <date>2015-07-31 12:25:09 -0700</date>
            <delta_ts>2015-07-31 12:32:49 -0700</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>323139</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5MiBA
QAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5n
ZSwgaWYgeW91IHdhbnRlZCB0byBlZmZpY2llbnRseSB2YWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVj
dCBoYXMgKG9yIGRvZXNuJ3QgaGF2ZSkgYQorICAgICAgICBwcm9wZXJ0eSwgeW91J2QgY2hlY2sg
dGhhdCB0aGUgb2JqZWN0IHN0aWxsIGhhcyB0aGUgc3RydWN0dXJlIHRoYXQgeW91IGZpcnN0IHNh
dyB0aGUgb2JqZWN0IGhhdmUuIFdlCisgICAgICAgIG9wdGltaXplZCB0aGlzIGEgYml0IHdpdGgg
dHJhbnNpdGlvbiB3YXRjaHBvaW50cyBvbiB0aGUgc3RydWN0dXJlLCB3aGljaCBzb21ldGltZXMg
YWxsb3dlZCB1cyB0bworICAgICAgICBlbGlkZSB0aGUgc3RydWN0dXJlIGNoZWNrLgorCisgICAg
ICAgIEJ1dCB0aGlzIGFwcHJvYWNoIGZhaWxzIHdoZW4gdGhhdCBvYmplY3QgZnJlcXVlbnRseSBo
YXMgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXQuIFRoaXMgd291bGQKKyAgICAgICAgY2hhbmdl
IHRoZSBzdHJ1Y3R1cmUgYW5kIGZpcmUgdGhlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCwgc28gdGhl
IGNvZGUgd2UgZW1pdHRlZCB3b3VsZCBiZSBpbnZhbGlkIGFuZAorICAgICAgICB3ZSdkIGhhdmUg
dG8gcmVjb21waWxlIGVpdGhlciB0aGUgSUMgb3IgYW4gZW50aXJlIGNvZGUgYmxvY2suCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBjb25jZXB0OiBhbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uLiBUaGlzIHZhbHVlIGRlc2NyaWJlcyBzb21lCisgICAgICAgIGNvbmRp
dGlvbiBpbnZvbHZpbmcgYSBwcm9wZXJ0eSBvbiBzb21lIG9iamVjdC4gVGhlcmUgYXJlIGZvdXIg
a2luZHM6IHByZXNlbmNlLCBhYnNlbmNlLAorICAgICAgICBhYnNlbmNlLW9mLXNldHRlciwgYW5k
IGVxdWl2YWxlbmNlLiBGb3IgZXhhbXBsZSwgYSBwcmVzZW5jZSBjb25kaXRpb24gc2F5cyB0aGF0
IHdlIGV4cGVjdCB0aGF0IHRoZQorICAgICAgICBvYmplY3QgaGFzIHNvbWUgcHJvcGVydHkgYXQg
c29tZSBvZmZzZXQgd2l0aCBzb21lIGF0dHJpYnV0ZXMuIFRoaXMgYWxsb3dzIHVzIHRvIGltcGxl
bWVudCBhIG5ldyBraW5kCisgICAgICAgIG9mIHdhdGNocG9pbnQsIHdoaWNoIGtub3dzIGFib3V0
IHRoZSBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHRoYXQgaXQncyBiZWluZyB1c2VkIHRvIGVu
Zm9yY2UuIElmCisgICAgICAgIHRoZSB3YXRjaHBvaW50IGZpcmVzIGJlY2F1c2Ugb2YgYSBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbiwgdGhlIHdhdGNocG9pbnQgbWF5IHNpbXBseSByZWluc3RhbGwgaXRz
ZWxmCisgICAgICAgIG9uIHRoZSBuZXcgc3RydWN0dXJlLgorCisgICAgICAgIE9iamVjdCBwcm9w
ZXJ0eSBjb25kaXRpb25zIGFyZSB1c2VkIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgUHV0QnlJ
ZCB0cmFuc2l0aW9ucywgR2V0QnlJZCBtaXNzZXMsCisgICAgICAgIGFuZCBwcm90b3R5cGUgYWNj
ZXNzZXMuIFRoZXkgYXJlIGFsc28gdXNlZCBmb3IgYW55IERGRyBhY2Nlc3NlcyB0byBvYmplY3Qg
Y29uc3RhbnRzLCBpbmNsdWRpbmcKKyAgICAgICAgZ2xvYmFsIHByb3BlcnR5IGFjY2Vzc2VzLgor
CisgICAgICAgIE1vc3RseSBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gZ2xvYmFsIHByb3BlcnR5
IGFjY2VzcywgdGhpcyBpcyBhIDklIHNwZWVkLXVwIG9uIEtyYWtlbi4gSXQncworICAgICAgICBu
ZXV0cmFsIG9uIG1vc3Qgb3RoZXIgdGhpbmdzLiBJdCdzIGEgNjh4IHNwZWVkLXVwIG9uIGEgbWlj
cm9iZW5jaG1hcmsgdGhhdCBpbGx1c3RyYXRlcyB0aGUgcHJvdG90eXBlCisgICAgICAgIGNoYWlu
IHNpdHVhdGlvbi4gSXQncyBhbHNvIGEgc21hbGwgc3BlZWQtdXAgb24gZ2V0dGVyLXJpY2hhcmRz
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpDb21wbGV4R2V0
U3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6dGFrZXNTbG93UGF0aCk6
CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmtpbmQpOgorICAgICAgICAoSlNDOjpD
b21wbGV4R2V0U3RhdHVzOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVz
Ojpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjphdHRyaWJ1
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6c3BlY2lmaWNW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmNoYWluKTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmg6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0
QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6fkdldEJ5SWRWYXJp
YW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6Okdl
dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRW
YXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpvcGVyYXRvciEpOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6c3RydWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFZhcmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJp
YW50OjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0
dXMpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24pOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmll
cik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0
ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VX
aXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpl
cXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpvcGVy
YXRvciEpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b2JqZWN0KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmNvbmRpdGlvbik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpraW5kKToKKyAgICAgICAgKEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnVpZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246
Omhhc0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNQ
cm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc1JlcXVpcmVk
VmFsdWUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cmVxdWlyZWRW
YWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNDb21wYXRpYmxlV2l0
aCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVp
cmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3QpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yQ29uZGl0aW9uS2luZCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNX
aXRoS2luZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNP
bmVTbG90QmFzZUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjptZXJnZWRXaXRoKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFyZVN0aWxsTGl2ZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXApOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCk6CisgICAgICAgIChKU0M6OmdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSk6CisgICAgICAg
ICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaDogQWRkZWQuCisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmlzVmFsaWQpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aXNFbXB0eSk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpiZWdpbik6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjplbmQpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6cmVsZWFzZVJhd1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OkRhdGE6OkRhdGEpOgorICAgICAgICAq
IGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6
fkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsp
OgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDoKKyAgICAgICAg
KEpTQzo6R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5
SWRBY2Nlc3M6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmNvbmRp
dGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnN0dWJSb3V0aW5lKToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjpjaGFpbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vz
czo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6
dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OlB1dEJ5SWRBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFj
Y2Vzczo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6bmV3U3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpjaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OmNo
YWluQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250
ZXh0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXApOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNXYXRjaGFibGVXaGVuVmFsaWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OlByb3BlcnR5Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2UpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246OmFic2VuY2UpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2UpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmtpbmQpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6dWlkKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246Omhhc09mZnNldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0
aW9uOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzQXR0cmli
dXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjphdHRyaWJ1dGVzKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246Omhhc1Byb3RvdHlwZSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6aGFzUmVxdWlyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjpyZXF1aXJlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246
Omhhc2gpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc0NvbXBhdGlibGVXaXRoKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp3
YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b25IYXNoOjplcXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0pOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpzZXR0ZXIpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bWFr
ZXNDYWxscyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25X
aXRoUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJp
YW50OjpraW5kKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlND
OjpQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvZmZz
ZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0dXMpOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6On5TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludDo6cHVzaCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJl
bmNlQW5kQWRkV2F0Y2hwb2ludCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KToKKyAgICAgICAgKEpT
Qzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpjb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OnN0dWJJbmZvKToKKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjpkZXJlZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpzZXRTZWVuKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omlu
c3RhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludDo6ZmlyZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6UHJvcGVydHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Ojpr
ZXkpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQ
cm9wZXJ0eVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgICogZGZnL0RG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omlu
c3RhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6
ZmlyZUludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludDo6a2V5KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hl
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2hlY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9tb3RlVG9Db25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBsYW5Mb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6ZW1pdENoZWNrcyk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyk6Cisg
ICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
Ojpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFz
ZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6YWRkQmFzZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6YWRkQ2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZl
clZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJl
ZFZhbHVlQWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRj
aHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVk
V2F0Y2hwb2ludHM6OmFkZExhemlseSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNo
cG9pbnRzOjpjb25zaWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRz
OjpyZWFsbHlBZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJl
U3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpkdW1w
SW5Db250ZXh0KToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6U2V0UG9pbnRlckFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U2V0UG9pbnRlckFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U2V0UG9pbnRlckFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkluZmVycmVkVmFsdWVBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAo
SlNDOjpERkc6OkluZmVycmVkVmFsdWVBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFs
aWRhdGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRh
cHRvcjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQp
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hl
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6ZHVtcElu
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNo
ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjphZGQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KToK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKToKKyAg
ICAgICAgKiBkZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmg6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6d2F0Y2hDb25kaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1Nh
ZmVUb0xvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aWRlbnRpZmllcnMpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjp3YXRjaHBvaW50cyk6CisgICAgICAgICogZGZnL0RGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRo
b2Q6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9k
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcElu
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAp
OgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRN
ZXRob2Q6OkdldEJ5T2Zmc2V0TWV0aG9kKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNl
dE1ldGhvZDo6Y29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9k
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Q
cm90b3R5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvcGVyYXRv
ciEpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpraW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6cHJvdG90eXBlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpN
dWx0aUdldEJ5T2Zmc2V0Q2FzZTo6TXVsdGlHZXRCeU9mZnNldENhc2UpOgorICAgICAgICAoSlND
OjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok11
bHRpR2V0QnlPZmZzZXRDYXNlOjptZXRob2QpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZl
VG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4p
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KToKKyAgICAgICAgKEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6CisgICAgICAg
IChKU0M6OmNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKToKKyAgICAgICAgKEpTQzo6cmVw
bGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlkU3R1Yik6CisgICAgICAg
IChKU0M6OmFjdGlvbkZvckNlbGwpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0
KToKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6ZW1p
dFB1dFRyYW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAg
ICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0
Y2hJbik6CisgICAgICAgIChKU0M6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aXNQcm90b3R5
cGVDaGFpbk5vcm1hbGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1nZXQtYnkt
b2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hl
Y2stbmV3LmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vz
cy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qczogQWRkZWQuCisK
IDIwMTUtMDctMzAgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CiAK
ICAgICAgICAgQWRkIHRoZSAid2FzbSIgZGlyZWN0b3J5IHRvIHRoZSBBZGRpdGlvbmFsIEluY2x1
ZGUgRGlyZWN0b3JpZXMgZm9yIGpzYy5leGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTAgKzk3LDEzIEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcAogICAgIGJ5dGVjb2Rl
L0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAogICAgIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCiAgICAgYnl0
ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
CiAgICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKICAgICBieXRlY29kZS9Q
cmVjaXNlSnVtcFRhcmdldHMuY3BwCisgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3Bw
CiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAKICAgICBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcApAQCAtMTI4LDYgKzEz
MSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBkZmcvREZHQWJzdHJhY3RI
ZWFwLmNwcAogICAgIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAorICAgIGRmZy9ERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCisgICAgZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKICAgICBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAogICAgIGRmZy9ERkdB
cml0aE1vZGUuY3BwCkBAIC0xOTYsNiArMjAxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2Rl
LmNwcAogICAgIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAorICAgIGRmZy9ERkdNdWx0
aUdldEJ5T2Zmc2V0RGF0YS5jcHAKICAgICBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmNwcAogICAg
IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAgZGZnL0RGR05vZGUuY3BwCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIx
Mi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWls
ZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KICAg
ICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdTdWZmaXh8V2luMzIiPgpAQCAt
MzM3LDEwICszMzcsMTMgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEp1
bXBUYWJsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wY29k
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFZhcmlhbnQuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUmVkdWNlV2hpdGVzcGFjZS5jcHAiIC8+CkBA
IC0zNjUsNiArMzY4LDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERl
YnVnZ2VyU2NvcGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fi
c3RyYWN0SGVhcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJz
dHJhY3RWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50
c1V0aWxpdGllcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJp
dGhNb2RlLmNwcCIgLz4KQEAgLTQzMyw2ICs0MzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05haXZlRG9taW5hdG9ycy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmF0dXJhbExvb3BzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlLmNwcCIgLz4KQEAgLTEwMDksMTEgKzEwMTUs
MTQgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFs
dWVQcm9maWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMTElu
dENhbGxMaW5rSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGNvZGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wZXJhbmRzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRh
cmdldHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5
Q29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkU3RhdHVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkVmFyaWFudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0
S2luZC5oIiAvPgpAQCAtMTA0OSw2ICsxMDU4LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHQWRqYWNlbmN5TGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0FsbG9jYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FuYWx5
c2lzLmgiIC8+CkBAIC0xMTQxLDYgKzExNTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdNaW5pZmllZE5vZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOYWl2ZURvbWluYXRvcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdOb2RlLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsOCBA
QAogCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNFMDRDMTYxNjRBMUIw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1RjE0QjdBNzNFMDA1
REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1Bh
dGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYxNzI1RkYxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzI1RkUxQjQ4NzE5QTAw
QUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICovOyB9OworCQkwRjE4RDNDRjFCNTVBNkUw
MDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NEMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9OworCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE4RDNDRTFC
NTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxOTBDQUMxODlE
ODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUExODlEODJGNjAwMEFFNUYw
IC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovOyB9OwogCQkwRjE5MENBRDE4OUQ4MkY2
MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUIxODlEODJGNjAwMEFFNUYwIC8qIFBy
b2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjFERDg0QTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxREQ4NDkx
OEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjkzLDggKzI5NSw2IEBACiAJCTBGM0IzQTJDMTU0
NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlk
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYzQjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1
NiAvKiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzRDBCQkMxOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8q
IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovOyB9OwotCQkwRjNEMEJCRDE5NEE0MTQzMDBG
QzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi87IH07
CiAJCTBGM0UwMUFCMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNFMDFBOTE5RDM1
M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAv
KiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01ODgsNiArNTg4
LDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2
RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAv
KiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJ
CTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAv
KiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDExQjYxOEFBRjAwQzgwRTFFIC8qIERGR0Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLzsgfTsK
KwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNF
NDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNTFCNjE4
QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwICovOyB9OworCQkw
RkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA2MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDBEMUI2MThCNjYw
MEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVy
dHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBFMUUgLyogUHJv
cGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgxQUQy
MTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERG
R0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFMjExNDE3MkNF
MzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5Miw2ICs3MDAsOCBAQAogCQkwRkYwRjE5RTE2Qjcy
QTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5NkIgLyogREZHRWRnZS5jcHAg
Ki87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCAqLzsg
fTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIy
MTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGMkNENUIxQjYxQTRGODAw
NDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBE
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07CisJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5
NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MkYx
NThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4RUJENTgwMDRDQjlGRiAvKiBV
RGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxl
ci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2Rl
LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjcz
NDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovOyB9OwpAQCAtMTQxMSw4ICsx
NDIxLDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3MTFC
OThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1h
cERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMxOEM1NTNGRTAwRjEwNjI2IC8q
IFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8qIFNwaWxsUmVnaXN0ZXJzTW9k
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE3
ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1M0Y3MTc5NzI2
MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKLQkJQTc4ODUz
RkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1M0Y4MTc5NzI2MjkwMDE0
NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3NzQxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVy
LmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFs
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4
QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovOyB9OwogCQlB
NzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZFMTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAtMTg3OSw2ICsxODg3LDggQEAKIAkJMEYx
M0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyog
REZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZEdyYXBoLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8q
IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBwYXRo
ID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FB
MTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBw
YXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRp
c29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVySmV0
dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8q
IEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA2NCw4ICsyMDc0LDYgQEAKIAkJ
MEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
M0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJp
bmcuY3BwOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51
bWJlcmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVQb3N0TnVt
YmVyaW5nLmg7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVy
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzcwLDYgKzIzNzgsMTQgQEAKIAkJMEZEMkM5
MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBk
ZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIx
NDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDAwMUI2MThBQUYw
MEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNF
NDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQz
RTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFF
IC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1MyAvKiBERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rv
bWluYXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb21pbmF0b3JzLmg7IHBh
dGggPSBkZmcvREZHRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjQ2OSw2ICsyNDg1LDggQEAKIAkJMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
T1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMDU0RjcxQUMzNUI0NDAw
RTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0
YWJsZUFsbG9jYXRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4
ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwOyBwYXRoID0gZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRp
R2V0QnlPZmZzZXREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmg7IHBhdGggPSBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZG
IC8qIERpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNh
c3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRp
c2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVRGlz
ODZEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzM0MTU4RUJEOTQwMDRD
QjlGRiAvKiB1ZGlzODZfZGVjb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9
IHVkaXM4Nl9kZWNvZGUuYzsgcGF0aCA9IGRpc2Fzc2VtYmxlci91ZGlzODYvdWRpczg2X2RlY29k
ZS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzIxMyw4ICszMjMxLDYgQEAKIAkJ
QTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODUwN0Q1
MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4ODUzRjcx
Nzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwOyBw
YXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3OEE5NzZEMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmFpbGVkRmluYWxpemVyLmg7IHBh
dGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3OEE5NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmluYWxpemVyLmNwcDsgcGF0aCA9IGRm
Zy9ERkdGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU1MSw4
ICs0NTY3LDYgQEAKIAkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5Lmgg
Ki8sCiAJCQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywKIAkJ
CQlBN0E4QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICovLAotCQkJCUE3ODg1
M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLywKLQkJ
CQlBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICov
LAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAq
LywKIAkJCQlCQzExNjY3QTBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oICov
LAogCQkJCUExQjlFMjMzMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3IuY3BwICovLApA
QCAtNDk1NSw2ICs0OTY5LDEwIEBACiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAw
Q0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYw
MDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEZEM0UzRkYxQjYxOEFBRjAw
QzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAg
Ki8sCisJCQkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovLAorCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGMThEM0NF
MUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywK
IAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAog
CQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLywKIAkJCQlB
NzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywKQEAgLTUxMTQsNiAr
NTEzMiw4IEBACiAJCQkJMEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9k
ZS5oICovLAogCQkJCTBGOEYxNDMxMUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlLmNwcCAqLywKIAkJCQkwRjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGlu
dFJlbW92YWxQaGFzZS5oICovLAorCQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdN
dWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8sCisJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4
IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi8sCiAJCQkJMEZDM0NDRkExOUFEQTQxMDAw
NkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi8sCiAJCQkJMEZDM0NDRkIxOUFEQTQx
MDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVB
MkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLApAQCAtNTM4NSw4ICs1NDA1LDYg
QEAKIAkJCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkw
RjZGQzc0RTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJ
MEY2RkM3NEYxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkw
RjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8s
Ci0JCQkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2su
aCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAog
CQkJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwICovLAogCQkJCTBGQzcxMkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suaCAqLywKQEAgLTU0MTksNiArNTQzNywxMCBAQAogCQkJCTBGQjU0NjdD
MTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywK
IAkJCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZS5oICovLAogCQkJCTE0Q0E5NThDMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5oICovLAorCQkJCTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCisJCQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgw
RTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFC
NjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLywKIAkJCQk5
NjlBMDc5NDBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCAqLywKIAkJCQk5NjlBMDc5NTBF
RDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4
OTEwIC8qIE9wZXJhbmRzLmggKi8sCkBAIC01NDMwLDYgKzU0NTIsOCBAQAogCQkJCTBGOUZDOEMw
MTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5
ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJ
MEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAorCQkJ
CTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJ
CQkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJ
CQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJ
CTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5
M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKQEAgLTU5NDUs
NiArNTk2OSw3IEBACiAJCQkJQzI5ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENC
OUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRG
QjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNF
NDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRn
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjAwLDYgKzYyMjUsNyBAQAogCQkJCUE1MzI0Mzk4MTg1
NkE0ODkwMDJFRDY5MiAvKiBDb21iaW5lZERvbWFpbnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0Mzg4MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0
b3JGcm9udGVuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFB
NEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTUzMjQzOEMxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3Rv
Y29sT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZE
IC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjA5LDcgKzYy
MzUsNiBAQAogCQkJCUE3QThBRjNCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUw
MDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3
QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAt
NjIyMiw2ICs2MjQ3LDcgQEAKIAkJCQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNj
cmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4
OTYxOSAvKiBKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVF
QyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYx
OEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21w
aWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDM4LDcgKzY0NjQs
NiBAQAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGlj
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0QwQkJEMTk0
QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QzAwOENFNzE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjUyMiw5ICs2NTQ3LDExIEBACiAJCQkJMkFB
RDk2NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExK
U0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTdBOEVD
MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFD
N0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0
MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8q
IE1hdGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4
MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3
MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NjAyLDYgKzY2MjksNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1
Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMw
NjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZC
QjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYz
QzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFG
MDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03Mzk3LDYgKzc0MjUsNyBAQAogCQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAv
KiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVy
dHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFD
NzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4
QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc0MDcsNiArNzQzNiw3IEBACiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8q
IEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJC
NzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMx
QjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExP
U1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAw
QkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0NTgsNiArNzQ4OCw3
IEBACiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JB
Z2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0
MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzQ2OSw3ICs3NTAwLDYgQEAK
IAkJCQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3Rz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3
MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg4
NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50
ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0
IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0ODYsNiArNzUx
Niw3IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMz
Ml82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDNFNDA5MUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMTU4N0Q2RDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVy
YXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAv
KiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1NDEsNyArNzU3Miw2
IEBACiAJCQkJQTUwM0ZBMUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkExRDE4OEUwRkIwMDAxMTBGMTQgLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Mjgw
ODc1MTA3RUMxM0UwMDEzRTdCMiAvKiBKU0xvY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYz
RDBCQkMxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQzI1RDcwOUIxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3NDExN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFw
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjk1MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01h
cEl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzczNyw2ICs3NzY3LDcgQEAKIAkJCQlC
Q0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwMTNDQThC
MUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQz
ODE1QUU0QTFDMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0NGMEQwQzBFRjBCOEE1MDA0MTNDOEYgLyogU3RydWN0dXJl
U3R1YkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzQ2LDYgKzc3NzcsNyBAQAogCQkJCTcw
NUI0MUIxMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8qIERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkEy
QzE3QjE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDAsNyArMzQwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSAwOwog
ICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gMDsKICAgICAgICAgICAgIFBvbHltb3JwaGljR2V0
QnlJZExpc3QqIGxpc3QgPSAwOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHN0
dWJJbmZvLmFjY2Vzc1R5cGUpIHsKQEAgLTM3MCwxMSArMzY5LDYgQEAgdm9pZCBDb2RlQmxvY2s6
OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAicHJvdG90eXBlU3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNo
YWluLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChsaXN0KSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsiLCBs
aXN0KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIHsKQEAgLTM4Miw5ICszNzYsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRC
eUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIp
OwogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7CiAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGxpc3QtPmF0KGkpLnN0cnVjdHVyZSgpLCBp
ZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5jaGFpbigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghbGlzdC0+YXQoaSkuY29uZGl0aW9uU2V0KCkuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgbGlzdC0+YXQoaSkuY2hhaW4oKSwgaWRl
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KGxpc3QtPmF0KGkpLmNvbmRp
dGlvblNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnRmKCIpIik7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDU2LDEwICs0NTAsOCBAQCB2
b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAg
ZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5w
cmV2aW91c1N0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwogICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCAiKTsKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBzdHVi
SW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAg
ICAgICAgICAgIGlmIChTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgi
LCAiKTsKLSAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnUucHV0QnlJ
ZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KQorICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgIiwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewogICAg
ICAgICAgICAgICAgIG91dC5wcmludGYoImxpc3QgPSBbIik7CkBAIC00ODMsMTAgKzQ3NSw4IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgICAg
ICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJldiIsIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUo
KSwgaWRlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0IiwgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXNz
LmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgYWNjZXNzLmNoYWlu
KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYWNjZXNzLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgYWNjZXNzLmNvbmRpdGlvblNldCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoInVua25vd24iKTsKICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ6OmZpcgogICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAKICAgICBtX2NvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2lu
dCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgcmVtb3ZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAko
cmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBs
ZXhHZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUg
YSBzdHJ1Y3R1cmUgdGhhdAogICAgIC8vIGhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpIGJ1
dCBmb3Igd2hpY2ggd2UgZG9uJ3QKQEAgLTQwLDMyICszOSwzNCBAQCBDb21wbGV4R2V0U3RhdHVz
IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgLy8gdGhhdCwgeWV0LgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAKKyAgICBBU1NF
UlQoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSk7CisgICAgCiAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUt
PnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB0
YWtlc1Nsb3dQYXRoKCk7CiAgICAgCiAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CiAgICAg
cmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAgCi0gICAgaWYgKGNoYWluICYmIGNoYWlu
Q291bnQpIHsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGhlYWRTdHJ1Y3R1cmUs
IGNoYWluLCBjaGFpbkNvdW50KSk7CisgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAg
Ci0gICAgICAgIGlmICghcmVzdWx0Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICBp
ZiAoIXJlc3VsdC5tX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAg
ICAgICAgICAgIHJldHVybiBza2lwKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGVhZFN0cnVj
dHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotICAgICAgICAgICAg
fHwgcmVzdWx0Lm1fY2hhaW4tPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTbG90QmFzZXMgPQorICAgICAgICAgICAgcmVz
dWx0Lm1fY29uZGl0aW9uU2V0Lm51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29u
ZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mU2xvdEJh
c2VzIDw9IDEpOworICAgICAgICBpZiAoIW51bWJlck9mU2xvdEJhc2VzKSB7CisgICAgICAgICAg
ICAvLyBDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBtaXNzZXMuIFRoYXQncyBhIGJ1bW1lci4K
KyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMDUyCiAgICAgICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOworICAgICAg
ICB9CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2UgPSByZXN1bHQubV9jb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKTsKKyAgICAgICAgQVNTRVJUKGJhc2Uua2luZCgp
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CiAgICAgICAgIAotICAgICAgICBKU09i
amVjdCogY3VycmVudE9iamVjdCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgp
OwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSByZXN1bHQubV9jaGFpbi0+
bGFzdCgpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBj
dXJyZW50T2JqZWN0KTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJl
bnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwotICAgIH0KKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gYmFzZS5vZmZzZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAg
CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNldCkpCiAgICAgICAgIHJldHVy
biB0YWtlc1Nsb3dQYXRoKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29tcGxleEdldFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDggKzI2LDggQEAKICNpZm5kZWYgQ29tcGxleEdldFN0YXR1c19oCiAjZGVmaW5lIENvbXBs
ZXhHZXRTdGF0dXNfaAogCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
ODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgQ29tcGxleEdldFN0YXR1cygpCiAgICAgICAgIDog
bV9raW5kKFNob3VsZFNraXApCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKLSAg
ICAgICAgLCBtX2F0dHJpYnV0ZXMoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTk3
LDIxICs5NiwxNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBDb21wbGV4R2V0
U3RhdHVzIGNvbXB1dGVGb3IoCi0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlKiBoZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVu
c2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgICAgICBTdHJ1
Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlczsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4o
KSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9u
U2V0OyB9CiAgICAgCiBwcml2YXRlOgogICAgIEtpbmQgbV9raW5kOwogICAgIFByb3BlcnR5T2Zm
c2V0IG1fb2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKLSAgICBKU1ZhbHVlIG1f
c3BlY2lmaWNWYWx1ZTsKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFp
bjsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJl
Q2hlY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
LXsKLSAgICBvdXQucHJpbnQoCi0gICAgICAgICIoQ2hlY2sgaWYgIiwgaW5Db250ZXh0KEpTVmFs
dWUobV9jb25zdGFudCksIGNvbnRleHQpLCAiIGhhcyBzdHJ1Y3R1cmUgIiwKLSAgICAgICAgcG9p
bnRlckR1bXBJbkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKSIpOwotfQotCi12b2lk
IENvbnN0YW50U3RydWN0dXJlQ2hlY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsK
LSAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Ci19Ci0KLVN0cnVjdHVyZSogc3RydWN0
dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvciwgSlNDZWxs
KiBjb25zdGFudCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgIGlmICh2ZWN0b3JbaV0uY29uc3RhbnQoKSA9PSBjb25zdGFudCkKLSAgICAg
ICAgICAgIHJldHVybiB2ZWN0b3JbaV0uc3RydWN0dXJlKCk7Ci0gICAgfQotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYgYSwgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgYikKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBhLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1
cmUqIG90aGVyU3RydWN0dXJlID0gc3RydWN0dXJlRm9yKGIsIGFbaV0uY29uc3RhbnQoKSk7Ci0g
ICAgICAgIGlmICghb3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGFbaV0uc3RydWN0dXJlKCkgIT0gb3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIG1lcmdlSW50
byhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImIHRhcmdldCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzb3Vy
Y2Uuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmVGb3IodGFyZ2V0LCBzb3Vy
Y2VbaV0uY29uc3RhbnQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFyZ2V0
LmFwcGVuZChzb3VyY2VbaV0pOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50
U3RydWN0dXJlQ2hlY2suaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0jZGVmaW5lIENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tfaAotCi0jaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKLSNpbmNsdWRlICJKU0Nl
bGwuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBD
b25zdGFudFN0cnVjdHVyZUNoZWNrIHsKLXB1YmxpYzoKLSAgICBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrKCkKLSAgICAgICAgOiBtX2NvbnN0YW50KG51bGxwdHIpCi0gICAgICAgICwgbV9zdHJ1Y3R1
cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2soSlNDZWxsKiBjb25zdGFudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogbV9j
b25zdGFudChjb25zdGFudCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0gICAg
ewotICAgICAgICBBU1NFUlQoISFtX2NvbnN0YW50ID09ICEhbV9zdHJ1Y3R1cmUpOwotICAgIH0K
LSAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbnN0YW50OyB9
Ci0gICAgCi0gICAgSlNDZWxsKiBjb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnQ7
IH0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJl
OyB9Ci0gICAgCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXBy
aXZhdGU6Ci0gICAgSlNDZWxsKiBtX2NvbnN0YW50OwotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1
cmU7Ci19OwotCi10eXBlZGVmIFZlY3RvcjxDb25zdGFudFN0cnVjdHVyZUNoZWNrLCAyPiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yOwotCi1TdHJ1Y3R1cmUqIHN0cnVjdHVyZUZvcihjb25z
dCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIEpTQ2VsbCogY29uc3RhbnQp
OwotYm9vbCBhcmVDb21wYXRpYmxlKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
LCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7Ci12b2lkIG1lcmdlSW50byhj
b25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIHRhcmdldCk7Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNjksOCArMTY5LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBs
aXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpj
b21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlz
dC0+YXQobGlzdEluZGV4KS5jaGFpbigpLAotICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJ
bmRleCkuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgbGlz
dC0+YXQobGlzdEluZGV4KS5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAg
IGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKQEAgLTIwNiw4ICsyMDUsOCBAQCBH
ZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJp
YW50KAotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxl
eEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAotICAgICAgICAg
ICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCisg
ICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksIFdURjo6
bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMjMgKzM0LDE5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVz
PiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExp
bmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAgLCBtX2Fs
dGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkK
ICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RGOjptb3Zl
KGNhbGxMaW5rU3RhdHVzKSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKICAg
ICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFj
aGFpbik7Ci0gICAgfQotICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAg
ICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3RhbnRDaGVja3MpOworICAgICAgICBBU1NF
UlQoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CiAgICAgfQogfQotCisgICAgICAgICAgICAgICAg
ICAgICAKIEdldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlhbnQoKSB7IH0KIAogR2V0QnlJZFZh
cmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKQEAgLTYy
LDggKzU4LDcgQEAgR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldAogR2V0
QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlh
bnQmIG90aGVyKQogewogICAgIG1fc3RydWN0dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7
Ci0gICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9h
bHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
ICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1
cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKTsKQEAgLTcyLDI4ICs2NywyNCBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6
Om9wZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZh
cmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRlcm5hdGVCYXNl
KQotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNl
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7
Ci19Ci0KIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRW
YXJpYW50JiBvdGhlcikKIHsKLSAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90aGVyLm1fYWx0
ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX29mZnNldCAhPSBv
dGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2NhbGxMaW5r
U3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWFyZUNvbXBhdGlibGUobV9jb25zdGFudENoZWNrcywgb3RoZXIubV9jb25zdGFu
dENoZWNrcykpCisKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1f
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgaWYg
KCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0
ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAg
ICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9u
U2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgIAog
ICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKICAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTExMiwxMCArMTAzLDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
IlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsK
LSAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRl
QmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsK
KyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCkpOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBv
dXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjcsOSArMjcsOCBAQAogI2RlZmluZSBHZXRCeUlkVmFyaWFudF9o
CiAKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0
dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIK
IApAQCAtNDMsNyArNDIsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiBwdWJsaWM6CiAgICAg
R2V0QnlJZFZhcmlhbnQoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
ID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQs
Ci0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwK
KyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQoKSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVz
PiBjYWxsTGlua1N0YXR1cyA9IG51bGxwdHIpOwogICAgIAogICAgIH5HZXRCeUlkVmFyaWFudCgp
OwpAQCAtNTUsOSArNTQsMTAgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudENoZWNrczsgfQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3Qg
eyByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOyB9Ci0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1
cmUoKSBjb25zdDsKKworICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBhIGNvbmRpdGlvbiBzZXQgbWVh
bnMgdGhhdCB0aGlzIGlzIGEgcHJvdG90eXBlIGxvYWQuCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9u
U2V0OyB9CisgICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAgICAgCkBAIC03MCw4ICs3MCw3IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdldEJ5SWRTdGF0dXM7CiAgICAgCiAgICAgU3Ry
dWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0
b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOworICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5
T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9j
YWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2
b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAg
ICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBvdXQucHJpbnQoIjwiLCBpbkNvbnRleHQoSlNWYWx1ZShtX29iamVjdCksIGNvbnRl
eHQpLCAiOiAiLCBpbkNvbnRleHQobV9jb25kaXRpb24sIGNvbnRleHQpLCAiPiIpOworfQorCit2
b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24udmFs
aWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCiti
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBtX29iamVjdCk7
Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiBpc1N0aWxsVmFsaWQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQo
c3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShtX29i
amVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpp
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9y
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIG1fb2JqZWN0LCBlZmZvcnQpOworfQor
Citib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGUoc3RydWN0dXJlLCBtX29iamVj
dCwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFi
bGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7
CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVy
biBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wg
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFIZWFwOjppc01h
cmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4g
bV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2Vk
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0
cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52YWxpZGF0ZVJlZmVyZW5j
ZXModHJhY2tlZCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjphdHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigpIGNvbnN0
Cit7CisgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0gY29uZGl0aW9uKCkuYXR0ZW1wdFRv
TWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0KCkpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICByZXR1cm4g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24ob2JqZWN0KCksIHJlc3VsdCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2Rl
ZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
I2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24oKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUgdG9rZW4pCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRp
dGlvbih0b2tlbikKKyAgICB7CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24p
CisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRp
dGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBv
ZmZzZXQsIGF0dHJpYnV0ZXMpOyAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
cykKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIob2Jq
ZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7CisgICAgfQorCisgICAgLy8gTk9URTogVGhl
IHByb3RvdHlwZSBpcyB0aGUgc3RvcmVkUHJvdG90eXBlLCBub3QgdGhlIHByb3RvdHlwZUZvckxv
b2t1cC4KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRC
YXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAg
IHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJh
cnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQor
ICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4g
YWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0
aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAg
ICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNl
dHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2Vu
Y2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2Jq
ZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3du
ZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0
LCB1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCog
b2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9v
YmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29u
ZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmpl
Y3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93
bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1
aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlv
bjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkua2luZCgpOyB9CisgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgp
OyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNP
ZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNv
bmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5zaWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0
IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJpYnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAg
ICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3Rv
dHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRp
dGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSBy
ZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgp
OyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhh
c2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkgKyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIu
bV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29uZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9u
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJl
IGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlm
ZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJlbnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0
dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQor
ICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxl
bmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVy
YWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBz
cGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAgLy8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBm
b3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUK
KyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJl
bid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4KKyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmpl
Y3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRp
dHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3Rl
YWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYg
eW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1z
CisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2Fu
dCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJl
IHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAg
ICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJv
cGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZhbGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVx
dWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29u
c3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBu
ZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVu
IGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0
cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChT
dHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSBjb25zdDsKKworICAgIC8vIENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0
aWxsIGhvbGRzLiBNYXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0
IGFuZAorICAgIC8vIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlv
bi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiB0cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlv
biBzdGlsbCByZXF1aXJlcyBzb21lIHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRp
b24gdG8gY2hlY2tpbmcgdGhlCisgICAgLy8gc3RydWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVj
ayBpZiB0aGUgY29uZGl0aW9uIGhvbGRzIGJ5IHVzaW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisg
ICAgLy8gdXNlIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZh
bGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7Cisg
ICAgCisgICAgLy8gU2hvcnRoYW5kIGZvciBjb25kaXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0
dXJlKS4KKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25z
dDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eSgpIGNvbnN0OworICAgIAorICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNl
IHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0
aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4K
KyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisg
ICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxp
dHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAg
Ym9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAg
ICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRp
b246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mg
c3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRy
YW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBp
c1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRp
b246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2Vz
KSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlv
bjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMp
IGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53
YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9Cisg
ICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1l
bnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUg
b2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGls
bExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBU
cmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCisgICAgYm9vbCBpc1ZhbGlkVmFsdWVGb3JQcmVz
ZW5jZShKU1ZhbHVlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlv
bigpLmlzVmFsaWRWYWx1ZUZvclByZXNlbmNlKHZhbHVlKTsKKyAgICB9CisKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBhdHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigp
IGNvbnN0OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0
eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBl
cXVhbCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsK
KyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlw
ZWRlZiBKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xp
c3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNv
bnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
IDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisg
ICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJv
cGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25kaXRp
b246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQo
KSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0
dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9CisKK3Vuc2lnbmVkIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRp
dGlvbjo6S2luZCBraW5kKSBjb25zdAoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsK
KyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkKKyAgICAgICAgICAgIHJlc3Vs
dCsrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZSkgPT0gMTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWduZWQgbnVtRm91bmQgPSAwOworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAg
ICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkg
eworICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOworICAgICAgICAgICAgbnVtRm91bmQr
KzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChudW1Gb3VuZCA9PSAxKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bWVyZ2VkV2l0aCgKKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwg
IW90aGVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKworICAgIFZlY3Rv
cjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gcmVzdWx0OworICAgIAorICAgIGlmICghaXNFbXB0
eSgpKQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKG1fZGF0YS0+dmVjdG9yKTsKKyAgICAK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBuZXdDb25kaXRpb24gOiBv
dGhlcikgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBleGlz
dGluZ0NvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgICAgICBpZiAobmV3Q29uZGl0aW9uID09
IGV4aXN0aW5nQ29uZGl0aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKCFuZXdDb25kaXRpb24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub25F
bXB0eShyZXN1bHQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1
Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7Cisg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMp
IHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi52YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphcmVTdGlsbExp
dmUoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLmlzU3RpbGxMaXZlKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNWYWxp
ZCgpKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJbIik7CisgICAgaWYgKG1fZGF0YSkKKyAgICAg
ICAgb3V0LnByaW50KGxpc3REdW1wSW5Db250ZXh0KG1fZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7
CisgICAgb3V0LnByaW50KCJdIik7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91
dCwgbnVsbHB0cik7Cit9CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNlOwor
CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvbigKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbktpbmQpCit7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCJDcmVhdGluZyBjb25kaXRpb24gIiwgY29uZGl0aW9uS2luZCwgIiBmb3Ig
IiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKSwgIlxuIik7CisKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiByZXN1bHQ7CisgICAgc3dpdGNoIChjb25kaXRpb25LaW5kKSB7CisgICAgY2FzZSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zm
c2V0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAg
ICAgIHJlc3VsdCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSh2bSwgb3duZXIs
IG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTogeworICAgICAgICByZXN1bHQg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSgKKyAgICAgICAgICAgIHZtLCBvd25l
ciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9iamVj
dCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246
OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICByZXN1bHQgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6YWJzZW5jZU9mU2V0dGVyKAorICAgICAgICAgICAgdm0sIG93bmVyLCBvYmplY3QsIHVp
ZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cisg
ICAgfQorCisgICAgaWYgKCFyZXN1bHQuc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBjcmVhdGUgY29uZGl0aW9uOiAiLCByZXN1bHQsICJc
biIpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICB9CisK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiTmV3IGNvbmRpdGlvbjogIiwgcmVz
dWx0LCAiXG4iKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitlbnVtIENvbmN1cnJlbmN5IHsK
KyAgICBNYWluVGhyZWFkLAorICAgIENvbmN1cnJlbnQKK307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zKAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsCisgICAg
Q29uY3VycmVuY3kgY29uY3VycmVuY3kgPSBNYWluVGhyZWFkKQoreworICAgIFZlY3RvcjxPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbj4gY29uZGl0aW9uczsKKyAgICAKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgc3Ry
dWN0dXJlOiAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUpLCAiXG4iKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSXQncyBhIHByb3h5LCBzbyBpbnZhbGlkLlxuIik7
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCk7CisgICAgICAgIAorICAgICAgICBp
ZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvdG90eXBlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJl
YWNoZWQgZW5kIHVwIHByb3RvdHlwZSBjaGFpbiBhcyBleHBlY3RlZCwgZG9uZS5cbiIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZGx5IHJlYWNoZWQgZW5kIG9m
IHByb3RvdHlwZSBjaGFpbiwgc28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7Cisg
ICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSByZXBlYXRlZGx5LCBpdCdz
IGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQgbm90IGJlCisgICAgICAgIC8vIHRyZWF0ZWQgYXMg
YSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewor
ICAgICAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IE1haW5UaHJlYWQpCisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgb2JqZWN0KTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDYW5ub3QgZmxhdHRlbiBkaWN0aW9uYXJ5IHdoZW4gbm90IG9u
IG1haW4gdGhyZWFkLCBzbyBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIWZ1bmN0b3IoY29uZGl0aW9ucywgb2JqZWN0KSkgeworICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiRnVuY3RvciBm
YWlsZWQsIGludmFsaWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
b2JqZWN0ID09IHByb3RvdHlwZSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiUmVhY2hlZCBkZXNpcmVkIHByb3RvdHlwZSwgZG9uZS5cbiIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgZGF0YUxvZygiUmV0dXJuaW5nIGNvbmRpdGlvbnM6ICIsIGxpc3REdW1wKGNvbmRp
dGlvbnMpLCAiXG4iKTsKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5v
bkVtcHR5KGNvbmRpdGlvbnMpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNz
KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdl
bmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwKKyAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsK
KyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2UpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKK30KKworT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNz
KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdl
bmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwKKyAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsK
KyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2VPZlNldHRlcik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVu
ZChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworfQorCitP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAg
ICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJv
dG90eXBlLAorICAgICAgICBbJl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNv
bmRpdGlvbnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJvb2wgeworICAgICAgICAgICAgUHJvcGVy
dHlDb25kaXRpb246OktpbmQga2luZCA9CisgICAgICAgICAgICAgICAgb2JqZWN0ID09IHByb3Rv
dHlwZSA/IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSA6IFByb3BlcnR5Q29uZGl0aW9uOjpB
YnNlbmNlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0KKyAg
ICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBr
aW5kKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBwcm90b3R5cGUsCisgICAgICAg
IFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmpl
Y3QqIG9iamVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlw
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24o
dm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9KTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgIFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlv
bnMoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIGhlYWRTdHJ1Y3R1cmUsIG51bGxwdHIsCisg
ICAgICAgIFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywg
SlNPYmplY3QqIG9iamVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiByZXN1bHQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBu
dWxscHRyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcik7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0sIENvbmN1cnJlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0X2gK
KyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworLy8gQW4gb2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0
byByZXByZXNlbnQgdGhlIHNldCBvZiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVl
ZCB0byBiZSBtZXQgZm9yIHNvbWUgaGVhcCBhY2Nlc3MgdG8gYmUgdmFsaWQuIFRoZSBzZXQgY2Fu
IGhhdmUgdGhlIGZvbGxvd2luZworLy8gaW50ZXJlc3Rpbmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5
OiBUaGVyZSBhcmUgbm8gc3BlY2lhbCBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuCisv
LyBJbnZhbGlkOiBUaGUgaGVhcCBhY2Nlc3MgaXMgbmV2ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6
IFRoZXJlIGFyZSBzb21lIE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUg
dmFsaWQuCisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpIHsgfQorICAgIAorICAgIHN0YXRpYyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnZhbGlkKCkKKyAgICB7CisgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0
UmVmKG5ldyBEYXRhKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9y
PE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZl
Y3Rvci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQoKTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAg
ICAgICByZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2ZWN0b3I7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRhLT52ZWN0b3IuaXNFbXB0eSgpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Rh
dGE7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdpbigpOworICAgIH0KKyAgICBpdGVyYXRvciBlbmQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmVuZCgpOworICAgIH0KKyAg
ICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBmb3JPYmplY3QoSlNPYmplY3QqIG9iamVj
dCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQ
cm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNv
bmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICBi
b29sIGhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gSWYgdGhp
cyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1
YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNvbmRpdGlvbiBvbiB0aGUgcHJvdG90eXBl
IGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAor
ICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FT
U0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFByZXNlbmNlCisgICAgLy8gaW4gdGhlIHNl
dCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2VuY2UuCisgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0
IHRvIGNyZWF0ZSBhIG5ldyBjb25kaXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0
aGUgb3RoZXIgb25lLiBUaGlzIHdpbGwKKyAgICAvLyBmYWlsIGlmIGFueSBvZiB0aGUgY29uZGl0
aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlci4gV2hlbiBpZiBmYWlscywgaXQg
cmV0dXJucworICAgIC8vIGludmFsaWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBtZXJnZWRXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29u
c3Q7CisgICAgCisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdDsKKyAg
ICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIEhlbHBlcnMgZm9y
IHVzaW5nIHRoaXMgaW4gYSB1bmlvbi4KKyAgICB2b2lkKiByZWxlYXNlUmF3UG9pbnRlcigpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkp
OworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgYWRvcHRSYXdQ
b2ludGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0
aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZnJvbVJhd1BvaW50ZXIo
dm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihy
YXdQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIC8vIEludGVybmFsbHksIHRoaXMgcmVwcmVzZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9p
bnRlciB0byBhIERhdGEgdGhhdCBoYXMgYW4gZW1wdHkgdmVjdG9yLgorICAgIAorICAgIC8vIEZJ
WE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IGhhdmluZyBpdCBpbnRlcm5h
bGx5IHVzZSBhIHZlY3RvciB0aGF0IGp1c3QgaGFzCisgICAgLy8gdGhlIG5vbi11aWQgcG9ydGlv
biBvZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgYW5kIHRoZW4gcmVxdWlyaW5nIHRoYXQgdGhl
IGNhbGxlcnMgb2YgYWxsCisgICAgLy8gb2YgdGhlIEFQSXMgc3VwcGx5IHRoZSB1aWQuCisgICAg
CisgICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7Cisg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsK
KyAgICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1
cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90
eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc2MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUs
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWdu
ZWQgY2hhaW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKICAgICA6IG1fdHlwZSh0eXBlKQotICAg
ICwgbV9jaGFpbkNvdW50KGNoYWluQ291bnQpCiAgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIs
IHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKICAgICAsIG1f
c3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBtX2No
YWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKIH0KIAogR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRB
Y2Nlc3MoKQpAQCAtNzEsNyArNjksNyBAQCBib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhS
ZXBhdGNoQnVmCiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0
cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9jaGFpbiAm
JiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAgaWYgKCFtX2NvbmRpdGlvblNl
dC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9zdHVi
Um91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAj
aW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtNTMsMTMgKzU0LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICBHZXRCeUlk
QWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291
bnQoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4s
IFN0cnVjdHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9IDAsIHVuc2lnbmVkIGNoYWlu
Q291bnQgPSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAgICAgfkdldEJ5SWRBY2Nlc3Mo
KTsKICAgICAKQEAgLTcyLDggKzcyLDcgQEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAKLSAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9
Ci0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW5Db3VudDsg
fQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5l
KiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtOTEsOSArOTAsOCBAQCBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7
Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsgLy8gRklYTUUg
d2hhdCBhYm91dCBiYXJyaWVycz8KICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJv
dXRpbmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgUHV0QnlJZEFjY2Vz
cyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgICAgICByZXN1bHQubV90eXBlID0gVHJh
bnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQu
bV9uZXdTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1
Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLmNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigKKyAgICAgICAgICAgIHN0
dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKICAgICAgICAgcmVz
dWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIApAQCAtNjQsNiArNjUsOSBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6
OmZyb21TdHJ1Y3R1CiAKIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVT
dGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1f
b2xkU3RydWN0dXJlLmdldCgpKSkKQEAgLTc0LDE1ICs3OCwxMSBAQCBib29sIFB1dEJ5SWRBY2Nl
c3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFNldHRlcjoKICAgICBjYXNlIEN1c3RvbVNldHRlcjoKICAgICAgICAgaWYgKCFIZWFwOjppc01h
cmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChtX2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAko
cmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJP
cGNvZGUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90
LmgiCkBAIC01Myw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkK
ICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9N
QVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAg
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LAogICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAg
ICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBl
ID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIG9sZFN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93
bmVyLCBjaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1
LDggKzk1LDcgQEAgcHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisg
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAg
ICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAg
ICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0
LDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAg
ICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAg
ICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewot
ICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAg
ICAgICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQu
bV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0
aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAg
IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0g
ICAgICAgIHJldHVybiBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBj
aGFpbkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlz
Q3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRp
bmUoKSBjb25zdAogICAgIHsKQEAgLTE3OCw4ICsxNjQsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vz
c1R5cGUgbV90eXBlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJl
OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291
bnQ7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAg
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKwordm9pZCBQ
cm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29u
dGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5w
cmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0
LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBvZmZzZXQoKSwgIiB3
aXRoIGF0dHJpYnV0ZXMgIiwgYXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50
KCIgd2l0aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTVmFsdWUocHJvdG90eXBlKCkpLCBjb250
ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBv
dXQucHJpbnQoIiB3aXRoICIsIGluQ29udGV4dChyZXF1aXJlZFZhbHVlKCksIGNvbnRleHQpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7Cisg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJEZXRlcm1p
bmluZyB2YWxpZGl0eSBvZiAiLCAqdGhpcywgIiB3aXRoIHN0cnVjdHVyZSAiLCBwb2ludGVyRHVt
cChzdHJ1Y3R1cmUpLCAiIGFuZCBiYXNlICIsCisgICAgICAgICAgICBKU1ZhbHVlKGJhc2UpLCAi
IGFzc3VtaW5nIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50cyBhcmUgc2V0LlxuIik7CisgICAg
fQorICAgIAorICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgdW5zZXQuXG4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiSW52YWxpZCBiZWNhdXNlIGFjY2Vzc2VzIGFyZSBub3QgY2FjaGVhYmxlLlxuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsK
KyAgICBjYXNlIFByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVz
OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGN1cnJl
bnRPZmZzZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2Ugd2UgbmVlZCBvZmZzZXQsIGF0
dHJpYnV0ZXMgdG8gYmUgIiwgb2Zmc2V0KCksICIsICIsIGF0dHJpYnV0ZXMoKSwKKyAgICAgICAg
ICAgICAgICAgICAgIiBidXQgdGhleSBhcmUgIiwgY3VycmVudE9mZnNldCwgIiwgIiwgY3VycmVu
dEF0dHJpYnV0ZXMsICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJ
bnZhbGlkIGJlY2F1c2UgaXQncyBhIGRpY3Rpb25hcnkuXG4iKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIGlmIChjdXJy
ZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSB0aGUgcHJvcGVydHkgZXhp
c3RzIGF0IG9mZnNldDogIiwgY3VycmVudE9mZnNldCwgIlxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZU9iamVjdCgpICE9IHByb3RvdHlwZSgpKSB7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAg
ICJJbnZhbGlkIGJlY2F1c2UgdGhlIHByb3RvdHlwZSBpcyAiLCBzdHJ1Y3R1cmUtPnN0b3JlZFBy
b3RvdHlwZSgpLCAiIGV2ZW4gdGhvdWdoICIKKyAgICAgICAgICAgICAgICAgICAgIml0IHNob3Vs
ZCBoYXZlIGJlZW4gIiwgSlNWYWx1ZShwcm90b3R5cGUoKSksICJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6IHsK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSBpdCdz
IGEgZGljdGlvbmFyeS5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9
IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50QXR0cmlidXRlcyAmIChB
Y2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAg
ICAiSW52YWxpZCBiZWNhdXNlIHdlIGV4cGVjdGVkIG5vdCB0byBoYXZlIGEgc2V0dGVyLCBidXQg
d2UgaGF2ZSBvbmUgYXQgb2Zmc2V0ICIsCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
T2Zmc2V0LCAiIHdpdGggYXR0cmlidXRlcyAiLCBjdXJyZW50QXR0cmlidXRlcywgIlxuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVk
UHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90eXBlKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIklu
dmFsaWQgYmVjYXVzZSB0aGUgcHJvdG90eXBlIGlzICIsIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCksICIgZXZlbiB0aG91Z2ggIgorICAgICAgICAgICAgICAgICAgICAiaXQgc2hvdWxkIGhh
dmUgYmVlbiAiLCBKU1ZhbHVlKHByb3RvdHlwZSgpKSwgIlxuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAg
ICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJlKCkgIT0gc3RydWN0dXJlKSB7CisgICAg
ICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2
ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICAgICAvLyBvYmplY3Qu
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIGJhc2Ug
b3IgdGhlIGJhc2UgaGFzIHRoZSB3cm9uZyBzdHJ1Y3R1cmU6ICIsCisgICAgICAgICAgICAgICAg
ICAgIFJhd1BvaW50ZXIoYmFzZSksICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhp
cyBpcyBzb21ld2hhdCByYWN5LCBhbmQgbWF5YmUgbW9yZSByaXNreSB0aGFuIHdlIHdhbnQuCisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEK
KyAgICAgICAgCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIEpTVmFsdWUgY3VycmVudFZhbHVl
ID0gYmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRPZmZzZXQpOworICAgICAgICBpZiAoY3VycmVudFZh
bHVlICE9IHJlcXVpcmVkVmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNh
dXNlIHRoZSB2YWx1ZSBpcyAiLCBjdXJyZW50VmFsdWUsICIgYnV0IHdlIHJlcXVpcmUgIiwgcmVx
dWlyZWRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZh
bGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFi
c2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxW
YWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAg
aWYgKCFpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1
cmUsIGJhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDdXJyZW50bHkgd2Ug
YXNzdW1lIHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNhbiBjYXVzZSBhIHByb3BlcnR5IHRvIGFw
cGVhciwgYW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRvdyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVy
dHkgb24gdGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBhZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5k
CisgICAgLy8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZlY3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1
c2UgaW1wdXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIgc2V0dGVycy4KKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2Ug
RXF1aXZhbGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJl
R2V0T3duUHJvcGVydHlTbG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVu
VmFsaWQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZv
cnQpIGNvbnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRI
YXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBz
b21lIHZhcmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0cnVlLCB3aGljaAorICAgICAgICAvLyBp
bXBsaWVzIHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGtub3dz
IG9mIHRoZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAgICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmll
ZCB0aGF0IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFibGUgZGljdGlvbmFyeSwgd2hpY2ggbWVh
bnMgd2UKKyAgICAgICAgLy8gc2hvdWxkbid0IGhhdmUgYSBUT0NUT1UgcmFjZSBlaXRoZXIuCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAg
CisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAgICAgICAgc3dpdGNoIChlZmZvcnQpIHsK
KyAgICAgICAgY2FzZSBNYWtlTm9DaGFuZ2VzOgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJl
LT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRW5zdXJlV2F0Y2hhYmlsaXR5OgorICAgICAgICAgICAgc2V0
ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCgKKyAg
ICAgICAgICAgICAgICAqSGVhcDo6aGVhcChzdHJ1Y3R1cmUpLT52bSgpLCBvZmZzZXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghc2V0IHx8
ICFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVy
dHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlF
ZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0
Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0
KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBp
c1N0aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5W
YWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246Omlz
U3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgcHJvdG90eXBl
KCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRW
YWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUoKS5pc0NlbGwoKQorICAgICAgICAmJiAh
SGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0
aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQp
IGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNr
KHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAg
ICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25k
aXRpb246OmlzVmFsaWRWYWx1ZUZvckF0dHJpYnV0ZXMoSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKK3sKKyAgICBib29sIGF0dHJpYnV0ZXNDbGFpbUFjY2Vzc29yID0gISEoYXR0
cmlidXRlcyAmIEFjY2Vzc29yKTsKKyAgICBib29sIHZhbHVlQ2xhaW1zQWNjZXNzb3IgPSAhIWpz
RHluYW1pY0Nhc3Q8R2V0dGVyU2V0dGVyKj4odmFsdWUpOworICAgIHJldHVybiBhdHRyaWJ1dGVz
Q2xhaW1BY2Nlc3NvciA9PSB2YWx1ZUNsYWltc0FjY2Vzc29yOworfQorCitib29sIFByb3BlcnR5
Q29uZGl0aW9uOjppc1ZhbGlkVmFsdWVGb3JQcmVzZW5jZShKU1ZhbHVlIHZhbHVlKSBjb25zdAor
eworICAgIHJldHVybiBpc1ZhbGlkVmFsdWVGb3JBdHRyaWJ1dGVzKHZhbHVlLCBhdHRyaWJ1dGVz
KCkpOworfQorCitQcm9wZXJ0eUNvbmRpdGlvbiBQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0ZW1wdFRv
TWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAoIXN0
cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQoKSkpCisgICAgICAgIHJldHVybiBQcm9wZXJ0
eUNvbmRpdGlvbigpOworICAgIEpTVmFsdWUgdmFsdWUgPSBiYXNlLT5nZXREaXJlY3Qob2Zmc2V0
KCkpOworICAgIGlmICghaXNWYWxpZFZhbHVlRm9yUHJlc2VuY2UodmFsdWUpKQorICAgICAgICBy
ZXR1cm4gUHJvcGVydHlDb25kaXRpb24oKTsKKyAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0
QmFycmllcih1aWQoKSwgdmFsdWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlv
bikgeworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAg
IG91dC5wcmludCgiUHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2Vu
Y2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAg
ICBvdXQucHJpbnQoIkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25k
aXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvcGVy
dHlDb25kaXRpb25faAorI2RlZmluZSBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgUHJvcGVydHlDb25kaXRpb24gewor
cHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIFByZXNlbmNlLAorICAgICAgICBBYnNl
bmNlLAorICAgICAgICBBYnNlbmNlT2ZTZXR0ZXIsCisgICAgICAgIEVxdWl2YWxlbmNlIC8vIEFu
IGFkYXB0aXZlIHdhdGNocG9pbnQgb24gdGhpcyB3aWxsIGJlIGEgcGFpciBvZiB3YXRjaHBvaW50
cywgYW5kIHdoZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9ucywgd2Ugd2lsbCBzZXQgdGhlIHJl
cGxhY2VtZW50IHdhdGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1Y3R1cmUuCisgICAgfTsKKyAgICAK
KyAgICBQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAgIDogbV91aWQobnVsbHB0cikKKyAgICAg
ICAgLCBtX2tpbmQoUHJlc2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVv
Zih1KSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1f
a2luZChBYnNlbmNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2VXaXRob3V0
QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IFByZXNlbmNlOworICAgICAgICByZXN1bHQudS5wcmVzZW5jZS5vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRp
b24gcHJlc2VuY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0
ZXMpOworICAgIH0KKworICAgIC8vIE5PVEU6IFRoZSBwcm90b3R5cGUgaXMgdGhlIHN0b3JlZFBy
b3RvdHlwZSBub3QgdGhlIHByb3RvdHlwZUZvckxvb2t1cC4KKyAgICBzdGF0aWMgUHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpT
T2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IEFic2VuY2U7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBl
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVy
dHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
aWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAg
ICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhv
dXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAg
ICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBYnNlbmNlT2ZT
ZXR0ZXI7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7
CisgICAgICAgIHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3Rv
dHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFs
ZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAg
ICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFcXVpdmFs
ZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuZXF1aXZhbGVuY2UudmFsdWUgPSBKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkgJiYgb3duZXIpCisgICAgICAgICAgICB2bS5o
ZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhv
dXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAg
IAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wg
aGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7
IH07CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldDsKKyAg
ICB9CisgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBt
X2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIHUu
cHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5cGUo
KSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQg
PT0gQWJzZW5jZU9mU2V0dGVyKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHUu
YWJzZW5jZS5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9Cisg
ICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCho
YXNSZXF1aXJlZFZhbHVlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuZXF1
aXZhbGVuY2UudmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhh
c2gobV91aWQpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXN1bHQg
Kz0gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5jZS5h
dHRyaWJ1dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAg
ICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQ
dHJIYXNoPEpTT2JqZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBFbmNvZGVkSlNWYWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldCA9
PSBvdGhlci51LnByZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2VuY2Uu
YXR0cmlidXRlcyA9PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNhc2Ug
QWJzZW5jZToKKyAgICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXR1
cm4gdS5hYnNlbmNlLnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOworICAg
ICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2Uu
dmFsdWUgPT0gb3RoZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9CisgICAg
CisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRp
Y2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMuIElmCisgICAgLy8gZmFsc2Ug
aXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxp
Y3QgLSBmb3IgZXhhbXBsZSBpZiB0aGVyZSBpcworICAgIC8vIGEgUHJlc2VuY2UgYW5kIGFuIEVx
dWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBnZW5lcmFs
IG9mIHRoZSB0d28KKyAgICAvLyB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUg
bW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UKKyAg
ICAvLyBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhl
IHNhbWUgdWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlkCisgICAgLy8gY29uZGl0aW9ucyBhcmVu
J3QgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChj
b25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
ISp0aGlzIHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuICp0aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpOworICAgIH0KKyAgICAK
KyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUg
cHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9
IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFu
IGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisg
ICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgor
ICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1
cmUqKSBjb25zdDsKKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBpcyBzdGls
bCB2YWxpZCByaWdodCBub3cgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIHN0cnVjdHVyZS4KKyAg
ICAvLyBNYXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZCBz
dHJ1Y3R1cmUgYWxvbmUgZG9uJ3QgZ3VhcmFudGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbi4gVGhp
cyBoYXBwZW5zIGZvciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3QgdGhhdCBtYXkg
aGF2ZSBpbXB1cmUKKyAgICAvLyBwcm9wZXJ0aWVzLiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBzdXBw
bGllZCwgdGhlbiBhICJ0cnVlIiByZXR1cm4gaW5kaWNhdGVzIHRoYXQgY2hlY2tpbmcgaWYKKyAg
ICAvLyBhbiBvYmplY3QgaGFzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgZ3VhcmFudGVlcyB0aGUgY29u
ZGl0aW9uIHN0aWxsIGhvbGRzLiBJZiBhbiBvYmplY3QgaXMKKyAgICAvLyBzdXBwbGllZCwgdGhl
biB5b3UgbWF5IG5lZWQgdG8gdXNlIHNvbWUgb3RoZXIgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVj
dCB0byBndWFyYW50ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uIGluIGFkZGl0aW9uIHRvIHRoZSBz
dHJ1Y3R1cmUgY2hlY2suCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNPYmpl
Y3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2VzLCB0
aGUgY29uZGl0aW9uIGlzIG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNoYWJs
ZSBieSBlbmFibGluZyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3IgZXhh
bXBsZSwgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNvbWUK
KyAgICAvLyBhY2Nlc3MgaXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVjdHVy
ZS4gVGhpcyBpcyBtYWlubHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5IHBy
b3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBpdCdz
IGFsd2F5cyBzYWZlIHRvCisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0IHRo
aXMgaXMgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmlsaXR5
RWZmb3J0IHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhhdCB3
ZSBkb24ndCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAgLy8g
b2JqZWN0LCBhbmQgaW1wbGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0byBi
ZSB3YXRjaGFibGUgdGhlbiB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJsZS4g
VGhpcyBpcyBtYW5kYXRvcnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBpcyBh
bHNvIHNvbWV3aGF0CisgICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGluZyB3
aGV0aGVyIHRvIHdhdGNoIGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgorICAg
ICAgICAvLyBub3QgZnJvbSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBzZWUg
aWYgd2Ugc2hvdWxkIGFkYXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5vdCBi
ZWluZyBpbml0aWFsaXplZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRvbid0
IGtub3cgZW5vdWdoCisgICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8gd2F0
Y2ggLS0gYXMgaW4sIHRoZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAgICAg
ICAvLyBzdGFiaWxpemVkIHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBjb25k
aXRpb24gd2lsbCBob2xkIGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhvbGQg
Zm9yIGEgd2hpbGUgYWxyZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAgCisg
ICAgICAgIC8vIERvIHdoYXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5IGNh
biBiZSB3YXRjaGVkLCBpZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNlcnZh
YmxlIGVmZmVjdC4gRm9yIG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3VyZSB0
aGF0IGEgcHJvcGVydHkKKyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBlbmFi
bGVkIGlmIGl0IGhhZG4ndCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlzCisg
ICAgICAgIC8vIGZyb20gSklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcgd2F0
Y2hwb2ludHMgaXMgbm90IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxpdHkK
KyAgICB9OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFu
ZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAg
Ly8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJv
cGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVs
bHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9y
Y2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJl
KiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9D
aGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50bHks
IHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAgcmV0
dXJuICEhKnRoaXM7CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50
V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBtX2tp
bmQgPT0gRXF1aXZhbGVuY2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNT
dGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25z
dCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZh
bHVlRm9yQXR0cmlidXRlcyhKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKwor
ICAgIGJvb2wgaXNWYWxpZFZhbHVlRm9yUHJlc2VuY2UoSlNWYWx1ZSkgY29uc3Q7CisKKyAgICBQ
cm9wZXJ0eUNvbmRpdGlvbiBhdHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcihK
U09iamVjdCogYmFzZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdo
ZW5WYWxpZChTdHJ1Y3R1cmUqLCBXYXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAg
IHN0cnVjdCB7CisgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFi
c2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZTsKKyAgICAgICAgfSBlcXVpdmFsZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVy
dHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoCisgICAgICAgIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpT
Qzo6UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5
Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTkwLDE5ICs5MCwyMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
cm9tCiAgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNv
ZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5n
ZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVj
dHVyZUNoYWluLmdldCgpOwotICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChj
aGFpbik7CiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCi0gICAgUmVm
UHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGludGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWlu
KQotICAgICAgICBpbnRlbmRlZENoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4ocHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBjaGFpbikpOworICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5v
cGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwp
CisgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUo
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lKSkgeworICAgICAgICBj
b25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlT
ZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52
bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBpbnRlbmRlZENo
YWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogfQogCiBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsxNjgsMTQgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAK
ICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAg
ICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbikgewotICAgICAg
ICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0g
ICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CisgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICBz
dHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKICAg
ICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0
KCksCi0gICAgICAgICAgICAgICAgY2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTIxOSwxNSArMjIwLDExIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgICAgIGlmIChh
Y2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5l
dyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmls
ZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4oKSkpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNoYWluLT5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9u
U2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3Vy
ZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNs
b3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6
dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBh
Y2Nlc3MubmV3U3RydWN0dXJlKCksIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAg
ICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIApAQCAtMjM1LDcgKzIzMiw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1
cmUsIGFjY2Vzcy5jaGFpbigpLCBhY2Nlc3MuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2lu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lw
OgpAQCAtMjUzLDcgKzI1MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJs
b2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0
U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhH
ZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6Om1v
dmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTM2OCwyMiArMzY1LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcigKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwog
ICAgIAotICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICAgICAgaWYg
KCFpc0RpcmVjdCkgewotICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAg
ICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5
IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KLSAgICAgICAgICAgIGlmIChjaGFpbi0+bWF5SW50
ZXJjZXB0U3RvcmVUbyh1aWQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5
cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXplZCAoaS5lLiB0aGVyZSBhcmUgcHJveGllcyBv
ciBkaWN0aW9uYXJpZXMpCi0gICAgICAgICAgICAvLyB0aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9u
YXJ5IGNhc2Ugd291bGQgb25seSBoYXBwZW4gaWYgdGhpcyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVu
Ci0gICAgICAgICAgICAvLyB1c2VkIGluIGFuIG9wdGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlv
bi4gQW5kIHJlYWxseSB0aGUgb25seSByZWFzb24gd2h5IHdlIHdvdWxkCi0gICAgICAgICAgICAv
LyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJlYWxseSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBv
cHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgotICAgICAgICAgICAgLy8gZGljdGlvbmFyaWVz
IGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IHRob3NlIG9iamVjdHMgd2VyZSBu
ZXZlciB1c2VkIGFzCi0gICAgICAgICAgICAvLyBwcm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHBy
b3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YK
LSAgICAgICAgICAgIC8vIHRoZSBvdGhlciBjaGVja3MgYmVsb3cgd2lsbCBmYWlsLgotICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpIHx8ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkp
CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT52
bSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQogICAgIApAQCAtMzk0LDcgKzM4MCw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgQVNTRVJUKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVz
dWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWluLmdldCgpLCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQpKTsKICAgICAgICAgaWYgKCFkaWRBcHBlbmQpCiAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQm
IFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKICAg
ICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOwogICAgIG1fbmV3U3RydWN0
dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVy
Lm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5h
dGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAg
bV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1
cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtT
dGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTY0LDI5ICs2MywyNiBAQCBQdXRC
eUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1
dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1f
a2luZCA9IFRyYW5zaXRpb247CiAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0
dXJlOwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAo
c3RydWN0dXJlQ2hhaW4pCi0gICAgICAgIHN0cnVjdHVyZUNoYWluLT5nYXRoZXJDaGVja3MocmVz
dWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRp
dGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0
dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cykKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1f
a2luZCA9IFNldHRlcjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0g
ICAgaWYgKGNoYWluKSB7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29u
c3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRl
cm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgfQorICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNv
bmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1f
Y2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpOwogICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC0xMzQsMTggKzEzMCw2IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2Fs
bHMoKSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVT
ZXQgUHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAotewotICAgIEFTU0VSVChr
aW5kKCkgPT0gU2V0dGVyKTsKLSAgICAKLSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZSgpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
c3RydWN0dXJlRm9yKG1fY29uc3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKLSAgICByZXR1cm4gc3RydWN0dXJlOwotfQotCiBib29s
IFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3Ro
ZXIpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQpAQCAtMTU1LDggKzEz
OSw4IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICBjYXNl
IFJlcGxhY2U6CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAgICAgICAgIGNhc2Ug
UmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRDaGVja3MuaXNFbXB0eSgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbnN0YW50Q2hlY2tzLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5Niw2ICsxODAsNyBAQCBib29sIFB1dEJ5
SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zCiAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJl
cGxhY2UubV9vZmZzZXQpOwogICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkp
OwogICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJU
KHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKICAgICAKICAgICAvLyBUaGlzIHNv
cnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGlj
aCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKICAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1
cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhp
cyBkb2Vzbid0CkBAIC0yMzIsMTUgKzIxNywxMyBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1w
SW5Db250ZXh0KFByaW50CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNp
dGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAg
ICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAi
LCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNv
bnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6CiAgICAg
ICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0
dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0KGNv
bnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIpOwotICAgICAgICBpZiAobV9hbHRlcm5hdGVC
YXNlKQotICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRl
eHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CisgICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBvdXQucHJpbnQo
Iiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIs
ICptX2NhbGxMaW5rU3RhdHVzKTsKICAgICAgICAgb3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNp
b24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUHV0QnlJZFZhcmlh
bnRfaAogI2RlZmluZSBQdXRCeUlkVmFyaWFudF9oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNp
bmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBA
IC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICBQdXRCeUlkVmFyaWFudCgpCiAgICAgICAgIDog
bV9raW5kKE5vdFNldCkKICAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQotICAgICAg
ICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQogICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRP
ZmZzZXQpCiAgICAgewogICAgIH0KQEAgLTU0LDE2ICs1MywxNSBAQCBwdWJsaWM6CiAgICAgUHV0
QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRCeUlkVmFyaWFudCYg
b3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZh
cmlhbnQgcmVwbGFjZSgKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2Uo
Y29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQ
dXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9s
ZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
OworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zm
c2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAg
ICAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyk7CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKICAgICAKICAg
ICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKQEAgLTc2LDYgKzc0
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwogICAgIH0KICAg
ICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7CisgICAgfQorICAgIAogICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVy
KTsKQEAgLTEwMCwxMCArMTAzLDcgQEAgcHVibGljOgogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9y
YWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAgICAgCi0gICAgY29u
c3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7Ci0gICAgfQorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVy
biBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNv
bnN0CiAgICAgewpAQCAtMTExLDE0ICsxMTEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X29mZnNldDsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1
cm4gbV9hbHRlcm5hdGVCYXNlOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0
cnVjdHVyZSgpIGNvbnN0OwotICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1
cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CkBAIC0x
MzYsOCArMTI4LDcgQEAgcHJpdmF0ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBTdHJ1Y3R1cmVT
ZXQgbV9vbGRTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKLSAgICBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7Ci0gICAgSlNPYmpl
Y3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2Nv
bmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNywzMyArMzcsNDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojp+U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCgpIHsgfQogCiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXksCiAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIs
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+JiBo
ZWFkKQogewotICAgIGhlYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQ+KGhvbGRlciwgV1RGOjptb3ZlKGhlYWQpKTsKKyAgICBoZWFkID0gc3RkOjpt
YWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PihrZXksIGhvbGRlciwg
V1RGOjptb3ZlKGhlYWQpKTsKICAgICByZXR1cm4gaGVhZC5nZXQoKTsKIH0KIAogdm9pZCBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFp
bCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTog
c3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBi
ZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxp
c3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJv
YnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0gICAgbV9ob2xkZXIuY29kZUJsb2NrKCkt
PnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAgaWYgKCFtX2tleSB8fCAhbV9r
ZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsK
KyAgICAgICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1
YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KKyAgICAgICAgLy8gVGhhdCB3b3Jrcywg
YmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBs
aXN0LCBhbmQKKyAgICAgICAgLy8gdGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcg
aXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2luZy4KKyAgICAgICAgbV9ob2xkZXIuY29k
ZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9rZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQ
cmVzZW5jZSkgeworICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIHByZXNlbmNlIGNvbmRpdGlvbiwg
bGV0J3Mgd2F0Y2ggdGhlIHByb3BlcnR5IGZvciByZXBsYWNlbWVudHMuIFRoaXMgaXMgcHJvZml0
YWJsZQorICAgICAgICAvLyBmb3IgdGhlIERGRywgd2hpY2ggd2lsbCB3YW50IHRoZSByZXBsYWNl
bWVudCBzZXQgdG8gYmUgdmFsaWQgaW4gb3JkZXIgdG8gZG8gY29uc3RhbnQgZm9sZGluZy4KKyAg
ICAgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAobV9rZXkub2JqZWN0KCkpLT52bSgpOworICAgICAg
ICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgbV9rZXkub2Zmc2V0KCkpOworICAgIH0KKworICAgIG1fa2V5Lm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7CiB9CiAKIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbygpCiB7CiB9CiAKLVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9p
bnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCgpCitTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKLSAgICByZXR1cm4g
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6cHVzaCgqdGhpcywgbV9oZWFkKTsKKyAg
ICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6cHVzaChrZXksICp0aGlz
LCBtX2hlYWQpOwogfQogCiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQo
CiAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSkKIHsKICAgICBpZiAoIWhvbGRlclJlZikKICAgICAgICAgaG9sZGVyUmVmID0g
YWRvcHRSZWYobmV3IFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyhjb2RlQmxvY2ssIHN0
dWJJbmZvKSk7CkBAIC03Miw3ICs4NSw3IEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQqIFdhdGNocG8KICAgICAgICAgQVNTRVJUKGhvbGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHVi
SW5mbyk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQo
KTsKKyAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KGtleSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZp
c2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKIAorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAg
LTQ2LDE1ICs0NywxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50IDog
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludCgKLSAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvJiBob2xkZXIpCi0gICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50PiBuZXh0KQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikK
KyAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICwgbV9ob2xkZXIoaG9sZGVyKQogICAgICAg
ICAsIG1fbmV4dChXVEY6Om1vdmUobmV4dCkpCiAgICAgewogICAgIH0KQEAgLTYyLDYgKzU5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgflN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQo
KTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogcHVz
aCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAgICAgICAg
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiYgaGVhZCk7CiAKQEAgLTY5
LDYgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29u
c3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIG1fa2V5OwogICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgbV9o
b2xkZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQ+IG1fbmV4dDsKIH07CkBAIC04MywxMSArODIsMTEgQEAgcHVibGljOgogICAgIAogICAgIH5X
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKTsKICAgICAKLSAgICBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KCk7CisgICAgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCogZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKICAgICAgICAgUmVmUHRyPFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwKLSAgICAgICAgQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8qLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9zdHViSW5m
bzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00OCw5ICs0OCwxMiBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAg
ICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX2RpcmVjdDoKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0
UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CisgICAgICAg
IHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF9yZXBsYWNlOgogICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgogICAgICAgICAvLyBU
aGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVt
b3J5CkBAIC03NSw4ICs3OCwxMCBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtS
ZWZlcmVuCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKICAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgp
KQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3Ry
dWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRy
YW5zaXRpb24uY2hhaW4uZ2V0KCkpKQorICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUu
cHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1Bv
aW50ZXIoCisgICAgICAgICAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25T
ZXQpLmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIklu
c3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAj
aW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKQEAgLTExMyw3ICsxMTQsNyBAQCBzdHJ1
Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5p
dFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2
aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wg
aXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsx
MjMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgICAgIHUucHV0QnlJZFRy
YW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1
cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwg
b3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25T
ZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lk
IGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFz
ZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc2LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVT
dHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgIH0KICAgICAgICAgCi0gICAgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBv
aW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCiAgICAgewog
ICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZl
cmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9j
aywgdGhpcyk7CisgICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0aGlzLCBjb25k
aXRpb24pOwogICAgIH0KICAgICAKICAgICBpbnQ4X3QgYWNjZXNzVHlwZTsKQEAgLTIxNywyMyAr
MjE5LDEyIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgICAgICBXcml0ZUJh
cnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKICAgICAgICAgfSBnZXRC
eUlkU2VsZjsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+IHByb3RvdHlwZVN0cnVjdHVyZTsKLSAgICAgICAgICAgIGJvb2wgaXNE
aXJlY3Q7Ci0gICAgICAgIH0gZ2V0QnlJZFByb3RvOwotICAgICAgICBzdHJ1Y3QgewotICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGNvdW50IDogMzE7Ci0gICAgICAgICAgICBib29sIGlzRGlyZWN0IDog
MTsKLSAgICAgICAgfSBnZXRCeUlkQ2hhaW47Ci0gICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg
ICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICB9IGdldEJ5SWRMaXN0Owog
ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IHByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1
cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hh
aW4+IGNoYWluOworICAgICAgICAgICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwogICAgICAgICB9
IHB1dEJ5SWRUcmFuc2l0aW9uOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nzks
NyArMTc3OSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3VidGxlPwogICAgICAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tpXS5hbHRlcm5hdGVCYXNlKCkpOworICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQg
aW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3ZSdkCisgICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCisgICAgICAgICAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0
YW50UmVzdWx0ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewpAQCAtMjA2MCwzMCArMjA2MywyMiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUg
YmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFz
ZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0
ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5
T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMp
IHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBnZXRDYXNlLnNldCgpOwogICAgICAg
ICAgICAgc2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAg
ICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgIGJhc2VG
b3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlLm1fdmFsdWU7Ci0gICAgICAgICAgICBKU1Zh
bHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0
YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkLCB2YXJpYW50LmJh
c2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0
YW50UmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0g
R2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1h
a2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAg
ICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAg
ICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKKyAgICAgICAgICAgICAg
ICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAogICAgICAgICAgICAgICAgIG1fc3RhdGUu
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNS
ZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6QWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tl
eShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOworfQorCit2
b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRjaGFibGUoKSk7CisgICAgCisgICAgbV9r
ZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1
Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX2tl
eS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShtX2tleS51aWQoKSk7Cisg
ICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9w
ZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgIHNldC0+YWRkKCZtX3By
b3BlcnR5V2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50OjpmaXJlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICAvLyBP
bmUgb2YgdGhlIHdhdGNocG9pbnRzIGZpcmVkLCBidXQgdGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1h
a2Ugc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlbSBhcmUKKyAgICAvLyBpbiBhbnkgc2V0IGFueW1v
cmUuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgYnkgYWxsb3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRo
ZSB3YXRjaHBvaW50cworICAgIC8vIHdoZXJldmVyIGZyb20gc2NyYXRjaC4KKyAgICBpZiAobV9z
dHJ1Y3R1cmVXYXRjaHBvaW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fc3RydWN0dXJlV2F0Y2hw
b2ludC5yZW1vdmUoKTsKKyAgICBpZiAobV9wcm9wZXJ0eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkK
KyAgICAgICAgbV9wcm9wZXJ0eVdhdGNocG9pbnQucmVtb3ZlKCk7CisgICAgCisgICAgaWYgKG1f
a2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7
CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1f
a2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgIH0KKyAgICAKKyAgICBTdHJp
bmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5
LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAgICBTdHJpbmdGaXJlRGV0YWlsIHN0cmlu
Z0RldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+
amV0dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNo
cG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZzdHJpbmdEZXRhaWwpOworfQorCit2b2lkIEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2lu
dDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBw
dHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoCisgICAgICAgIEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAg
ICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9
CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNl
dCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJ
bnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90
IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fcHJvcGVydHlXYXRjaHBvaW50KTsKKyAgICAKKyAgICBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAg
IGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigK
KyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAg
CisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKworcHVibGljOgorICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAgIAorICAgIHZvaWQg
aW5zdGFsbCgpOworCitwcml2YXRlOgorICAgIGNsYXNzIFN0cnVjdHVyZVdhdGNocG9pbnQgOiBw
dWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBTdHJ1Y3R1cmVXYXRjaHBv
aW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVy
bmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9OworICAgIGNsYXNzIFByb3Bl
cnR5V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFByb3BlcnR5V2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVh
bCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsK
KyAgICAKKyAgICB2b2lkIGZpcmUoY29uc3QgRmlyZURldGFpbCYpOworICAgIAorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cisg
ICAgU3RydWN0dXJlV2F0Y2hwb2ludCBtX3N0cnVjdHVyZVdhdGNocG9pbnQ7CisgICAgUHJvcGVy
dHlXYXRjaHBvaW50IG1fcHJvcGVydHlXYXRjaHBvaW50OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAg
ICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2Vt
ZW50V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6
Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOwor
ICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNo
cG9pbnQodGhpcyk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJl
SW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIGlmIChtX2tleS5pc1dh
dGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAg
ICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERGRzo6
c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwgIikg
b24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJpbnRT
dHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBmYWls
ZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBzdHJpbmdEZXRhaWwo
b3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRpc29u
KAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50LCBD
b3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
Ik9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAg
ICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMywyNyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5k
bGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVu
Y3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hl
Y2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUqIGhhbmRs
ZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUg
b3AgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRl
ZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zm
c2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZz
ZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBi
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5
T2Zmc2V0KTsKKworICAgIC8vIENyZWF0ZSBhIHByZXNlbmNlIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIGJhc2VkIG9uIHNvbWUga25vd24gb2Zmc2V0IGFuZCBzdHJ1Y3R1cmUgc2V0LiBEb2VzIG5v
dAorICAgIC8vIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uZGl0aW9uLCBidXQgaXQgbWF5
IHJldHVybiBhIG51bGwgb25lIGlmIGl0IGVuY291bnRlcnMgYSBjb250cmFkaWN0aW9uLgorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlTGlrZSgKKyAgICAgICAgSlNPYmplY3Qq
IGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3Ry
dWN0dXJlU2V0Jik7CisgICAgCisgICAgLy8gQXR0ZW1wdCB0byB3YXRjaCB0aGUgcHJlc2VuY2Ug
b2YgYSBwcm9wZXJ0eS4gSXQgd2lsbCB3YXRjaCB0aGF0IHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50
IGluIHRoZSBzYW1lCisgICAgLy8gd2F5IGFzIGluIGFsbCBvZiB0aGUgc3RydWN0dXJlcyBpbiB0
aGUgc2V0LiBJdCBtYXkgZW1pdCBjb2RlIGluc3RlYWQgb2YganVzdCBzZXR0aW5nIGEgd2F0Y2hw
b2ludC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBhbGwgd29ya3Mgb3V0LgorICAgIGJv
b2wgY2hlY2tQcmVzZW5jZUxpa2UoSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgdm9pZCBjaGVj
a1ByZXNlbmNlTGlrZShOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICAKKyAgICAvLyBXb3JrcyB3aXRoIGJvdGgg
R2V0QnlJZFZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFyaWFudC4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0
ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJp
YW50VHlwZSYpOworCisgICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgICAgIAogICAg
IHZvaWQgaGFuZGxlR2V0QnlJZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3Bl
Y3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAg
ICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsKQEAgLTIxMiw3ICsyMzIsMzIgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAg
ICAgYm9vbCBpc0RpcmVjdCk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tWZWN0b3ImKTsKKyAgICAKKyAgICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRj
aHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uIFJldHVybnMgZmFsc2Ug
aWYgdGhlCisgICAgLy8gY29uZGl0aW9uIG5vIGxvbmdlciBob2xkcywgYW5kIHRoZXJlZm9yZSBu
byByZWFzb25hYmxlIGNoZWNrIGNhbiBiZSBlbWl0dGVkLgorICAgIGJvb2wgY2hlY2soY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBw
cm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZCk7CisgICAgCisgICAgLy8gRWl0aGVy
IHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9u
LiBJdCBtdXN0IGJlIGEgUHJlc2VuY2UKKyAgICAvLyBjb25kaXRpb24uIEl0IHdpbGwgYXR0ZW1w
dCB0byBwcm9tb3RlIGEgUHJlc2VuY2UgY29uZGl0aW9uIHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRp
dGlvbi4KKyAgICAvLyBFbWl0cyBjb2RlIGZvciB0aGUgbG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNv
bmRpdGlvbiBndWFyZHMsIGFuZCByZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhl
IGxvYWRlZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlmIHRoZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhv
bGRzLgorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJik7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmLCBOb2RlVHlwZSA9IEdldEJ5
T2Zmc2V0KTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIAorICAgIC8vIENh
bGxzIGNoZWNrKCkgZm9yIGVhY2ggY29uZGl0aW9uIGluIHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVp
dGhlciBlbWl0cyBjaGVja3Mgb3IgcmVnaXN0ZXJzCisgICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEg
Y29tYmluYXRpb24gb2YgdGhlIHR3bykgdG8gbWFrZSB0aGUgY29uZGl0aW9ucyBob2xkLiBJZiBh
bnkgb2YgdGhvc2UKKyAgICAvLyBjb25kaXRpb25zIGFyZSBubyBsb25nZXIgY2hlY2thYmxlLCBy
ZXR1cm5zIGZhbHNlLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmKTsKKyAgICAKKyAgICAvLyBDYWxscyBjaGVjaygpIGZvciB0aG9zZSBjb25kaXRpb25z
IHRoYXQgYXJlbid0IHRoZSBzbG90IGJhc2UsIGFuZCBjYWxscyBsb2FkKCkgZm9yIHRoZSBzbG90
CisgICAgLy8gYmFzZS4gRG9lcyBhIGNvbWJpbmF0aW9uIG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0
aW9uIGFuZCBjaGVjayBlbWlzc2lvbiB0byBndWFyZCB0aGUKKyAgICAvLyBjb25kaXRpb25zLCBh
bmQgZW1pdHMgY29kZSB0byBsb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzbG90IGJhc2UuIFJldHVy
bnMgYSBub2RlIGNvbnRhaW5pbmcKKyAgICAvLyB0aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51
bGwgaWYgYW55IG9mIHRoZSBjb25kaXRpb25zIHdlcmUgbm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAg
ICBHZXRCeU9mZnNldE1ldGhvZCBwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYpOworICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICB2b2lkIHBy
ZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiAr
NzUxLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0
dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJvdXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBu
b3QgdGhlIG90aGVyIHdheSBhcm91bmQuIEJ1dCBjdXJyZW50bHksCisgICAgICAgIC8vIHRoaXMg
Z2V0cyBubyBwcm9maXQgZnJvbSB1c2luZyBlbWl0UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xs
IG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRoZQorICAgICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUg
YXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEgd2Vha0pTQ29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9i
amVjdE5vZGUgPSB3ZWFrSlNDb25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSks
IG9iamVjdE5vZGUpOwogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKQEAgLTIyMjEsMTUgKzIy
NjksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQo
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgTm9kZVR5cGUgb3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlP
ZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAg
ICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFu
dCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3Ry
dWN0dXJlU2V0LCBvZmZzZXQpKSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJh
c2UpOwotICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBA
IC0yMjQ1LDYgKzIyODYsMTggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zm
c2V0KAogICAgIHJldHVybiBnZXRCeU9mZnNldDsKIH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2Us
IGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQoreworICAgIGlmIChiYXNl
LT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFw
aC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQs
IG9mZnNldCkpIHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAg
ICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQsIG9wKTsKK30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9y
YWdlOwpAQCAtMjI2MiwxMCArMjMxNSwyOTkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9y
KQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbikKK3sKKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRp
b24pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFjb25kaXRpb24u
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwKKyAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3
ZWFrSlNDb25zdGFudChjb25kaXRpb24ub2JqZWN0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworR2V0QnlPZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJzZXI6OnByb21vdGVUb0NvbnN0YW50KEdl
dEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCkKK3sKKyAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGUKKyAgICAgICAgJiYgbWV0aG9kLnByb3Rv
dHlwZSgpLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBpZiAoSlNW
YWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShtZXRob2QucHJv
dG90eXBlKCktPnZhbHVlKCksIG1ldGhvZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCksIG1ldGhv
ZC5vZmZzZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0
YW50KG1fZ3JhcGguZnJlZXplKGNvbnN0YW50KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBt
ZXRob2Q7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQoreworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nKCJQbGFubmluZyBhIGxvYWQ6ICIsIGNvbmRpdGlvbiwgIlxu
Iik7CisgICAgCisgICAgLy8gV2UgbWlnaHQgcHJvbW90ZSB0aGlzIHRvIEVxdWl2YWxlbmNlLCBh
bmQgYSBsYXRlciBERkcgcGFzcyBtaWdodCBhbHNvIGRvIHN1Y2ggcHJvbW90aW9uCisgICAgLy8g
ZXZlbiBpZiB3ZSBmYWlsLCBidXQgZm9yIHNpbXBsaWNpdHkgdGhpcyBjYW5ub3QgYmUgYXNrZWQg
dG8gbG9hZCBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24uCisgICAgLy8gTm9uZSBvZiB0aGUgY2xp
ZW50cyBvZiB0aGlzIG1ldGhvZCB3aWxsIHJlcXVlc3QgYSBsb2FkIG9mIGFuIEVxdWl2YWxlbmNl
IGNvbmRpdGlvbiBhbnl3YXksCisgICAgLy8gYW5kIHN1cHBvcnRpbmcgaXQgd291bGQgY29tcGxp
Y2F0ZSB0aGUgaGV1cmlzdGljcyBiZWxvdy4KKyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24u
a2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgCisgICAgLy8gSGVy
ZSdzIHRoZSByYW5raW5nIG9mIGhvdyB0byBoYW5kbGUgdGhpcywgZnJvbSBtb3N0IHByZWZlcnJl
ZCB0byBsZWFzdCBwcmVmZXJyZWQ6CisgICAgLy8KKyAgICAvLyAxKSBXYXRjaHBvaW50IG9uIGFu
IGVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbmQgcmV0dXJuIGEgY29uc3RhbnQgbm9kZSBmb3IgdGhl
IGxvYWRlZCB2YWx1ZS4KKyAgICAvLyAgICBObyBvdGhlciBjb2RlIGlzIGVtaXR0ZWQsIGFuZCB0
aGUgc3RydWN0dXJlIG9mIHRoZSBiYXNlIG9iamVjdCBpcyBuZXZlciByZWdpc3RlcmVkLgorICAg
IC8vICAgIEhlbmNlIHRoaXMgcmVzdWx0cyBpbiB6ZXJvIGNvZGUgYW5kIHdlIHdvbid0IGpldHRp
c29uIHRoaXMgY29tcGlsYXRpb24gaWYgdGhlIG9iamVjdAorICAgIC8vICAgIHRyYW5zaXRpb25z
LCBldmVuIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgd2F0Y2hhYmxlIHJpZ2h0IG5vdy4KKyAgICAvLwor
ICAgIC8vIDIpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUg
b2YgdGhlIGJhc2UgaXMgZ29pbmcgdG8gYmUgd2F0Y2hlZCBieSB0aGUKKyAgICAvLyAgICBERkcg
YW55d2F5IChpLmUuIGRmZ1Nob3VsZFdhdGNoKS4gV2F0Y2ggdGhlIHN0cnVjdHVyZSBhbmQgZW1p
dCB0aGUgbG9hZC4gRG9uJ3Qgd2F0Y2ggdGhlCisgICAgLy8gICAgY29uZGl0aW9uLCBzaW5jZSB0
aGUgYWN0IG9mIHR1cm5pbmcgdGhlIGJhc2UgaW50byBhIGNvbnN0YW50IGluIElSIHdpbGwgY2F1
c2UgdGhlIERGRyB0bworICAgIC8vICAgIHdhdGNoIHRoZSBzdHJ1Y3R1cmUgYW55d2F5IGFuZCBk
b2luZyBzbyB3b3VsZCBzdWJzdW1lIHdhdGNoaW5nIHRoZSBjb25kaXRpb24uCisgICAgLy8KKyAg
ICAvLyAzKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9m
IHRoZSBiYXNlIGlzIHdhdGNoYWJsZSBidXQgbm90IGJ5IHRoZQorICAgIC8vICAgIERGRyAoaS5l
LiB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpIGFuZCAhZGZnU2hvdWxkV2F0
Y2hJZlBvc3NpYmxlKCkpLiBXYXRjaAorICAgIC8vICAgIHRoZSBjb25kaXRpb24sIGFuZCBlbWl0
IGEgbG9hZC4KKyAgICAvLworICAgIC8vIDQpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUg
Y3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgbm90IHdhdGNoYWJsZS4gRW1pdCBhCisg
ICAgLy8gICAgc3RydWN0dXJlIGNoZWNrLCBhbmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAv
LyA1KSBUaGUgY29uZGl0aW9uIGRvZXMgbm90IGhvbGQuIEdpdmUgdXAgYW5kIHJldHVybiBudWxs
LgorICAgIAorICAgIC8vIEZpcnN0LCB0cnkgdG8gcHJvbW90ZSBQcmVzZW5jZSB0byBFcXVpdmFs
ZW5jZS4gV2UgZG8gdGhpcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZQorICAgIC8vIGJlY2F1
c2UgaXQncyB0aGUgbW9zdCBwcm9maXRhYmxlLiBBbHNvLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUg
dGhlIHByZXNlbmNlIGlzIHdhdGNoYWJsZSBidXQKKyAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHdh
dGNoIGl0IHVubGVzcyBpdCBiZWNhbWUgYW4gZXF1aXZhbGVuY2UgKHNlZSB0aGUgcmVsYXRpb25z
aGlwIGJldHdlZW4KKyAgICAvLyAoMSksICgyKSwgYW5kICgzKSBhYm92ZSkuCisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VDb25kaXRpb24gPSBjb25kaXRpb24uYXR0ZW1w
dFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoKTsKKyAgICBpZiAobV9ncmFwaC53YXRj
aENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikpCisgICAgICAgIHJldHVybiBHZXRCeU9m
ZnNldE1ldGhvZDo6Y29uc3RhbnQobV9ncmFwaC5mcmVlemUoZXF1aXZhbGVuY2VDb25kaXRpb24u
cmVxdWlyZWRWYWx1ZSgpKSk7CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UnbGwgaGF2
ZSB0byBtYXRlcmlhbGl6ZSB0aGUgY29uZGl0aW9uJ3MgYmFzZSBhcyBhIGNvbnN0YW50IGluIERG
RyBJUi4gT25jZQorICAgIC8vIHdlIGRvIHRoaXMsIHRoZSBmcm96ZW4gdmFsdWUgd2lsbCBoYXZl
IGl0cyBvd24gaWRlYSBvZiB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMuIFVzZSB0aGF0IGZyb20KKyAg
ICAvLyBub3cgb24ganVzdCBiZWNhdXNlIGl0J3MgbGVzcyBjb25mdXNpbmcuCisgICAgRnJvemVu
VmFsdWUqIGJhc2UgPSBtX2dyYXBoLmZyZWV6ZShjb25kaXRpb24ub2JqZWN0KCkpOworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgLy8gQ2hl
Y2sgaWYgdGhlIHN0cnVjdHVyZSB0aGF0IHdlJ3ZlIHJlZ2lzdGVyZWQgbWFrZXMgdGhlIGNvbmRp
dGlvbiBob2xkLiBJZiBub3QsIGp1c3QgZ2l2ZQorICAgIC8vIHVwLiBUaGlzIGlzIGNhc2UgKDUp
IGFib3ZlLgorICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1
Y3R1cmUpKQorICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAKKyAgICAv
LyBJZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoZWQgYnkgdGhlIERGRyBhbHJlYWR5LCB0aGVuIGp1
c3QgdXNlIHRoaXMgZmFjdCB0byBlbWl0IHRoZSBsb2FkLgorICAgIC8vIFRoaXMgaXMgY2FzZSAo
MikgYWJvdmUuCisgICAgaWYgKHN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKKyAgICAgICAg
cmV0dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3Rv
dHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBJZiB3ZSBjYW4g
d2F0Y2ggdGhlIGNvbmRpdGlvbiByaWdodCBub3csIHRoZW4gd2UgY2FuIGVtaXQgdGhlIGxvYWQg
YWZ0ZXIgd2F0Y2hpbmcgaXQuIFRoaXMKKyAgICAvLyBpcyBjYXNlICgzKSBhYm92ZS4KKyAgICBp
ZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAgICByZXR1cm4gcHJv
bW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2Us
IGNvbmRpdGlvbi5vZmZzZXQoKSkpOworICAgIAorICAgIC8vIFdlIGNhbid0IHdhdGNoIGFueXRo
aW5nIGJ1dCB3ZSBrbm93IHRoYXQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIHNhdGlzZmllcyB0aGUg
Y29uZGl0aW9uLiBTbywKKyAgICAvLyBjaGVjayBmb3IgdGhhdCBzdHJ1Y3R1cmUgYW5kIHRoZW4g
ZW1pdCB0aGUgbG9hZC4KKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBDaGVja1N0cnVjdHVyZSwg
CisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAg
ICAgICAgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oYmFzZSkpKTsKKyAgICByZXR1cm4g
cHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJh
c2UsIGNvbmRpdGlvbi5vZmZzZXQoKSkpOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kLAorICAgIE5vZGVUeXBlIG9wKQor
eworICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRo
b2Q6OkludmFsaWQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGNhc2UgR2V0QnlPZmZz
ZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8obWV0aG9kLmNvbnN0YW50KCkpKTsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGFkZFRvR3Jh
cGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5wcm90b3R5cGUoKSkpOworICAgICAgICByZXR1
cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1i
ZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOworICAgIH0KKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpMb2FkOgorICAgICAgICAvLyBXaWxsIG5ldmVyIHNlZSB0aGlzIGZyb20gcGxhbkxvYWQo
KS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAor
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24sIE5vZGVUeXBlIG9wKQoreworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1l
dGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvbik7CisgICAgcmV0dXJuIGxvYWQocHJlZGljdGlvbiwg
bV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25kaXRpb24udWlkKCkpLCBtZXRob2QsIG9w
KTsKK30KKworYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlvblNldCkgeworICAgICAgICBpZiAoIWNo
ZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cGxhbkxv
YWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiY29uZGl0aW9uU2V0ID0gIiwgY29uZGl0
aW9uU2V0LCAiXG4iKTsKKyAgICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25T
ZXQpIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCgpKSB7CisgICAgICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IXJlc3VsdCk7IC8vIFNob3VsZCBvbmx5IHNlZSBleGFjdGx5IG9uZSBvZiB0aGVzZS4KKyAgICAg
ICAgICAgIHJlc3VsdCA9IHBsYW5Mb2FkKGNvbmRpdGlvbik7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCFjaGVjayhj
b25kaXRpb24pKQorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQo
ISFyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIE5vZGVUeXBlIG9wKQoreworICAgIEdldEJ5
T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvblNldCk7CisgICAgcmV0dXJu
IGxvYWQoCisgICAgICAgIHByZWRpY3Rpb24sCisgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMo
KS5lbnN1cmUoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkudWlkKCkpLAorICAgICAg
ICBtZXRob2QsIG9wKTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gQnl0ZUNvZGVQYXJz
ZXI6OnByZXNlbmNlTGlrZSgKKyAgICBKU09iamVjdCoga25vd25CYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0
KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQo
KSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKKyAgICBQcm9wZXJ0eU9mZnNldCBmaXJzdE9mZnNldCA9IHNldFswXS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgaWYgKGZpcnN0T2Zmc2V0ICE9IG9mZnNldCkK
KyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBvdGhl
ckF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG90aGVyT2Zmc2V0ID0gc2V0W2ld
LT5nZXRDb25jdXJyZW50bHkodWlkLCBvdGhlckF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob3Ro
ZXJPZmZzZXQgIT0gb2Zmc2V0IHx8IG90aGVyQXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKQorICAg
ICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgfQorICAgIHJl
dHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcihrbm93
bkJhc2UsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKK30KKworYm9vbCBCeXRlQ29kZVBhcnNl
cjo6Y2hlY2tQcmVzZW5jZUxpa2UoCisgICAgSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHNldCkKK3sKKyAgICByZXR1cm4gY2hlY2socHJlc2VuY2VMaWtlKGtub3duQmFzZSwgdWlkLCBv
ZmZzZXQsIHNldCkpOworfQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpjaGVja1ByZXNlbmNlTGlr
ZSgKKyAgICBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIGlmIChKU09iamVjdCog
a25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKKyAg
ICAgICAgaWYgKGNoZWNrUHJlc2VuY2VMaWtlKGtub3duQmFzZSwgdWlkLCBvZmZzZXQsIHNldCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVj
dHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNldCkpLCBiYXNlKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAgICAvLyBN
YWtlIHN1cmUgYmFja3dhcmRzIHByb3BhZ2F0aW9uIGtub3dzIHRoYXQgd2UndmUgdXNlZCBiYXNl
LgorICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgCisgICAgYm9vbCBuZWVkU3Ry
dWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIAorICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0g
YmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKKyAgICAgICAgLy8gVHJ5
IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90
IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKKyAgICAgICAgLy8gaWYgdGhlIGJhc2Un
cyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRm
Z1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEgcHJvdG90
eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCisgICAgICAgICAgICAgICAg
Ly8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBh
bGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gdmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUgcHJvdG90eXBlIChpdCB3b3VsZCBiZSBoaWxhcmlv
dXNseSByYXJlIGlmIHRoZXkKKyAgICAgICAgICAgICAgICAvLyBkaWRuJ3QpLiBOb3RlIHRoYXQg
d2UgYXJlIHJlbHlpbmcgb24gc3RydWN0dXJlU2V0KCkgaGF2aW5nIGF0IGxlYXN0IG9uZSBlbGVt
ZW50LiBUaGF0CisgICAgICAgICAgICAgICAgLy8gd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJl
Y2F1c2Ugb2YgaG93IEdldEJ5SWRTdGF0dXMvUHV0QnlJZFN0YXR1cyB3b3JrLgorICAgICAgICAg
ICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpWzBdLT5z
dG9yZWRQcm90b3R5cGVPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBib29sIGFsbEFncmVlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgdmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKVtpXS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90
eXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxBZ3JlZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGFsbEFncmVlKSB7CisgICAgICAgICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgICAgICAgICAgICAgICAg
ICBrbm93bkJhc2UsIHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkU3RydWN0dXJlQ2hl
Y2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UncmUgbG9hZGluZyBkaXJlY3RseSBmcm9tIGJh
c2UuIFdlIGNhbiBhdm9pZCBhbGwgb2YgdGhlIGNvZGUgdGhhdCBmb2xsb3dzCisgICAgICAgICAg
ICAgICAgLy8gaWYgd2UgY2FuIHByb3ZlIHRoYXQgdGhlIHByb3BlcnR5IGlzIGEgY29uc3RhbnQu
IE90aGVyd2lzZSwgd2UgdHJ5IHRvIHByb3ZlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgLy8g
cHJvcGVydHkgaXMgd2F0Y2hhYmx5IHByZXNlbnQsIGluIHdoaWNoIGNhc2Ugd2UgZ2V0IHJpZCBv
ZiB0aGUgc3RydWN0dXJlIGNoZWNrLgorCisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gcHJlc2VuY2VDb25kaXRpb24gPQorICAgICAgICAgICAgICAgICAgICBwcmVzZW5j
ZUxpa2Uoa25vd25CYXNlLCB1aWQsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkpOworCisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZh
bGVuY2VDb25kaXRpb24gPQorICAgICAgICAgICAgICAgICAgICBwcmVzZW5jZUNvbmRpdGlvbi5h
dHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigpOworICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGVxdWl2YWxlbmNlQ29uZGl0aW9uKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGVxdWl2YWxlbmNlQ29uZGl0aW9u
LnJlcXVpcmVkVmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQg
YXR0cmlidXRlcyB3ZSdyZSBpbnRlcmVzdGVkIGluLiBIb3BlZnVsbHkgYWxsIG9mIHRoZSBzdHJ1
Y3R1cmVzIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIHN0cnVjdHVyZSBzZXQgYWdyZWUuCisg
ICAgICAgICAgICAgICAgaWYgKGNoZWNrKHByZXNlbmNlQ29uZGl0aW9uKSkKKyAgICAgICAgICAg
ICAgICAgICAgbmVlZFN0cnVjdHVyZUNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAobmVlZFN0cnVjdHVyZUNoZWNrKQorICAgICAgICBhZGRU
b0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBs
b2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlwZSBsb2FkT3A7CisgICAgaWYgKHZhcmlhbnQuY2Fs
bExpbmtTdGF0dXMoKSkgeworICAgICAgICBsb2FkUHJlZGljdGlvbiA9IFNwZWNDZWxsT3RoZXI7
CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRlclNldHRlckJ5T2Zmc2V0OworICAgIH0gZWxzZSB7
CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gcHJlZGljdGlvbjsKKyAgICAgICAgbG9hZE9wID0g
R2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE5vZGUqIGxvYWRlZFZhbHVlOworICAgIGlm
ICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgIGxvYWRlZFZhbHVl
ID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFyaWFudC5jb25kaXRpb25TZXQoKSwgbG9hZE9wKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKKyAg
ICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAorICAgICAgICAgICAgbG9hZE9wKTsK
KyAgICB9CisKKyAgICByZXR1cm4gbG9hZGVkVmFsdWU7Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlk
VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworCisgICAgY2hlY2tQcmVz
ZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50
Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKKyAgICByZXR1cm4gaGFuZGxlUHV0QnlP
ZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOwogfQogCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjI4OCwxOCArMjYzMCwzNiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigp
KQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJ
ZCgpOwotICAgIAorICAgICAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2Vz
OworICAgICAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNr
cyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAgICAg
ICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNlIGlu
IHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNrcyBh
bmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAodW5z
aWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50
SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFudElu
ZGV4XS5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgR2V0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAg
ICAgICAgIGlmICh2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNl
dENhc2UoCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVyZVNldCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5v
ZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxv
YWQodmFyaWFudC5jb25kaXRpb25TZXQoKSk7CisgICAgICAgICAgICBpZiAoIW1ldGhvZCkgewor
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwK
KyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZXMuYXBw
ZW5kKE11bHRpR2V0QnlPZmZzZXRDYXNlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCksIG1ldGhvZCkp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAg
ICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKKyAg
ICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0QnlPZmZzZXQKICAgICAgICAgTXVsdGlH
ZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEuYWRk
KCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gZ2V0QnlJZFN0YXR1cy52YXJpYW50cygpOwor
ICAgICAgICBkYXRhLT5jYXNlcyA9IGNhc2VzOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVt
YmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbk9wZXJhbmQpLAogICAgICAgICAgICAgYWRkVG9HcmFwaChNdWx0aUdldEJ5T2Zmc2V0
LCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwpAQCAtMjMwOSwzMCAr
MjY2OSwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIEFTU0VS
VChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CiAgICAgR2V0QnlJZFZhcmlhbnQg
dmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAgICAgICAgICAgICAgCisgICAgTm9kZSog
bG9hZGVkVmFsdWUgPSBsb2FkKHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZh
cmlhbnQpOworICAgIGlmICghbG9hZGVkVmFsdWUpIHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlk
LCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkK
ICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwog
ICAgIAotICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7Ci0gICAgCi0gICAgZW1pdENoZWNr
cyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotCi0gICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKQotICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVC
YXNlKCkpOwotICAgIAotICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQgdG8KLSAgICAvLyBl
bnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxp
dmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCi0gICAgLy8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMu
IFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1
Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcg
dGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UuCi0gICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNl
KQotICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZSk7Ci0gICAgCi0gICAg
Tm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgdmFyaWFudC5j
YWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0gICAgICAgIGJh
c2UsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9m
ZnNldCgpLAotICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0
ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICAKICAgICBpZiAoIXZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSkgewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3Bl
cmFuZCksIGxvYWRlZFZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM2OSw3ICsyNzE1LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyAgICBzaW5jZSB3
ZSBvbmx5IHJlYWxseSBjYXJlIGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBu
b3QgZ29pbmcgdG8gdGFrZSB0aGF0CiAgICAgLy8gICAgc2hvcnRjdXQuCiAgICAgaW50IG5leHRS
ZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
LSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJ
bW1lZGlhdGVOYWtlZFNldCk7CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAKICAgICBoYW5kbGVDYWxsKAogICAg
ICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2Fs
bCwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLApAQCAtMjQwMywxNyArMjc0OSwyMCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQot
ICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgp
OwotICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlh
bnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJ
bmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0
dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
KyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGgu
Y29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgCiAgICAgICAg
IE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXRE
YXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFu
dHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CkBAIC0yNDI2LDggKzI3NzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKICAgICBjYXNlIFB1dEJ5SWRW
YXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2Up
OwotICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJp
YW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAgICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkK
ICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQzNSw3ICsyNzgzLDEwIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbjogewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAg
ICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICBpZiAo
IWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJ
ZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3Qp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHZhcmlh
bnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhh
c0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI0ODYsMTkgKzI4MzcsMTEgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
UHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBi
YXNlOwotICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgIENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUo
KSkpLCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFu
dENoZWNrcygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KSkKLSAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5
T2Zmc2V0KAotICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgdmFyaWFudC5iYXNlU3Ry
dWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAg
ICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0g
bG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50KTsKKyAg
ICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgeworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwg
aWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTm9kZSogc2V0dGVy
ID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZhbHVlKTsKICAgICAgICAgCkBAIC0yNTI2
LDcgKzI4NjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CiAg
ICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJl
Z2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0
KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIHZhbHVlLCBJ
bW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAgICAgICAgIGhhbmRsZUNhbGwoCkBAIC0zNDY2LDYg
KzM4MDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworCiAgICAgICAgICAgICAgICAgR2V0
QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVyZSwg
dWlkKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnN0YXRlKCkgIT0gR2V0QnlJZFN0YXR1
czo6U2ltcGxlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1cy5udW1WYXJpYW50cygpICE9
IDEKQEAgLTM0NzMsOSArMzgxNywxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwg
YWRkVG9HcmFwaChHZXRCeUlkRmx1c2gsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0
dXNbMF0uc3RydWN0dXJlU2V0KCkub25seVN0cnVjdHVyZSgpKTsKKworICAgICAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSB3ZWFrSlNDb25zdGFudChnbG9iYWxPYmplY3QpOworICAgICAgICAgICAg
ICAgIE5vZGUqIHJlc3VsdCA9IGxvYWQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgc3RhdHVzWzBdKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBzdGF0dXNbMF0u
c3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKKyAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTM2
MTksMTAgKzM5NjUsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZp
ZXJOdW1iZXIpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSksIGdldChWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzWzBdLnN0cnVjdHVyZSgpLm9ubHlTdHJ1
Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxs
Q29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29w
ZSkpKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVy
TnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4ob3BlcmFuZCksIGdldChWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUpKSk7CisgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IHdlYWtKU0Nv
bnN0YW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRp
Zmllck51bWJlciwgc3RhdHVzWzBdLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwogICAg
ICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiAr
ODksOSBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAg
ICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVS
ZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBmb3IgKEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNl
cyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50
LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CkBAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Nl
bGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+
IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOwogICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQ+IHdhdGNocG9pbnRzOworICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRz
OwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQs
MjEgKzI5NCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBn
ZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRy
dWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGlu
Z3MgdG8gdGhpcy4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAg
ICAgICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0cnVjdHVyZVNldCgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52
YXJpYW50cy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJl
bW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0
YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSYgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGdl
dENhc2Uuc2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChn
ZXRDYXNlLnNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5j
YXNlc1tpLS1dID0gZGF0YS5jYXNlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLmNhc2VzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAx
KQorICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhc2VzLnNpemUoKSAhPSAxKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbWl0
R2V0QnlPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFz
ZVZhbHVlLCBkYXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwg
ZGF0YS5jYXNlc1swXSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTM3NCw4ICszNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMu
bnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tp
XS5jb25zdGFudENoZWNrcygpLmlzRW1wdHkoKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwg
c3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0
YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90eXBlIGNhc2VzLgogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDM4NgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTIsNyArMzkwLDEy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5t
X211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlh
bnRzID0gc3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPmNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE11bHRp
R2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuc3Ry
dWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRo
b2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvTXVsdGlHZXRCeU9mZnNldChkYXRhKTsKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTQzMiw5ICs0MzUsMzEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTspCi0gICAgICAgICAg
ICAgICAgICAgIGFkZENoZWNrcyhvcmlnaW4sIGluZGV4SW5CbG9jaywgc3RhdHVzW2ldLmNvbnN0
YW50Q2hlY2tzKCkpOworCisgICAgICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVz
LnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxHb29kKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9u
KGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9i
amVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBub2RlLT5vcmln
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgY29uZGl0aW9uLm9iamVjdCgpLCBLbm93
bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50
cygpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5C
bG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0sIGlkZW50aWZpZXJOdW1iZXIpOwpAQCAt
NTI5LDQxICs1NTQsNzIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFu
Z2VkOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRl
eEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29u
c3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgeworICAgICAgICAvLyBXaGVuIHdlIGdldCB0byBoZXJlIHdlIGhhdmUgYWxyZWFk
eSBlbWl0dGVkIGFsbCBvZiB0aGUgcmVxdWlzaXRlIGNoZWNrcyBmb3IgZXZlcnl0aGluZy4KKyAg
ICAgICAgLy8gU28sIHdlIGp1c3QgbmVlZCB0byBlbWl0IHdoYXQgdGhlIG1ldGhvZCBvYmplY3Qg
dGVsbHMgdXMgdG8gZW1pdC4KICAgICAgICAgCisgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleElu
QmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZ2V0Q2FzZS5zZXQoKSk7CisKKyAgICAgICAgR2V0QnlP
ZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpJbnZhbGlkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQo
bm9kZSwgbWV0aG9kLmNvbnN0YW50KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBl
bWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBub2RlLT5jaGlsZDEoKSwgaWRlbnRp
Zmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlw
ZTogeworICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25z
dGFudCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbWV0aG9k
LnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldCgKKyAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVzZSksIGlkZW50
aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJs
b2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IEdl
dEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsK
LSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2Ug
Y2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAKICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4
SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAg
ICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZUZvckxvYWQ7Ci0gICAgICAgIGlmICh2YXJpYW50LmFs
dGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5h
dGVCYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZVZh
bHVlLm1fdmFsdWU7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRD
b25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFy
aWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgLy8gV2UgYXJlbid0IHNldCB1cCB0byBoYW5kbGUg
cHJvdG90eXBlIHN0dWZmLgorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlh
bnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1
ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlVmFsdWUubV92YWx1ZSwgdmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKICAgICAgICAgICAgIG1f
Z3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFsdWUpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlh
bnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5CbG9jaywgb3JpZ2luLCB2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGlsZEVkZ2UgPSBFZGdlKGNoaWxkLCBLbm93bkNl
bGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5v
ZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
Tm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkK
KyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVk
Z2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJm
bHksIG5vZGUtPm9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5hZGQoKTsKLSAgICAgICAgZGF0YS5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOworICAgICAg
ICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0g
aWRlbnRpZmllck51bWJlcjsKICAgICAgICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5
T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CkBAIC02NDMsMTUgKzY5OSw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDaGVjayhpbmRleEluQmxvY2ss
IG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFk
ZENoZWNrcygKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY2hlY2tzKQotICAgIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoZWNrcy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIG9y
aWdpbiwgaW5kZXhJbkJsb2NrLCBjaGVja3NbaV0uY29uc3RhbnQoKSwgY2hlY2tzW2ldLnN0cnVj
dHVyZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2Vs
bCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBpZiAobV9ncmFw
aC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUoKSkgPT0gU3RydWN0dXJlUmVnaXN0
ZXJlZEFuZFdhdGNoZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
dm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcs
IENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29t
bW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1
dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmlu
Z1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMjMgQEAg
dm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVy
cmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEm
IGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAv
LyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFr
IG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0g
ICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFk
ZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9u
KQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRp
b246OkVxdWl2YWxlbmNlOgorICAgICAgICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsg
fQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShK
U0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCit2b2lkIERlc2ly
ZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7Cit9CisK
IGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
IHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTg4LDYgKzEwNyw3
IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2lubGlu
ZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9pbmZlcnJlZFZh
bHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1
cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2ly
ZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC05NSw3ICsxMTUsMTggQEAg
Ym9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgIHJldHVybiBtX3Nl
dHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlk
KCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAg
JiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYnVmZmVyVmll
d3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFy
ZVN0aWxsVmFsaWQoKTsKK30KKwordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJEZXNpcmVkIHdhdGNocG9pbnRzOlxuIik7CisgICAgb3V0LnByaW50KCIgICAg
V2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9zZXRzLCBjb250ZXh0KSwgIlxuIik7Cisg
ICAgb3V0LnByaW50KCIgICAgSW5saW5lIHdhdGNocG9pbnQgc2V0czogIiwgaW5Db250ZXh0KG1f
aW5saW5lU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIEluZmVycmVk
IHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsK
KyAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZp
ZXdzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5
IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4
dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlz
aW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJERkdD
b21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNp
bmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
QEAgLTQwLDMzICs0Miw1NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFz
cyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBHZW5lcmljU2V0QWRhcHRv
ciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIFQgc2V0LCBXYXRjaHBvaW50KiB3
YXRjaHBvaW50KQorc3RydWN0IFNldFBvaW50ZXJBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBh
ZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBDb21tb25EYXRhJiBjb21tb24pCiAgICAg
ewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hwb2ludCk7CisgICAgICAgIHJldHVybiBz
ZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOwogICAgIH0KICAgICBz
dGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVl
bkludmFsaWRhdGVkKCk7IH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIFQgc2V0LCBEdW1wQ29udGV4dCopCisgICAgeworICAgICAgICBvdXQucHJpbnQo
UmF3UG9pbnRlcihzZXQpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0
b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0
Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVl
KiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChJbmZl
cnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGluZmVycmVk
VmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwogICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUs
IER1bXBDb250ZXh0KikKKyAgICB7CisgICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKGluZmVy
cmVkVmFsdWUpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2lu
dEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVy
VmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNB
cnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbklu
dmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOwor
ICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEpT
QXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAg
ICAgIG91dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZSh2aWV3KSwgY29udGV4dCkpOworICAgIH0K
K307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBz
dGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
LCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtl
eS5pc1dhdGNoYWJsZSgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KAor
ICAgICAgICBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNv
bnRleHQoa2V5LCBjb250ZXh0KSk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgV2F0
Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBHZW5lcmljU2V0QWRhcHRvcjxXYXRj
aHBvaW50U2V0VHlwZT4+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlw
ZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNs
YXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2ludFNldFR5cGUsIGJvb2w+IFN0YXRlTWFwOwpAQCAt
ODcsNyArMTEyLDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWFsbHlB
ZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8mIHNldCA6IG1fc2V0cykKLSAgICAg
ICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uLndhdGNocG9pbnRzLmFk
ZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwg
Y29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQgPSB0cnVlOwogICAgIH0K
QEAgLTEwNyw2ICsxMzIsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zZXRzLmNvbnRh
aW5zKHNldCk7CiAgICAgfQogCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgICAgICBmb3IgKGNvbnN0IFdhdGNocG9pbnRTZXRUeXBlJiBlbnRyeSA6
IG1fc2V0cykgeworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgIEFk
YXB0b3I6OmR1bXBJbkNvbnRleHQob3V0LCBlbnRyeSwgY29udGV4dCk7CisgICAgICAgIH0KKyAg
ICB9CisKIHByaXZhdGU6CiAgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZT4gbV9zZXRzOwog
ICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTEyMiw2ICsxNTYsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsKICAgICB2b2lkIGFkZExhemlseShKU0Fy
cmF5QnVmZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3Ug
ZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdo
aWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90
aGVyIGJvb2trZWVwaW5nLgorICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAK
ICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21tb25EYXRhJik7CkBAIC0xNDQsMTIg
KzE4MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5p
c1dhdGNoZWQodmlldyk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0
cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5saW5lU2V0czsKICAgICBHZW5lcmljRGVz
aXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9p
bmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZm
ZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7
CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShy
ZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsMTQgQEAgRGVz
aXJlZFdlYWtSZWZlcmVuY2VzOjp+RGVzaXJlZFdlYWtSZWZlcgogCiB2b2lkIERlc2lyZWRXZWFr
UmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBtX3JlZmVyZW5jZXMu
YWRkKGNlbGwpOworICAgIGlmIChjZWxsKQorICAgICAgICBtX3JlZmVyZW5jZXMuYWRkKGNlbGwp
OworfQorCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTVmFsdWUgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhZGRMYXppbHkodmFsdWUu
YXNDZWxsKCkpOwogfQogCiBib29sIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6Y29udGFpbnMoSlND
ZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IAogCiBjbGFzcyBDb2RlQmxvY2s7
CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFz
cyBWTTsKIApAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6CiAgICAgfkRlc2lyZWRXZWFrUmVmZXJl
bmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXppbHkoSlNDZWxsKik7CisgICAgdm9pZCBhZGRMYXpp
bHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsKICAgICAKICAgICB2b2lk
IHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDggKzI1Nyw4IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBpZiAobm9kZS0+aGFz
TXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYg
ZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAgICAgICAgIG91dC5wcmludChj
b21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClbZGF0
YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250ZXh0KSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNlc1tpXSwgY29udGV4dCkpOwogICAg
IH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7
CkBAIC01MzAsNiArNTMwLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQwogICAgICAgICBpZiAodmFsdWUtPnBvaW50c1RvSGVhcCgpKQogICAgICAgICAgICAgb3V0
LnByaW50KCIgICAgIiwgaW5Db250ZXh0KCp2YWx1ZSwgJm15Q29udGV4dCksICJcbiIpOwogICAg
IH0KKworICAgIG91dC5wcmludChpbkNvbnRleHQod2F0Y2hwb2ludHMoKSwgJm15Q29udGV4dCkp
OwogICAgIAogICAgIGlmICghbXlDb250ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICBteUNvbnRl
eHQuZHVtcChvdXQpOwpAQCAtODQ4LDYgKzg1MCwzMCBAQCB2b2lkIEdyYXBoOjpjbGVhckZsYWdz
T25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCitib29sIEdyYXBoOjp3YXRjaENvbmRpdGlv
bihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIGlmICgha2V5Lmlz
V2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3BsYW4ud2Vh
a1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAgaWYgKGtleS5oYXNQcm90
b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucHJv
dG90eXBlKCkpOworICAgIGlmIChrZXkuaGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICBtX3Bs
YW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5yZXF1aXJlZFZhbHVlKCkpOworICAgIAor
ICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKKworICAgIGlmIChrZXkua2lu
ZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkKKyAgICAgICAgbV9zYWZlVG9Mb2Fk
LmFkZChzdGQ6Om1ha2VfcGFpcihrZXkub2JqZWN0KCksIGtleS5vZmZzZXQoKSkpOworICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3Qq
IGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gbV9zYWZlVG9Mb2Fk
LmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOworfQorCiBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVu
ZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2sp
OwpAQCAtMTAyMCw4ICsxMDQ2LDEyIEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJv
cGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNW
YWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0
dXJlLmlzQ2xvYmJlcmVkKCkpCisgICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVy
ZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBqdXN0IGNvbnZlcnRl
ZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bgorICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1mb2xkIHRoZSBwcm9wZXJ0eS4KKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI3MQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICAKICAgICByZXR1cm4gdHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBzdHJ1Y3R1cmUuc2V0KCksIG9mZnNldCk7CiB9CkBAIC0x
MTY3LDE3ICsxMTk3LDkgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpOwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6ZSgpOyBqLS07KQotICAgICAgICAgICAg
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihzZXRb
al0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gbWFyayBhbnl0aGlu
ZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAotICAgICAgICAgICAg
ICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERv
bid0IG5lZWQgdG8gbWFyayB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2FsbExpbmtTdGF0
dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0LgotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA6IGdldENhc2Uuc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHN0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4
NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtNjY1LDYgKzY2NSwxNSBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZElkZW50aWZpZXJz
JiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQogICAgIERlc2ly
ZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7
IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbnZh
bGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEgUHJlc2VuY2UgY29uZGl0aW9uLAorICAg
IC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBxdWVyeSBpZiB0aGUgY29uZGl0aW9uIGhv
bGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mga25vd3MKKyAgICAvLyB3aGF0J3MgZ29p
bmcgb24uCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYpOworCisgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20g
dGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKKyAg
ICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGgg
d2F0Y2hDb25kaXRpb24oKS4KKyAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwg
UHJvcGVydHlPZmZzZXQpOworICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVz
c0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3Io
SW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkBAIC04NDQsNiArODUzLDcgQEAgcHVibGljOgogICAg
IFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAg
IEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNz
Pj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlx
dWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5dGVjb2RlS2lsbHM7CisgICAgSGFzaFNldDxzdGQ6
OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKICAgICBEb21p
bmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJl
cmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgR2V0QnlPZmZzZXRN
ZXRob2Q6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoiKTsKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludChw
b2ludGVyRHVtcEluQ29udGV4dChjb25zdGFudCgpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQo
b2Zmc2V0KCksICJAIiwgcG9pbnRlckR1bXBJbkNvbnRleHQocHJvdG90eXBlKCksIGNvbnRleHQp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBHZXRCeU9mZnNldE1ldGhvZDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBu
dWxscHRyKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSwgIjoiLCBpbkNvbnRleHQobV9tZXRob2Qs
IGNvbnRleHQpKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgR2V0QnlPZmZzZXRNZXRob2Q6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQo
IkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICBvdXQucHJpbnQo
IkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGcm9tUHJvdG90eXBlIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKyNkZWZpbmUgREZHTXVsdGlHZXRCeU9m
ZnNldERhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJEdW1wQ29udGV4
dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRnJvemVuVmFsdWU7CisK
K2NsYXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAg
ICAgICBJbnZhbGlkLAorICAgICAgICBDb25zdGFudCwKKyAgICAgICAgTG9hZCwKKyAgICAgICAg
TG9hZEZyb21Qcm90b3R5cGUKKyAgICB9OworICAgIAorICAgIEdldEJ5T2Zmc2V0TWV0aG9kKCkK
KyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFudChGcm96ZW5WYWx1ZSogdmFsdWUpCisgICAgewor
ICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3RhbnQgPSB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEdldEJ5T2Zmc2V0TWV0aG9k
IGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRN
ZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gTG9hZDsKKyAgICAgICAgcmVz
dWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBsb2FkRnJvbVByb3RvdHlwZShG
cm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAg
ICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBM
b2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5wcm90b3R5cGUgPSBwcm90
b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkOyB9CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICBy
ZXR1cm4gdS5jb25zdGFudDsKKyAgICB9CisgICAgCisgICAgRnJvemVuVmFsdWUqIHByb3RvdHlw
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWRGcm9tUHJvdG90
eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IExvYWQgfHwga2luZCgpID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0
dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHVuaW9uIHsKKyAgICAgICAgRnJvemVu
VmFsdWUqIGNvbnN0YW50OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRnJvemVuVmFs
dWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAg
ICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1fa2luZDsKK307CisKK2NsYXNzIE11bHRp
R2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZShjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCkKKyAgICAgICAgOiBt
X3NldChzZXQpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgU3RydWN0dXJlU2V0JiBzZXQoKSB7IHJldHVybiBtX3NldDsgfQorICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25zdCBHZXRC
eU9mZnNldE1ldGhvZCYgbWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRob2Q7IH0KKyAgICAK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0
cnVjdHVyZVNldCBtX3NldDsKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBtX21ldGhvZDsKK307CisK
K3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2VzOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpLaW5k
KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXBvY2guaCIKICNpbmNsdWRlICJERkdM
YXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRhLmgiCiAjaW5j
bHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1
ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwxMSArNjYsNiBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vz
c0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiB9OwogCi1zdHJ1Y3QgTXVs
dGlHZXRCeU9mZnNldERhdGEgewotICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7Ci0gICAg
VmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKLX07Ci0KIHN0cnVjdCBNdWx0aVB1
dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKICAgICBWZWN0
b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjQsMTAgKzMyNCwxOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zm
c2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CisKKyAgICAgICAgaWYgKHN0
YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkKSB7Cisg
ICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9IG5vZGUtPmNoaWxkMSgpLT5keW5h
bWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAgICAgICAgICAgICAgIGlmIChncmFw
aC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAgaWYgKHZhbHVlLmlzSW5maW5pdGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9k
ZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgaWYgKCF2YWx1ZVtpXS0+aXNWYWxp
ZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMzNyw0
MiArMzQ1LDI4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIC8vIFdlIGNhbid0
IGFsd2F5cyBndWFyYW50ZWUgdGhhdCB0aGUgTXVsdGlHZXRCeU9mZnNldCBpcyBzYWZlIHRvIGV4
ZWN1dGUgaWYgaXQKLSAgICAgICAgLy8gY29udGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5cGVzLiBX
ZSBrbm93IHRoYXQgaXQgd29uJ3QgbG9hZCBmcm9tIHRob3NlIHByb3RvdHlwZXMgaWYKLSAgICAg
ICAgLy8gd2Ugd2F0Y2ggdGhlIG11dGFiaWxpdHkgb2YgdGhlIHByb3BlcnRpZXMgYmVpbmcgbG9h
ZGVkLiBTbywgaGVyZSB3ZSB0cnkgdG8KLSAgICAgICAgLy8gY29uc3RhbnQtZm9sZCBwcm90b3R5
cGUgbG9hZHMsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSBjbGFpbSB0aGF0IHdlIGNhbm5vdCBob2lz
dC4gV2UKLSAgICAgICAgLy8gYWxzbyBrbm93IHRoYXQgYSBsb2FkIGlzIHNhZmUgdG8gZXhlY3V0
ZSBpZiB3ZSBhcmUgd2F0Y2hpbmcgdGhlIHByb3RvdHlwZSdzCi0gICAgICAgIC8vIHN0cnVjdHVy
ZS4KLSAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG5vZGUtPm11
bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMpIHsKLSAgICAgICAgICAgIGlmICghdmFyaWFu
dC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIHByb3Rv
dHlwZSBsb2FkLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJhc2UgPSB2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBncmFwaC5mcmVlemUoYmFz
ZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3Ry
dWN0dXJlc0FyZVdhdGNoZWQKLSAgICAgICAgICAgICAgICAmJiBmcm96ZW4tPnN0cnVjdHVyZSgp
LT5kZmdTaG91bGRXYXRjaCgpCi0gICAgICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUo
KS0+aXNWYWxpZE9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgIC8v
IFdlJ3JlIGFscmVhZHkgd2F0Y2hpbmcgdGhhdCBpdCdzIHNhZmUgdG8gbG9hZCBmcm9tIHRoaXMu
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPSBncmFwaC50cnlHZXRDb25zdGFu
dFByb3BlcnR5KAotICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJp
YW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBpZiAo
IWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgY29uc3RhbnQt
Zm9sZCBhIHByb3RvdHlwZSBsb2FkLiBUaGVyZWZvcmUsIHdlIHNob3VsZG4ndCBob2lzdAotICAg
ICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHNhZmV0eSBvZiB0aGUgbG9hZCBkZXBlbmRzIG9u
IHN0cnVjdHVyZSBjaGVja3Mgb24gdGhlIHByb3RvdHlwZSwKLSAgICAgICAgICAgICAgICAvLyBh
bmQgd2UncmUgdG9vIGNoZWFwIHRvIHZlcmlmeSB0aGF0IGhlcmUuCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAvLyBjb250YWlucyBsb2FkcyBmcm9tIHByb3RvdHlwZXMu
IElmIHRoZSBsb2FkIHJlcXVpcmVzIGEgY2hlY2sgaW4gSVIsIHdoaWNoIGlzIHJhcmUsIHRoZW4K
KyAgICAgICAgLy8gd2UgY3VycmVudGx5IGNsYWltIHRoYXQgd2UgZG9uJ3Qga25vdyBpZiBpdCdz
IHNhZmUgdG8gZXhlY3V0ZSBiZWNhdXNlIGZpbmRpbmcgdGhhdAorICAgICAgICAvLyBjaGVjayBp
biB0aGUgYWJzdHJhY3Qgc3RhdGUgd291bGQgYmUgaGFyZC4gSWYgdGhlIGxvYWQgcmVxdWlyZXMg
d2F0Y2hwb2ludHMsIHdlIGp1c3QKKyAgICAgICAgLy8gY2hlY2sgaWYgd2UncmUgbm90IGluIGEg
Y2xvYmJlcmVkIHN0YXRlIChpLmUuIGluIGJldHdlZW4gYSBzaWRlIGVmZmVjdCBhbmQgYW4KKyAg
ICAgICAgLy8gaW52YWxpZGF0aW9uIHBvaW50KS4KKyAgICAgICAgZm9yIChjb25zdCBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2Fz
ZXMpIHsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0
aG9kKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OiAvLyBPSyBiZWNhdXNlIGNvbnN0
YW50cyBhcmUgYWx3YXlzIHNhZmUgdG8gZXhlY3V0ZS4KKyAgICAgICAgICAgIGNhc2UgR2V0QnlP
ZmZzZXRNZXRob2Q6OkxvYWQ6IC8vIE9LIGJlY2F1c2UgdGhlIE11bHRpR2V0QnlPZmZzZXQgaGFz
IGl0cyBvd24gY2hlY2tzIGZvciBsb2FkaW5nIGZyb20gc2VsZi4KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90
eXBlOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgT0sgaWYgdGhlIHN0YXRlIGlzbid0IGNsb2Ji
ZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2UuCisgICAgICAgICAgICAgICAgaWYg
KHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpICE9IFN0cnVjdHVyZXNBcmVXYXRjaGVkKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFn
cmFwaC5pc1NhZmVUb0xvYWQobWV0aG9kLnByb3RvdHlwZSgpLT5jYXN0PEpTT2JqZWN0Kj4oKSwg
bWV0aG9kLm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwgZWl0aGVyOgotICAgICAgICAgICAgLy8gLSBOb3Qg
bG9hZCBmcm9tIHRoZSBwcm90b3R5cGUgYmVjYXVzZSBjb25zdGFudCBmb2xkaW5nIHdpbGwgc3Vj
Y2VlZCBpbiB0aGUKLSAgICAgICAgICAgIC8vICAgYmFja2VuZCwgb3IKLSAgICAgICAgICAgIC8v
IC0gRW1pdCBpbnZhbGlkIGNvZGUgdGhhdCBmYWlscyB3YXRjaHBvaW50IGNoZWNrcy4gVGhpcyBj
b3VsZCBoYXBwZW4gaWYgdGhlCi0gICAgICAgICAgICAvLyAgIHByb3BlcnR5IGJlY29tZXMgbXV0
YWJsZSBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB3ZSBhbHJlYWR5IHNldCB0aGUgd2F0Y2hwb2lu
dAotICAgICAgICAgICAgLy8gICBhYm92ZS4gVGhpcyBjYXNlIGlzIE9LIHNpbmNlIHRoZSBjb2Rl
IHdpbGwgZmFpbCB3YXRjaHBvaW50IGNoZWNrcyBhbmQgbmV2ZXIKLSAgICAgICAgICAgIC8vICAg
Z2V0IGluc3RhbGxlZC4KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDE1ICs4Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlH
ZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+
bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lz
dGVyU3RydWN0dXJlcyh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBj
aGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUg
YmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byB3YXRj
aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ug
d2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZXMoZ2V0Q2FzZS5zZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4MzcsMjQgKzM4MzcsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIE11
bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
OwogCi0gICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAo
ZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBj
cmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRoIHplcm8gaW5wdXRzLiBMTFZNIGRvZXNuJ3QgbGlr
ZSB0aGF0LgogICAgICAgICAgICAgdGVybWluYXRlKEJhZENhY2hlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAy
PiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2Nr
LCAyPiBibG9ja3MoZGF0YS5jYXNlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBjYXNlICIsIGkpKTsKICAgICAgICAg
TEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNl
dCBmYWlsIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY29udGludWF0aW9uIikpOwogICAgICAgICAK
ICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBTdHJ1Y3R1cmVT
ZXQgYmFzZVNldDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZh
cmlhbnRzW2ldOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdmFyaWFudC5zdHJ1Y3R1
cmVTZXQoKS5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KClbal07CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNlLnNldCgpW2pdOwogICAgICAgICAgICAgICAgIGJh
c2VTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRj
aENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7
CiAgICAgICAgICAgICB9CkBAIC0zODY1LDI5ICszODY1LDM2IEBAIHByaXZhdGU6CiAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CiAgICAgICAgIAogICAg
ICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9j
a3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNl
ID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9
IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0g
OiBleGl0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFu
dCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsKLSAgICAgICAgICAg
IEpTVmFsdWUgY29uc3RhbnRSZXN1bHQ7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5h
dGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdGFudFJlc3VsdCA9IG1fZ3JhcGgudHJ5
R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5hbHRlcm5h
dGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb25zdGFudFJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudFJl
c3VsdCkpOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3
aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUobWV0aG9kLmNvbnN0YW50KCktPnZh
bHVlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogewogICAgICAgICAgICAgICAgIExW
YWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcih2
YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkKQogICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBiYXNlOwotICAgICAgICAgICAgICAgIGlm
ICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcihtZXRob2Qu
cHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNJ
bmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0
dGVyZmx5KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkocHJvcGVydHlC
YXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQcm9wZXJ0eSgKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZz
ZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHJlc3VsdCkpOwog
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcg
QEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0
ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAg
ICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAgICAgICAg
IHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEzMiw0NyArMTMyLDMzIEBAIHN0YXRpYyB2
b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAogICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQ
UikKIHsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0
dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0
cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChj
b2RlQmxvY2spKTsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAg
IC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3Ry
dWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgICAgICAvLyB0aGlzIGluIGRlYnVnIG1v
ZGVzLgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
b2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBv
ayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBqaXQsCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24o
UmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2ludCk7Ci0gICAgICAgICAgICBvay5saW5rKCZqaXQp
OwotICAgICAgICB9CisgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1
Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCisgICAgICAgICAgICBzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2Jq
ZWN0KSwgc2NyYXRjaEdQUik7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlv
bi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSkpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNv
bmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
Ci0gICAgICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJl
KSk7CisgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAK
LXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHBy
b3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCiAgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQog
ewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LAotICAgICAgICBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQs
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQpAQCAtMjk2
LDExICsyODIsMTMgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcgog
CiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJ
ZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5j
dGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCBzaXplX3QgY291bnQsCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0
KiB3YXRjaHBvaW50U2V0LAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29k
ZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1
YlJvdXRpbmUpCisgICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisg
ICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwKKyAgICBXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYg
c3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1
cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworICAgIAogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJl
Z3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzNyArMzM0LDMxIEBAIHN0YXRpYyBib29sIGdlbmVy
YXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3Bl
cnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHko
cHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCiAgICAg
aWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmFkZChzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJl
ID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGlmIChj
aGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVh
ZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkg
ewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90
b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVj
dHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0
cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkK
LSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHko
cHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAg
ICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3Rv
T2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAg
ICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY3Vy
clN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoIXByb3Rv
T2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKKyAg
ICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9uU2V0LCBj
b2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwor
CisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBTdHJ1Y3R1cmUqIGN1
cnJTdHJ1Y3R1cmU7CisgICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAgICB9CiAgICAgCi0gICAgY3Vy
clN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zm
c2V0KTsKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAg
aWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxk
IGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQg
ZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJn
ZXRGcm9tUHJveHkpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdl
dEdQUik7Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0dWJKaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRv
IGFsbCB0aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8K
QEAgLTYyNSw5ICs2MDcsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2Vs
bChWCiAgICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7
CiAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQotICAgIEFTU0VSVCghc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBpZiAodHlwZUlu
Zm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVBy
b3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAg
ICAgcmV0dXJuIEF0dGVtcHRUb0NhY2hlOwpAQCAtODI1LDIxICs4MDYsMjEgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIH0KIAogICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVk
T2Zmc2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICBz
aXplX3QgY291bnQgPSAwOwogICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9
IGJhc2VWYWx1ZSkgewogICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwogCiAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAg
IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQu
aW1wbCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90
b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKAotICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKGNvdW50ID09
IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50Lmlt
cGwoKSk7CisKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKworICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5z
ZXQoKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5v
ZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9
IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8pOwpAQCAtODUwLDcgKzgzMSw3
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIGJvb2wgcmVzdWx0ID0gZ2Vu
ZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3Rv
bUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCAKKyAg
ICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1Yklu
Zm8sIGNvbmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgpLCBvZmZzZXQsIAogICAgICAgICBzdHJ1
Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAKICAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3Vy
cmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKQEAgLTg2OSw3ICs4
NTAsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAg
ICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCiAgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwK
LSAgICAgICAgcHJvdG90eXBlQ2hhaW4sIGNvdW50KSk7CisgICAgICAgIGNvbmRpdGlvblNldCkp
OwogICAgIAogICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywg
c3R1YlJvdXRpbmUuZ2V0KCkpOwogICAgIApAQCAtOTkxLDI2ICs5NzIsMjggQEAgc3RhdGljIGJv
b2wgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgU3Ry
dWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoRXhlY1N0YXRl
KiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNp
dGlvblN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVj
dHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCisg
ICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQogewogICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgb2xkU3RydWN0dXJlID0gc3Ry
dWN0dXJlOwogICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBwcm9w
ZXJ0eU9mZnNldDsKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBpZGVudC5p
bXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsKIAogICAgIGlmICghc3RydWN0dXJlIHx8ICFzdHJ1
Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCAhc3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhl
IGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKICAgICAvLyBl
bm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgogICAgIGlmIChHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyA8IDYKICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQogICAgICAgICAmJiBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBTa2lwIG9wdGltaXppbmcg
dGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKQEAg
LTEwMTgsMTQgKzEwMDEsMTQgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25T
dHViQQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQh
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAog
ICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMs
IHN0cnVjdHVyZSkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YgorICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgeworICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3MoCisgICAgICAgICAgICAqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUo
KSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91
dGluZTsKQEAgLTEwODEsMTcgKzEwNjQsOCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJh
bnNpdGlvblN0dWJBCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKICAg
ICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIG9sZFN0cnVjdHVy
ZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwgZmFpbHVyZUNhc2VzLAotICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAKLSAg
ICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAo
Kml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1
YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAg
Y29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1
cmVDYXNlcywgc2NyYXRjaEdQUjEpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOwogICAgIApAQCAtMTIyNiw3ICsxMjAwLDcgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1p
dFB1dFRyYW5zaXRpb25TdHViQQogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAg
ICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VS
ZWdpc3RlcnMoKSkKQEAgLTEyNTQsOCArMTIyOCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4
ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCiAgICAgICAgICAgICBzdHJ1Y3R1
cmUpOwotCi0gICAgcmV0dXJuIG9sZFN0cnVjdHVyZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0xMjc5LDEyICsxMjUzLDExIEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAoc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewogICAgICAgICBp
ZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewogCi0gICAg
ICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFu
ZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1Yklu
Zm8sIHB1dEtpbmQpOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRp
b25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2lu
ZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
cHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAg
ICAgICAgCiAgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAogICAgICAgICAgICAgICAgIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCkBAIC0xMjkyLDcgKzEyNjUs
NyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0
UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRT
dHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsK
KyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQpAQCAtMTMxMCwyMCArMTI4MywzMSBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICYmIHN0dWJJbmZv
LnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKIAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9m
ZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICBpZiAoYmFzZVZhbHVl
ICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQs
IG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJh
c2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewor
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAg
ICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1
Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuaW1wbCgp
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0K
KyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVy
dHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVh
YmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0
aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0
OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBz
dHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAg
ICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1
YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNs
b3QuYmFzZSgpLAogICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRy
LAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpLApAQCAtMTMzNCw3ICsxMzE4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6
c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAog
ICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0
dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJl
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5l
KSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0
ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1
bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAt
MTM3OCwxNyArMTM2MiwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRC
eUlkCiAgICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAot
ICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0
dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0KLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJl
KSAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFl
bWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1
cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMp
OwogICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAg
ICAgICAgIGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0
cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBw
cm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAog
ICAgICAgICB9IGVsc2UgewpAQCAtMTQyMSwyMSArMTQwNCwzMiBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRj
aC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xv
dC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUs
IG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJv
dG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9
CiAgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3QuYmFz
ZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAg
ICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBvZmZzZXQgPSBzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0
ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRL
aW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHVi
KAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21G
b3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBl
eGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1Yklu
Zm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNlKCksCiAgICAgICAgICAgICBvZmZzZXQsIHN0cnVj
dHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkp
LApAQCAtMTQ0Niw3ICsxNDQwLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxk
UHV0QnlJZAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAog
ICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAg
ICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0
QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1
YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTQ4NSwxMSAr
MTQ3OSwxNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3Ry
dWN0dXJlKCp2bSk7CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKLSAg
ICBKU1ZhbHVlIGZvdW5kU2xvdEJhc2UgPSB3YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpT
VmFsdWUoKTsKLSAgICBzaXplX3QgY291bnQgPSAhZm91bmRTbG90QmFzZSB8fCBmb3VuZFNsb3RC
YXNlICE9IGJhc2UgPyAKLSAgICAgICAgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFj
Y2VzcyhleGVjLCBzdHJ1Y3R1cmUsIGZvdW5kU2xvdEJhc2UsIGlkZW50LCBvZmZzZXRJZ25vcmVk
KSA6IDA7Ci0gICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKHdhc0ZvdW5kKSB7
CisgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0gYmFzZSkgeworICAgICAgICAgICAgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisg
ICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5TWlzcygKKyAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgIH0KKyAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAog
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0OwpAQCAtMTUxNCw3ICsxNTE0LDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJl
cGF0Y2hJbigKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIH0KICAgICAK
LSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4
ZWMpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgCiAgICAg
ewpAQCAtMTU0NSwxOCArMTU0NCw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBh
dGNoSW4oCiAgICAgICAgIGlmIChzbG90LndhdGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNs
b3Qud2F0Y2hwb2ludFNldCgpLT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2sp
KTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgICAg
ICBKU09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBl
Rm9yTG9va3VwKGV4ZWMpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUg
PSBwcm90b3R5cGUtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJvdG9TdHJ1Y3R1cmUsIGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50
eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAg
ICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1
cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbnMoCisgICAgICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0
R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCi0jaW5jbHVkZSA8
d3RmL0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dCkKLSAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKLXsKLSAgICBBU1NFUlQobV9wcm90b3R5
cGUuaXNOdWxsKCkgfHwgbV9wcm90b3R5cGUuaXNPYmplY3QoKSk7Ci0gICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50
ID0gYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBw
ZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZCkK
LSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKGhl
YWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgaWYgKG1fcHJv
dG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1
cnJlbnQgPSBhc09iamVjdChtX3Byb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50OyBjdXJy
ZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCi0gICAgICAgIG1fdmVj
dG9yLmFwcGVuZChjdXJyZW50KTsKLX0KLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBT
dHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVG
b3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIG1fdmVjdG9yLmFwcGVuZChwcm90b3R5
cGVTdHJ1Y3R1cmUpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVy
ZUNoYWluKiBjaGFpbikKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9i
YWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGNoYWluLT5oZWFkKClbaV07
ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwot
fQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwg
dW5zaWduZWQgY291bnQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xv
YmFsT2JqZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1J
bnRlbmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpCi17Ci19Ci0K
LWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKLXsKLSAg
ICBKU1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3Byb3RvdHlwZTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGFzT2Jq
ZWN0KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAhPSBtX3ZlY3RvcltpXSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IG1fdmVjdG9y
W2ldLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiogY2hhaW4p
IGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBjaGFpbi0+aGVhZCgpW2ldLmdldCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoY2hhaW4tPmhlYWQo
KVttX3ZlY3Rvci5zaXplKCldKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVU
byhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVu
dGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRP
bmx5IHwgQWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbV92ZWN0b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVy
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLUpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW5hbFByb3RvdHlw
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rvci5pc0VtcHR5KCkpOwotICAgIGlmICht
X3ZlY3Rvci5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGFzT2JqZWN0KG1fcHJvdG90eXBl
KTsKLSAgICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0
b3JlZFByb3RvdHlwZSgpKTsKLX0KLQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpvcGVy
YXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotewotICAg
IHJldHVybiBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2dsb2JhbE9iamVjdAotICAgICAgICAm
JiBtX3Byb3RvdHlwZSA9PSBvdGhlci5tX3Byb3RvdHlwZQotICAgICAgICAmJiBtX3ZlY3RvciA9
PSBvdGhlci5tX3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpnYXRo
ZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKSBjb25zdAotewot
ICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBKU09iamVjdCogY3VycmVu
dE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUq
IGN1cnJlbnRTdHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAgICAgdmVjdG9yLmFwcGVuZChDb25zdGFu
dFN0cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRTdHJ1Y3R1cmUpKTsKLSAgICAg
ICAgY3VycmVudFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1
cChtX2dsb2JhbE9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hh
aW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFsT2JqZWN0KTsKLSAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkVmFsdWUoJm1fcHJvdG90eXBlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRQb2ludGVyKCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0
LCAwKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5w
cmludCgKLSAgICAgICAgIihnbG9iYWwgPSAiLCBSYXdQb2ludGVyKG1fZ2xvYmFsT2JqZWN0KSwg
IiwgaGVhZCA9ICIsCi0gICAgICAgIGluQ29udGV4dChtX3Byb3RvdHlwZSwgY29udGV4dCksICIs
IHZlY3RvciA9IFsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29t
bWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9yW2ldLCBjb250ZXh0KSk7Ci0gICAgb3V0
LnByaW50KCJdKSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4u
aAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZpbmUgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bl9oCi0KLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0
dXJlQ2hhaW47Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1wQ29udGV4dDsKLQotY2xhc3MgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVuZGVkU3RydWN0dXJlQ2hh
aW4+IHsKLXB1YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSopOwotICAgIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVh
ZCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291
bnQpOwotICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7Ci0gICAgCi0gICAgYm9vbCBpc1N0
aWxsVmFsaWQoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoU3RydWN0dXJlQ2hhaW4qKSBjb25z
dDsKLSAgICBib29sIG1heUludGVyY2VwdFN0b3JlVG8oVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
Ci0gICAgYm9vbCBpc05vcm1hbGl6ZWQoKTsKLSAgICAKLSAgICBib29sIHRha2VzU2xvd1BhdGhJ
bkRGR0ZvckltcHVyZVByb3BlcnR5KCk7Ci0gICAgCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBj
b25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAgIAotICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0gICAgU3RydWN0dXJlKiBhdChzaXplX3Qg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsgfQotICAgIFN0cnVjdHVyZSog
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAg
IAotICAgIEpTT2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0OwotICAgIAotICAgIFN0
cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmxhc3QoKTsgfQotICAgIAot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluJikgY29uc3Q7
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVy
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGdhdGhlckNoZWNrcyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9y
JikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAg
SlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotICAgIEpTVmFsdWUgbV9wcm90b3R5cGU7
Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDE4NzYwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2VsbCgpIGNvbnN0Owog
ICAgIEpTQ2VsbCogYXNDZWxsKCkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBp
c1ZhbGlkQ2FsbGVlKCk7Ci0gICAgICAgIAorCiAgICAgSlNWYWx1ZSBzdHJ1Y3R1cmVPclVuZGVm
aW5lZCgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MjMsNiArMjcyMywxMyBAQCBKU09i
amVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsK
IH0KIAordm9pZCBKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeShWTSYgdm0pCit7CisgICAg
RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBv
aW50RmlyZTsKKyAgICBzZXRTdHJ1Y3R1cmUoCisgICAgICAgIHZtLCBTdHJ1Y3R1cmU6OnRvQ2Fj
aGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksICZkZWZlcnJlZFdh
dGNocG9pbnRGaXJlKSk7Cit9CisKIHZvaWQgSlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJG
bGF0dGVuaW5nKFZNJiB2bSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qg
b3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKIHsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRo
aXMtPmJ1dHRlcmZseSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MjksMTAgKzYyOSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0m
LCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1
cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiwgU3RydWN0dXJlKik7CiAKLSAg
ICB2b2lkIGNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mIHZtKQotICAgIHsKLSAgICAgICAgc2V0U3Ry
dWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSh2bSkpKTsKLSAgICB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252
ZXJ0VG9EaWN0aW9uYXJ5KFZNJik7CiAKICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0
KFZNJiB2bSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVy
YXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw0OCArMTk0LDYgQEAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGpzQWRkKENhbGxGcmFtZSogYwogCiAjZGVmaW5lIEludmFsaWRQ
cm90b3R5cGVDaGFpbiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKIAotaW5s
aW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBzbG90QmFzZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgc2xvdE9mZnNldCkK
LXsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsK
LSAgICAgICAgCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94
eSgpKQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90b3R5cGVDaGFpbjsKLQotICAgICAg
ICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0gICAg
ICAgIGlmICh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUlu
Zm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICByZXR1
cm4gSW52YWxpZFByb3RvdHlwZUNoYWluOwotICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUg
diA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7Ci0KLSAgICAgICAg
Ly8gSWYgd2UgZGlkbid0IGZpbmQgc2xvdEJhc2UgaW4gdGhlIGJhc2UncyBwcm90b3R5cGUgY2hh
aW4sIHRoZW4gdGhlIGJhc2UKLSAgICAgICAgLy8gbXVzdCBiZSBhIHByb3h5IGZvciBhbm90aGVy
IG9iamVjdC4KLQotICAgICAgICBpZiAodi5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKCFz
bG90QmFzZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJldHVybiBJbnZh
bGlkUHJvdG90eXBlQ2hhaW47Ci0gICAgICAgIH0KLQotICAgICAgICBKU0NlbGwqIGNlbGwgPSB2
LmFzQ2VsbCgpOwotICAgICAgICBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAg
ICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBsb29wLCBpdCdz
IGEgZ29vZCBiZXQgdGhhdCBpdAotICAgICAgICAvLyBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMg
YSBkaWN0aW9uYXJ5LgotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewot
ICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgYXNP
YmplY3QoY2VsbCkpOwotICAgICAgICAgICAgaWYgKHNsb3RCYXNlID09IGNlbGwpCi0gICAgICAg
ICAgICAgICAgc2xvdE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpOyAK
LSAgICAgICAgfQotICAgICAgICArK2NvdW50OwotCi0gICAgICAgIGlmIChzbG90QmFzZSA9PSBj
ZWxsKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gY291
bnQ7Ci19Ci0KIGlubGluZSBzaXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNJiB2bSA9IGNhbGxG
cmFtZS0+dm0oKTsKQEAgLTI1OCwyMyArMjE2LDYgQEAgaW5saW5lIHNpemVfdCBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbihDYQogICAgIH0KIH0KIAotaW5saW5lIGJvb2wgaXNQcm90b3R5cGVDaGFp
bk5vcm1hbGl6ZWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCi17Ci0gICAgZm9yICg7OykgewotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgSlNW
YWx1ZSB2ID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgaWYgKHYuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICBzdHJ1Y3R1cmUgPSB2LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gT3BlcmF0aW9uc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNyBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgZWxzZQogICAg
ICAgICBtYXhUcmFuc2l0aW9uTGVuZ3RoID0gc19tYXhUcmFuc2l0aW9uTGVuZ3RoOwogICAgIGlm
IChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Db3VudCgpID4gbWF4VHJhbnNpdGlvbkxlbmd0aCkgewot
ICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0
b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsK
ICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0aW9uKTsKICAgICAgICAgb2Zmc2V0
ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAg
ICByZXR1cm4gdHJhbnNpdGlvbjsKQEAgLTQ4OSwxMSArNDg5LDExIEBAIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmEKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1T
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBraW5kKQorU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
RGljdGlvbmFyeUtpbmQga2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dEZpcmUqIGRlZmVycmVkKQogewogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUo
dm0sIHN0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBz
dHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJH
Qyk7CkBAIC01MDcsOSArNTA3LDkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFy
eVRyYW5zaQogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewotICAgIHJldHVybiB0b0RpY3Rpb25h
cnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kKTsKKyAgICBy
ZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBDYWNoZWREaWN0aW9u
YXJ5S2luZCwgZGVmZXJyZWQpOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9VbmNhY2hl
YWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBA
IC03NjEsNiArNzYxLDEwIEBAIHZvaWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2
bSkKIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgQVNTRVJU
KCFpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKworICAgIC8vIEluIHNvbWUgcGxhY2VzIGl0
J3MgY29udmVuaWVudCB0byBjYWxsIHRoaXMgd2l0aCBhbiBpbnZhbGlkIG9mZnNldC4gU28sIHdl
IGRvIHRoZSBjaGVjayBoZXJlLgorICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCiAgICAg
ICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOwpAQCAtNzgxLDExICs3ODUsNyBAQCB2b2lkIFN0cnVj
dHVyZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yCiB7CiAgICAgQVNTRVJUKCFpc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBnZXQo
dm0sIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgb2Zmc2V0KTsKKyAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNl
bWVudHModm0sIGdldCh2bSwgcHJvcGVydHlOYW1lKSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpk
aWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CkBAIC0xMTE3LDYgKzExMTcsMTcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgYwogICAgIAogICAgIGlmIChtX3Byb3RvdHlwZS5nZXQoKS5pc0NlbGwoKSkKICAgICAg
ICAgb3V0LnByaW50KCIsIFByb3RvOiIsIFJhd1BvaW50ZXIobV9wcm90b3R5cGUuZ2V0KCkuYXND
ZWxsKCkpKTsKKworICAgIHN3aXRjaCAoZGljdGlvbmFyeUtpbmQoKSkgeworICAgIGNhc2UgTm9u
ZURpY3Rpb25hcnlLaW5kOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZERpY3Rpb25h
cnlLaW5kOgorICAgICAgICBvdXQucHJpbnQoIiwgRGljdGlvbmFyeSIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQ6CisgICAgICAgIG91dC5wcmludCgi
LCBVbmNhY2hlYWJsZURpY3Rpb25hcnkiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAog
ICAgIG91dC5wcmludCgiXSIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTIt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVl
IHByb3RvdHlwZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYXR0
cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcyk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVy
ZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFy
eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2Fj
aGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBzZWFsVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVy
ZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6ZVRyYW5z
aXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKQEAgLTE5NCw3ICsxOTQsMTkgQEAgcHVibGljOgogICAg
IGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBO
b25lRGljdGlvbmFyeUtpbmQ7IH0KICAgICBib29sIGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkg
Y29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSA9PSBVbmNhY2hlZERpY3Rpb25hcnlLaW5k
OyB9CiAgIAotICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHsgcmV0dXJu
IGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0aW9uYXJ5S2luZCAmJiAhdHlwZUluZm8o
KS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKTsgfQorICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAh
PSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kCisgICAgICAgICAgICAmJiAhdHlwZUluZm8oKS5wcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICAgICAgJiYgISh0eXBlSW5mbygpLmhhc0lt
cHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5
RmlyZXNXYXRjaHBvaW50cygpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc2Vz
QXJlQ2FjaGVhYmxlKCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3du
UHJvcGVydHlTbG90KCkKKyAgICAgICAgICAgICYmIHR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVy
dHlGaXJlc1dhdGNocG9pbnRzKCk7CisgICAgfQogCiAgICAgLy8gV2UgdXNlIFNsb3dQYXRoIGlu
IEdldEJ5SWRTdGF0dXMgZm9yIHN0cnVjdHVyZXMgdGhhdCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJv
cGVydGllcyBsYXRlciB0byBwcmV2ZW50CiAgICAgLy8gREZHIGZyb20gaW5saW5pbmcgcHJvcGVy
dHkgYWNjZXNzZXMgc2luY2Ugc3RydWN0dXJlcyBkb24ndCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcg
aW1wdXJlIHByb3BlcnR5IGFwcGVhcnMuCkBAIC0yMDIsNyArMjE0LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90
KCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8g
dHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5m
bygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KICAg
ICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9
CkBAIC01MjgsNyArNTQwLDcgQEAgcHJpdmF0ZToKICAgICAvLyB0byB1bmxvY2sgaXQuCiAgICAg
dm9pZCBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0
dXJlKiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwogICAg
IAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9u
YXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKIAogICAgIFByb3Bl
cnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAg
ICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzNiw2ICs1MzYsNyBAQCBwdWJs
aWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCiAgICAg
dm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVy
JiwgV2F0Y2hwb2ludCopOworICAgIAogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9u
Y2UgaXQgZ290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0
LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay1uZXcuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11bHRp
LWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVj
dHVyZS1jaGVjay1uZXcuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LXdp
dGhvdXQtZm9sZGluZy10aGUtc3RydWN0dXJlLWNoZWNrLW5ldy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQyIEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisK
K2Z1bmN0aW9uIGJhcihvKSB7CisgICAgcmV0dXJuIG8uZzsKK30KKworZnVuY3Rpb24gYmF6KG8s
IHAsIHEpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBpZiAoaXNGaW5hbFRpZXIoKSkgewor
ICAgICAgICBwID0gbzsKKyAgICAgICAgcSA9IG87CisgICAgICAgIHJlc3VsdCArPSAxMDAwMDsK
KyAgICB9CisgICAgcmVzdWx0ICs9IGZvbyhwKTsKKyAgICByZXN1bHQgKz0gYmFyKHEpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGJheik7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgbywgcCwgcTsKKyAgICB2YXIgZXhwZWN0ZWQxOwor
ICAgIHZhciBleHBlY3RlZDI7CisgICAgbyA9IHtmOjEwMCwgZzoxMDF9OworICAgIGV4cGVjdGVk
MiA9IDEwMDAwICsgMTAwICsgMTAxOworICAgIGlmIChpICYgMSkgeworICAgICAgICBwID0ge2U6
MSwgZjoyLCBnOjN9OworICAgICAgICBxID0ge2U6NCwgZjo1LCBnOjZ9OworICAgICAgICBleHBl
Y3RlZDEgPSAyICsgNjsKKyAgICB9IGVsc2UgeworICAgICAgICBwID0ge2Y6NywgZzo4fTsKKyAg
ICAgICAgcSA9IHtnOjksIGY6MTB9OworICAgICAgICBleHBlY3RlZDEgPSA3ICsgOTsKKyAgICB9
CisgICAgdmFyIHJlc3VsdCA9IGJheihvLCBwLCBxKTsKKyAgICBpZiAocmVzdWx0ICE9IGV4cGVj
dGVkMSAmJiByZXN1bHQgIT0gZXhwZWN0ZWQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQxICsgIiBvciAiICsg
ZXhwZWN0ZWQyICsgIikiOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL211bHRpLWdldC1ieS1vZmZzZXQtc2VsZi1vci1wcm90by5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211bHRpLWdldC1ieS1vZmZzZXQt
c2VsZi1vci1wcm90by5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvbXVsdGktZ2V0LWJ5LW9mZnNldC1zZWxmLW9yLXByb3RvLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKK2Z1bmN0aW9uIGZvbyhvLCBzdGFydCkgeworICAgIHZh
ciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAg
IHJlc3VsdCArPSBvLmY7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsK
KwordmFyIG8gPSB7fTsKK28uZiA9IDQyOwordmFyIGYgPSB7fTsKK2YuZiA9IDQzOworZi5nID0g
NDQ7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICBvLmYgPSBpOworby5m
ID0gNDI7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBwOwor
ICAgIGlmIChpICYgMSkKKyAgICAgICAgcCA9IG87CisgICAgZWxzZQorICAgICAgICBwID0gT2Jq
ZWN0LmNyZWF0ZShvKTsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKHApOworICAgIGlmIChyZXN1bHQg
IT0gMTAwICogNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKK30KKwordmFyIHEgPSB7fTsKK3EuZiA9IDQzOwordmFyIHJlc3VsdCA9IGZvbyhxKTsKK2lm
IChyZXN1bHQgIT0gMTAwICogNDMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVu
ZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
cmVwbGFjZW1lbnQtd2F0Y2hwb2ludC1kaWN0aW9uYXJ5LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC1kaWN0
aW9uYXJ5LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9yZXBsYWNlbWVudC13YXRjaHBvaW50LWRpY3Rpb25hcnkuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQor
Citub0lubGluZShmb28pOworCit2YXIgcCA9IHtmOjQyfTsKK3ZhciBvID0gT2JqZWN0LmNyZWF0
ZShwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHBbImkiICsgaV0g
PSBpOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTAwOyArK2opIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGZvbyhvKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9Cit9CisKKy8vIE1ha2Ug
cCBhIG5vbi1kaWN0aW9uYXJ5LgorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAg
IHZhciB0bXAgPSBvLmY7Cit9CisKK3AuZiA9IDQzOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lm
IChyZXN1bHQgIT0gNDMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiAr
IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFj
ZW1lbnQtd2F0Y2hwb2ludC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAg
ICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28pOworCit2YXIgcCA9IHtmOjQyfTsKK3Zh
ciBvID0gT2JqZWN0LmNyZWF0ZShwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkg
eworICAgIHBbImkiICsgaV0gPSBpOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTAwOyArK2op
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA0
MikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAg
ICB9Cit9CisKK3AuZiA9IDQzOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0g
NDMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy1k
aWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4t
cHJvdG8tY2hhbmdlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2Uu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNyBAQAorZnVuY3Rpb24gZm9vKCkgeworICAg
IHZhciBwID0ge307CisgICAgdmFyIG8gPSB7fTsKKyAgICBvLl9fcHJvdG9fXyA9IHA7CisgICAg
dmFyIHJlc3VsdDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAg
IHJlc3VsdCA9IG8uZjsKKyAgICAgICAgaWYgKGkgPT0gNTApCisgICAgICAgICAgICBwLmYgPSA0
MjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOwor
aWYgKHJlc3VsdCAhPSA0MikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVk
LWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3MtdGhlbi1wcm90by1jaGFuZ2Uu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Vu
ZGVmaW5lZC1hY2Nlc3MtdGhlbi1wcm90by1jaGFuZ2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOSBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lu
bGluZShmb28pOworCit2YXIgcCA9IHt9OwordmFyIG8gPSBPYmplY3QuY3JlYXRlKHApOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8p
OworICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0IGluIGxvb3A6ICIgKyByZXN1bHQ7Cit9CisKK3AuZiA9IDQyOwordmFyIHJlc3VsdCA9
IGZvbyhvKTsKK2lmIChyZXN1bHQgIT09IDQyKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODc2MDUpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxNS0w
Ny0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBzaG91
bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG1pY3JvYmVuY2htYXJrIHRoYXQg
aWxsdXN0cmF0ZXMgdGhlIG5lZWQgZm9yIHRoaXMgZmVhdHVyZS4gVGhpcyBiZW5jaG1hcmsgZ2V0
cyA1OHggZmFzdGVyIHdpdGgKKyAgICAgICAgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBqcy9y
ZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1t
dXRhdGluZy1wcm90b3R5cGUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qczogQWRk
ZWQuCisgICAgICAgIChmb28pOgorCiAyMDE1LTA3LTMwICBBYWthc2ggSmFpbiAgPGFha2FzaF9q
YWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXBsYWNlIEdvb2dsZSBBcHAgRW5naW5lIHdpdGgg
QXBwU2NhbGUKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLW9iamVjdC1hY2Nl
c3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1z
dHJ1Y3R1cmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dsb2JhbC1v
YmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vz
cy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVy
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgt
bXV0YXRpbmctc3RydWN0dXJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXBy
b3RvdHlwZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13
aXRoLW11dGF0aW5nLXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMCBAQAorSlNSZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90
b3R5cGUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9u
IHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11
dGF0aW5nLXByb3RvdHlwZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0
YXRpbmctcHJvdG90eXBlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3Mt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFj
Y2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nbG9iYWwtb2Jq
ZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRo
LW11dGF0aW5nLXN0cnVjdHVyZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3Ry
dWN0dXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbygp
IHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytp
KQorICAgICAgICByZXN1bHQgKz0gZjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGlu
ZShmb28pOworCitmID0gNDI7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAg
ICB0aGlzWyJpIiArIGldID0gaTsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgaWYgKHJl
c3VsdCAhPSA0MiAqIDEwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworfQpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJv
dG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNjZXNzLXdpdGgt
bXV0YXRpbmctcHJvdG90eXBlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlw
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBmb28obykgewor
ICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisg
ICAgICAgIHJlc3VsdCArPSBvLmY7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUo
Zm9vKTsKKwordmFyIHAgPSB7Zjo0Mn07Cit2YXIgbyA9IE9iamVjdC5jcmVhdGUocCk7CisKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHBbImkiICsgaV0gPSBpOworICAg
IHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAqIDEwMCkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvdW5kZWZpbmVkLXByb3BlcnR5LWFjY2Vzcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy91bmRl
ZmluZWQtcHJvcGVydHktYWNjZXNzLmpzCShyZXZpc2lvbiAxODc2MDUpCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy91bmRlZmluZWQtcHJvcGVydHktYWNjZXNzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0xMSw3ICsxMSw3IEBAIGZ1bmN0aW9uIGZvbygpIHsKIH0KIHJlc3Vs
dCA9IGZvbygpOwogaWYgKHJlc3VsdCAhPSB1bmRlZmluZWQpCi0gICAgdGhyb3cgIkJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7CisgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgcmVz
dWx0KTsKIAogLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGEgY2FjaGVkIHByb3BlcnR5IGxvb2t1
cCBtaXNzIGRvZXNuJ3QgY29udGludWUgdG8gZmlyZSB3aGVuIHRoZSBwcm9wZXJ0eSBzdWRkZW5s
eSBhcHBlYXJzIG9uIHRoZSBvYmplY3QuCiAKQEAgLTI2LDcgKzI2LDcgQEAgZnVuY3Rpb24gYmFy
KCkgewogfQogdmFyIHJlc3VsdCA9IGJhcigpOwogaWYgKHJlc3VsdCAhPSAxKQotICAgIHRocm93
ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3Vs
dDogIiArIHJlc3VsdCk7CiBzb21lR2xvYmFsID0gdW5kZWZpbmVkOwogCiAvLyBUaGlzIHRlc3Qg
Y2hlY2tzIHRoYXQgYSBjYWNoZWQgcHJvcGVydHkgbG9va3VwIG1pc3MgZG9lc24ndCBjb250aW51
ZSB0byBmaXJlIHdoZW4gdGhlIHByb3BlcnR5IHN1ZGRlbmx5IGFwcGVhcnMgb24gdGhlIG9iamVj
dCdzIHByb3RvdHlwZS4KQEAgLTQ0LDUgKzQ0LDUgQEAgZnVuY3Rpb24gYmF6KCkgewogfQogdmFy
IHJlc3VsdCA9IGJheigpOwogaWYgKHJlc3VsdCAhPSAyKQotICAgIHRocm93ICJCYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3Vs
dCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257943</attachid>
            <date>2015-07-31 12:32:49 -0700</date>
            <delta_ts>2015-07-31 14:46:22 -0700</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>325500</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5MiBA
QAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5n
ZSwgaWYgeW91IHdhbnRlZCB0byBlZmZpY2llbnRseSB2YWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVj
dCBoYXMgKG9yIGRvZXNuJ3QgaGF2ZSkgYQorICAgICAgICBwcm9wZXJ0eSwgeW91J2QgY2hlY2sg
dGhhdCB0aGUgb2JqZWN0IHN0aWxsIGhhcyB0aGUgc3RydWN0dXJlIHRoYXQgeW91IGZpcnN0IHNh
dyB0aGUgb2JqZWN0IGhhdmUuIFdlCisgICAgICAgIG9wdGltaXplZCB0aGlzIGEgYml0IHdpdGgg
dHJhbnNpdGlvbiB3YXRjaHBvaW50cyBvbiB0aGUgc3RydWN0dXJlLCB3aGljaCBzb21ldGltZXMg
YWxsb3dlZCB1cyB0bworICAgICAgICBlbGlkZSB0aGUgc3RydWN0dXJlIGNoZWNrLgorCisgICAg
ICAgIEJ1dCB0aGlzIGFwcHJvYWNoIGZhaWxzIHdoZW4gdGhhdCBvYmplY3QgZnJlcXVlbnRseSBo
YXMgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXQuIFRoaXMgd291bGQKKyAgICAgICAgY2hhbmdl
IHRoZSBzdHJ1Y3R1cmUgYW5kIGZpcmUgdGhlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCwgc28gdGhl
IGNvZGUgd2UgZW1pdHRlZCB3b3VsZCBiZSBpbnZhbGlkIGFuZAorICAgICAgICB3ZSdkIGhhdmUg
dG8gcmVjb21waWxlIGVpdGhlciB0aGUgSUMgb3IgYW4gZW50aXJlIGNvZGUgYmxvY2suCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBjb25jZXB0OiBhbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uLiBUaGlzIHZhbHVlIGRlc2NyaWJlcyBzb21lCisgICAgICAgIGNvbmRp
dGlvbiBpbnZvbHZpbmcgYSBwcm9wZXJ0eSBvbiBzb21lIG9iamVjdC4gVGhlcmUgYXJlIGZvdXIg
a2luZHM6IHByZXNlbmNlLCBhYnNlbmNlLAorICAgICAgICBhYnNlbmNlLW9mLXNldHRlciwgYW5k
IGVxdWl2YWxlbmNlLiBGb3IgZXhhbXBsZSwgYSBwcmVzZW5jZSBjb25kaXRpb24gc2F5cyB0aGF0
IHdlIGV4cGVjdCB0aGF0IHRoZQorICAgICAgICBvYmplY3QgaGFzIHNvbWUgcHJvcGVydHkgYXQg
c29tZSBvZmZzZXQgd2l0aCBzb21lIGF0dHJpYnV0ZXMuIFRoaXMgYWxsb3dzIHVzIHRvIGltcGxl
bWVudCBhIG5ldyBraW5kCisgICAgICAgIG9mIHdhdGNocG9pbnQsIHdoaWNoIGtub3dzIGFib3V0
IHRoZSBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHRoYXQgaXQncyBiZWluZyB1c2VkIHRvIGVu
Zm9yY2UuIElmCisgICAgICAgIHRoZSB3YXRjaHBvaW50IGZpcmVzIGJlY2F1c2Ugb2YgYSBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbiwgdGhlIHdhdGNocG9pbnQgbWF5IHNpbXBseSByZWluc3RhbGwgaXRz
ZWxmCisgICAgICAgIG9uIHRoZSBuZXcgc3RydWN0dXJlLgorCisgICAgICAgIE9iamVjdCBwcm9w
ZXJ0eSBjb25kaXRpb25zIGFyZSB1c2VkIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgUHV0QnlJ
ZCB0cmFuc2l0aW9ucywgR2V0QnlJZCBtaXNzZXMsCisgICAgICAgIGFuZCBwcm90b3R5cGUgYWNj
ZXNzZXMuIFRoZXkgYXJlIGFsc28gdXNlZCBmb3IgYW55IERGRyBhY2Nlc3NlcyB0byBvYmplY3Qg
Y29uc3RhbnRzLCBpbmNsdWRpbmcKKyAgICAgICAgZ2xvYmFsIHByb3BlcnR5IGFjY2Vzc2VzLgor
CisgICAgICAgIE1vc3RseSBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gZ2xvYmFsIHByb3BlcnR5
IGFjY2VzcywgdGhpcyBpcyBhIDklIHNwZWVkLXVwIG9uIEtyYWtlbi4gSXQncworICAgICAgICBu
ZXV0cmFsIG9uIG1vc3Qgb3RoZXIgdGhpbmdzLiBJdCdzIGEgNjh4IHNwZWVkLXVwIG9uIGEgbWlj
cm9iZW5jaG1hcmsgdGhhdCBpbGx1c3RyYXRlcyB0aGUgcHJvdG90eXBlCisgICAgICAgIGNoYWlu
IHNpdHVhdGlvbi4gSXQncyBhbHNvIGEgc21hbGwgc3BlZWQtdXAgb24gZ2V0dGVyLXJpY2hhcmRz
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpDb21wbGV4R2V0
U3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6dGFrZXNTbG93UGF0aCk6
CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmtpbmQpOgorICAgICAgICAoSlNDOjpD
b21wbGV4R2V0U3RhdHVzOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVz
Ojpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjphdHRyaWJ1
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6c3BlY2lmaWNW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmNoYWluKTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmg6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0
QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6fkdldEJ5SWRWYXJp
YW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6Okdl
dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRW
YXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpvcGVyYXRvciEpOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6c3RydWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFZhcmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJp
YW50OjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0
dXMpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24pOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmll
cik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0
ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VX
aXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpl
cXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpvcGVy
YXRvciEpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b2JqZWN0KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmNvbmRpdGlvbik6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpraW5kKToKKyAgICAgICAgKEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnVpZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246
Omhhc0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNQ
cm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc1JlcXVpcmVk
VmFsdWUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cmVxdWlyZWRW
YWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNDb21wYXRpYmxlV2l0
aCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVp
cmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmb3JPYmplY3QpOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yQ29uZGl0aW9uS2luZCk6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNX
aXRoS2luZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNP
bmVTbG90QmFzZUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjptZXJnZWRXaXRoKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFyZVN0aWxsTGl2ZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXApOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCk6CisgICAgICAgIChKU0M6OmdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSk6CisgICAgICAg
ICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaDogQWRkZWQuCisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmlzVmFsaWQpOgorICAg
ICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aXNFbXB0eSk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpiZWdpbik6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjplbmQpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6cmVsZWFzZVJhd1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OkRhdGE6OkRhdGEpOgorICAgICAgICAq
IGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6
fkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsp
OgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDoKKyAgICAgICAg
KEpTQzo6R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5
SWRBY2Nlc3M6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmNvbmRp
dGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnN0dWJSb3V0aW5lKToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjpjaGFpbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vz
czo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6
dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OlB1dEJ5SWRBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFj
Y2Vzczo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6bmV3U3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpjaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OmNo
YWluQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250
ZXh0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXApOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNXYXRjaGFibGVXaGVuVmFsaWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OlByb3BlcnR5Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2UpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246OmFic2VuY2UpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6YWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OmVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2UpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmtpbmQpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6dWlkKToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb246Omhhc09mZnNldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0
aW9uOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzQXR0cmli
dXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjphdHRyaWJ1dGVzKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246Omhhc1Byb3RvdHlwZSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eUNvbmRpdGlvbjo6aGFzUmVxdWlyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjpyZXF1aXJlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246
Omhhc2gpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc0NvbXBhdGlibGVXaXRoKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp3
YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlDb25kaXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b25IYXNoOjplcXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0pOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpzZXR0ZXIpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bWFr
ZXNDYWxscyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25X
aXRoUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJp
YW50OjpraW5kKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlND
OjpQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvZmZz
ZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0dXMpOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6On5TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludDo6cHVzaCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6fldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJl
bmNlQW5kQWRkV2F0Y2hwb2ludCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KToKKyAgICAgICAgKEpT
Qzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpjb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OnN0dWJJbmZvKToKKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjpkZXJlZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpzZXRTZWVuKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6Omlu
c3RhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludDo6ZmlyZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50OjpTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6UHJvcGVydHlXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Ojpr
ZXkpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQ
cm9wZXJ0eVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgICogZGZnL0RG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omlu
c3RhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6
ZmlyZUludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludDo6a2V5KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hl
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2hlY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9tb3RlVG9Db25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBsYW5Mb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6ZW1pdENoZWNrcyk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyk6Cisg
ICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
Ojpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFz
ZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6YWRkQmFzZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6YWRkQ2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZl
clZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJl
ZFZhbHVlQWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRj
aHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVk
V2F0Y2hwb2ludHM6OmFkZExhemlseSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNo
cG9pbnRzOjpjb25zaWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRz
OjpyZWFsbHlBZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJl
U3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpkdW1w
SW5Db250ZXh0KToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6U2V0UG9pbnRlckFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U2V0UG9pbnRlckFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U2V0UG9pbnRlckFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkluZmVycmVkVmFsdWVBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAo
SlNDOjpERkc6OkluZmVycmVkVmFsdWVBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFs
aWRhdGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRh
cHRvcjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQp
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hl
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6ZHVtcElu
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNo
ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjphZGQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KToK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKToKKyAg
ICAgICAgKiBkZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmg6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6d2F0Y2hDb25kaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1Nh
ZmVUb0xvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aWRlbnRpZmllcnMpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjp3YXRjaHBvaW50cyk6CisgICAgICAgICogZGZnL0RGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRo
b2Q6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9k
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcElu
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXAp
OgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRN
ZXRob2Q6OkdldEJ5T2Zmc2V0TWV0aG9kKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNl
dE1ldGhvZDo6Y29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9k
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Q
cm90b3R5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvcGVyYXRv
ciEpOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpraW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6cHJvdG90eXBlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpN
dWx0aUdldEJ5T2Zmc2V0Q2FzZTo6TXVsdGlHZXRCeU9mZnNldENhc2UpOgorICAgICAgICAoSlND
OjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok11
bHRpR2V0QnlPZmZzZXRDYXNlOjptZXRob2QpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZl
VG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4p
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KToKKyAgICAgICAgKEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6CisgICAgICAg
IChKU0M6OmNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKToKKyAgICAgICAgKEpTQzo6cmVw
bGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlkU3R1Yik6CisgICAgICAg
IChKU0M6OmFjdGlvbkZvckNlbGwpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0
KToKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6ZW1p
dFB1dFRyYW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAg
ICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0
Y2hJbik6CisgICAgICAgIChKU0M6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aXNQcm90b3R5
cGVDaGFpbk5vcm1hbGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1nZXQtYnkt
b2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hl
Y2stbmV3LmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vz
cy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qczogQWRkZWQuCisK
IDIwMTUtMDctMzAgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CiAK
ICAgICAgICAgQWRkIHRoZSAid2FzbSIgZGlyZWN0b3J5IHRvIHRoZSBBZGRpdGlvbmFsIEluY2x1
ZGUgRGlyZWN0b3JpZXMgZm9yIGpzYy5leGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNiBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCiAgICAgYnl0ZWNvZGUv
Q29kZVR5cGUuY3BwCiAgICAgYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAKLSAgICBieXRl
Y29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcAogICAgIGJ5dGVjb2RlL0RGR0V4aXRQcm9m
aWxlLmNwcAogICAgIGJ5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKICAg
ICBieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuY3BwCkBAIC05NywxMCArOTYsMTMgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9KdW1wVGFibGUuY3BwCiAgICAg
Ynl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCiAgICAgYnl0ZWNvZGUvTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKyAgICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5jcHAKKyAgICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAK
ICAgICBieXRlY29kZS9PcGNvZGUuY3BwCiAgICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5jcHAKICAgICBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAogICAgIGJ5
dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKKyAgICBieXRlY29kZS9Qcm9wZXJ0eUNvbmRp
dGlvbi5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAogICAgIGJ5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAogICAgIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCkBAIC0x
MjgsNiArMTMwLDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKIAogICAgIGRmZy9ERkdB
YnN0cmFjdEhlYXAuY3BwCiAgICAgZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCisgICAgZGZnL0RG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKKyAgICBkZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAogICAgIGRmZy9ERkdBcmd1bWVudHNFbGlt
aW5hdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCiAgICAg
ZGZnL0RGR0FyaXRoTW9kZS5jcHAKQEAgLTE5Niw2ICsyMDAsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfU09VUkNFUwogICAgIGRmZy9ERkdNaW5pZmllZEdyYXBoLmNwcAogICAgIGRmZy9ERkdNaW5p
ZmllZE5vZGUuY3BwCiAgICAgZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisgICAgZGZn
L0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAogICAgIGRmZy9ERkdOYWl2ZURvbWluYXRvcnMu
Y3BwCiAgICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAKQEAg
LTQ3NCw3ICs0NzksNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VTCiAgICAg
cnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAgICAgcnVudGltZS9JbmZlcnJlZFZhbHVlLmNwcAog
ICAgIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKLSAgICBydW50aW1lL0ludGVuZGVk
U3RydWN0dXJlQ2hhaW4uY3BwCiAgICAgcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAogICAg
IHJ1bnRpbWUvSW50bENvbGxhdG9yLmNwcAogICAgIHJ1bnRpbWUvSW50bENvbGxhdG9yQ29uc3Ry
dWN0b3IuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0
IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJC
dWlsZCIgVG9vbHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0
LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVj
dENvbmZpZ3VyYXRpb25zIj4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVi
dWdTdWZmaXh8V2luMzIiPgpAQCAtMzI0LDcgKzMyNCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxDb2RlT3JpZ2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXENvZGVUeXBlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXENvbXBsZXhHZXRTdGF0dXMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRGVmZXJyZWRTb3Vy
Y2VEdW1wLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERGR0V4
aXRQcm9maWxlLmNwcCIgLz4KQEAgLTMzNywxMCArMzM2LDEzIEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxKdW1wVGFibGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxPcGNvZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcm9wZXJ0eUNvbmRpdGlv
bi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3Rh
dHVzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRW
YXJpYW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFJlZHVj
ZVdoaXRlc3BhY2UuY3BwIiAvPgpAQCAtMzY1LDYgKzM2Nyw4IEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlclNjb3BlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEhlYXAuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0VmFsdWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0FyaXRoTW9kZS5jcHAiIC8+CkBAIC00MzMsNiArNDM3LDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZEdyYXBoLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYWl2ZURvbWlu
YXRvcnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxM
b29wcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZS5jcHAi
IC8+CkBAIC03MjksNyArNzM0LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSW5kZXhpbmdUeXBlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSW5mZXJyZWRWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGxDb2xsYXRvci5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcCIgLz4K
QEAgLTk5MSw3ICs5OTUsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
Q29kZVR5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbW1l
bnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbXBsZXhHZXRT
dGF0dXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbnN0YW50
U3RydWN0dXJlQ2hlY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XERhdGFGb3JtYXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcRGVmZXJyZWRTb3VyY2VEdW1wLmgiIC8+CkBAIC0xMDA5LDExICsxMDEyLDE0
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTExJbnRD
YWxsTGlua0luZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGVyYW5kcy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJn
ZXRzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcm9wZXJ0eUNv
bmRpdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJ
ZFN0YXR1cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJ
ZFZhcmlhbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEtp
bmQuaCIgLz4KQEAgLTEwNDksNiArMTA1NSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RWYWx1ZS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0FkamFjZW5jeUxpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdB
bGxvY2F0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBbmFseXNp
cy5oIiAvPgpAQCAtMTE0MSw2ICsxMTQ5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdNaW5pZmllZElELmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHTWluaWZpZWROb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
TW92SGludFJlbW92YWxQaGFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR011bHRpR2V0QnlPZmZzZXREYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHTmF0dXJhbExvb3BzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTm9kZS5oIiAvPgpAQCAtMTU0NCw3ICsxNTUzLDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSW50MTZBcnJheS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxJbnQzMkFycmF5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEludDhBcnJheS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSW50bENvbGxhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmgiIC8+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNyw2ICsxMDcsOCBAQAogCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovOyB9
OwogCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNB
MDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNzI1RkYxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01p
bmlmaWVkR3JhcGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxNzI1RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICov
OyB9OworCQkwRjE4RDNDRjFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuY3BwICovOyB9OworCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjE4RDNDRTFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25S
ZWFzb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICov
OyB9OwogCQkwRjE5MENBRDE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBD
QUIxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFERDg0QTE4QTk0NUJF
MDAyNkYzRkEgLyogSlNDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjkzLDgg
KzI5NSw2IEBACiAJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3
NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxW
YXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBG
M0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8q
IENhbGxWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMEYzRDBCQkMxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYz
RDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovOyB9
OwotCQkwRjNEMEJCRDE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkIx
OTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNFMDFBQTE5RDM1M0E1MDBG
NjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJl
UG9zdE51bWJlcmluZy5jcHAgKi87IH07CiAJCTBGM0UwMUFCMTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmlu
Zy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYg
LyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC01ODgsNiArNTg4LDE0IEBACiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAz
RiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8q
IERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdE
cml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKKwkJMEZEM0U0MDEx
QjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmNwcCAqLzsgfTsKKwkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFF
IC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDNFNDA5MUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQwQTFCNjE4QjY2
MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuY3BwICovOyB9OworCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNzFC
NjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9OworCQkwRkQzRTQw
RTFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAv
KiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3Jz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgx
QUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKIAkJMEZEODFB
RDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0
MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTY5Miw2ICs3
MDAsOCBAQAogCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxQjE2QjYyNzcy
MDAzRjY5NkIgLyogREZHRWRnZS5jcHAgKi87IH07CiAJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1
QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmNwcCAqLzsgfTsKIAkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8q
IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIyMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjJD
RDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi87IH07
CisJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMkNENUEx
QjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAw
NENCOUZGIC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQy
NzMyMTU4RUJENTgwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENC
OUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIw
MDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29k
ZS5jICovOyB9OwpAQCAtMTQxMSw4ICsxNDIxLDYgQEAKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3
NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NTA3
RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRh
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4
NUY2QkMxOEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1
MzA3IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmNwcCAqLzsgfTsKLQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4QTk3
NzQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4MDA5REY3
NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3MzhCODAw
OURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxl
ZEZpbmFsaXplci5oICovOyB9OwogCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmlu
YWxpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3OEE5NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwICovOyB9OwpAQCAt
MTg3OSw2ICsxODg3LDggQEAKIAkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1
REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3
MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRm
Zy9ERkdNaW5pZmllZEdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
OEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMThEM0NFMUI1NUE2RTAw
MDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBh
dGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRp
c29uUmVhc29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2Zp
bGVySmV0dGlzb25SZWFzb24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJl
YXNvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FCMTg5RDgyRjYw
MDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgcGF0aCA9IHByb2ZpbGVyL1By
b2ZpbGVySmV0dGlzb25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
REQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjA2NCw4ICsyMDc0LDYgQEAKIAkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1Zh
bGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7
IHBhdGggPSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNFMDFBOTE5RDM1M0E1
MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51
bWJlcmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFC
MDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzcw
LDYgKzIzNzgsMTQgQEAKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgx
Q0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9E
RkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0UzRkYxQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRDNFNDAwMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcv
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDAzMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwNTFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFBy
b3BlcnR5Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3Bl
cnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZB
Qjc4MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jh
c2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUNG
MTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RvbWluYXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR0RvbWlu
YXRvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFEMDE1NEZCNEVC
MDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdEb21pbmF0b3JzLmg7IHBhdGggPSBkZmcvREZHRG9taW5hdG9ycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ2OSw2ICsyNDg1LDggQEAKIAkJMEZFRkM5QTgxNjgx
QTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGMDU0RjcxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6
ei5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxs
b2NhdGlvbkZ1enouY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkYwNTRGODFB
QzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwOyBwYXRoID0gZGZnL0RGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENUExQjYx
QTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHBhdGggPSBkZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNhc3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9E
aXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MzAxNThF
QkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBVRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNz
ZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHVkaXM4Nl9kZWNvZGUuYzsgcGF0aCA9IGRpc2Fzc2Vt
Ymxlci91ZGlzODYvdWRpczg2X2RlY29kZS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzIxMyw4ICszMjMxLDYgQEAKIAkJQTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVD
YWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBh
cnNlck1vZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcERhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODg1
M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0Zh
aWxlZEZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGYWlsZWRGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZEMTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHRmFpbGVkRmluYWxpemVyLmg7IHBhdGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZFMTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
RmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDU1MSw4ICs0NTY3LDYgQEAKIAkJCQlBN0E4QUYyQjE3QURCNUYz
MDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0
IC8qIEludDE2QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50
MzJBcnJheS5oICovLAotCQkJCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmNwcCAqLywKLQkJCQlBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovLAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAv
KiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlCQzExNjY3QTBFMTk5QzA1MDA4MDY2REQg
LyogSW50ZXJuYWxGdW5jdGlvbi5oICovLAogCQkJCUExQjlFMjMzMUI0RTBENjcwMEJDN0ZFRCAv
KiBJbnRsQ29sbGF0b3IuY3BwICovLApAQCAtNDk1NSw2ICs0OTY5LDEwIEBACiAJCQkJQTcwNEQ4
RkYxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICov
LAogCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8s
CisJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZEM0U0MDAxQjYxOEFBRjAwQzgwRTFF
IC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oICovLAorCQkJ
CTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwICovLAorCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyog
REZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBE
RkdBbGxvY2F0b3IuaCAqLywKIAkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5h
bHlzaXMuaCAqLywKQEAgLTUxMTQsNiArNTEzMiw4IEBACiAJCQkJMEYyQkRDM0UxNTIyODAxNzAw
Q0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAogCQkJCTBGOEYxNDMxMUFERjA5MDEwMEVE
NzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLywKIAkJCQkwRjhGMTQzMjFBREYw
OTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oICovLAorCQkJCTBGRjJDRDU5
MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8sCisJCQkJ
MEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi8s
CiAJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAg
Ki8sCiAJCQkJMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5o
ICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
ICovLApAQCAtNTM4NSw4ICs1NDA1LDYgQEAKIAkJCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYg
LyogQ29kZVR5cGUuaCAqLywKIAkJCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxl
eEdldFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY2RkM3NEYxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBs
ZXhHZXRTdGF0dXMuaCAqLywKLQkJCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8sCi0JCQkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8q
IENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFG
OEYgLyogRGF0YUZvcm1hdC5oICovLAogCQkJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAogCQkJCTBGQzcxMkREMTdDRDg3Nzgw
MDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKQEAgLTU0MTksNiAr
NTQzNywxMCBAQAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyog
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJCTE0Q0E5NThDMTZBQjUwRkEw
MDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJCTBGRDNFNDAzMUI2
MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZE
M0U0MDQxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCisJ
CQkJMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmNwcCAqLywKKwkJCQkwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCAqLywKIAkJCQk5NjlBMDc5NDBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2Rl
LmNwcCAqLywKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi8sCiAJ
CQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCkBAIC01NDMwLDYg
KzU0NTIsOCBAQAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VK
dW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5oICovLAorCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCisJCQkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFBy
b3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eUlkU3RhdHVzLmggKi8sCiAJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRW
YXJpYW50LmNwcCAqLywKQEAgLTU5NDUsNiArNTk2OSw3IEBACiAJCQkJQzI5ODFGRDkxN0JBRUU0
QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNv
bmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8q
IERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzQzgyODE0MTE1
RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QzE0
REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjAwLDYgKzYy
MjUsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21iaW5lZERvbWFpbnMu
anNvbiBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzg4MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0MzhBMTg1
NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNl
dERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAvKiBJ
ZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOEMxODU2ODMzNTAw
MkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTUwRTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC02MjA5LDcgKzYyMzUsNiBAQAogCQkJCUE3QThBRjNCMTdBREI1RjMwMDVB
QjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURCNUYz
MDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0ExN0FE
QjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4ODUzRkEx
Nzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5z
aWMuaCBpbiBIZWFkZXJzICovLApAQCAtNjIyMiw2ICs2MjQ3LDcgQEAKIAkJCQlCQzE4QzQxNTBF
MTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQ0VGREUwRjQx
M0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRG
RjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC02NDM4LDcgKzY0NjQsNiBAQAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBE
NDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0Ix
NEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVy
ZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAwOENFNzE4NzYzMUI2MDA5NTVDMjQgLyog
TWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAg
LyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAw
MEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjUy
Miw5ICs2NTQ3LDExIEBACiAJCQkJMkFBRDk2NEExODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2
ZUFsbG9jYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAw
MDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDEyMDMw
MUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0
MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9y
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjAyLDYgKzY2MjksNyBAQAogCQkJCTBGRDJDOTI0
MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0
YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAv
KiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlD
RUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mzk3LDYgKzc0MjUsNyBAQAogCQkJCTBG
RDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hl
U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyog
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwRDFC
NjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZp
bmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0MDcsNiArNzQzNiw3IEBACiAJCQkJMEZD
RUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011
bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRG
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc0NTgsNiArNzQ4OCw3IEBACiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5
IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4
Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVB
MzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4
OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzQ2OSw3ICs3NTAwLDYgQEAKIAkJCQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyog
SW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYx
MTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0
MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdE
NDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTc0ODYsNiArNzUxNiw3IEBACiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4
QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMz
QzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZF
ODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRDNFNDA5MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTU4N0Q2RDFCNERDMTQxMDBENjk4NDkg
LyogSW50bERhdGVUaW1lRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTRDMTdF
RTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc1NDEsNyArNzU3Miw2IEBACiAJCQkJQTUwM0ZBMUIxODhFMEZCMDAwMTEwRjE0
IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEx
RDE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MjgwODc1MTA3RUMxM0UwMDEzRTdCMiAvKiBKU0xvY2suY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJMEYzRDBCQkMxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50
U3RydWN0dXJlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI1RDcwOUIxNkRFOTlGNDAw
RkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3NDEx
N0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjk1
MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01hcEl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NzczNyw2ICs3NzY3LDcgQEAKIAkJCQlCQ0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0
dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBT
dHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAx
ODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0U0
MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTcwMTNDQThCMUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjc2NkQzODE1QUU0QTFDMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NGMEQwQzBFRjBC
OEE1MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03
NzQ2LDYgKzc3NzcsNyBAQAogCQkJCTcwNUI0MUIxMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdE
IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzMxNDEzMTgxNDU1OTEw
MDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxOEQz
Q0YxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5l
clV0aWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAv
KiBUaHVua0dlbmVyYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIGJhc2VTdHJ1Y3R1cmUgPSAwOwogICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVT
dHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gMDsKICAg
ICAgICAgICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSAwOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKQEAgLTM3MCwxMSAr
MzY5LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAg
ICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90eXBlU3RydWN0IiwgYmFzZVN0cnVj
dHVyZSwgaWRlbnQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoY2hhaW4pIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAg
ICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgICAgICAgb3V0LnBy
aW50ZigiLCBsaXN0ID0gJXA6IFsiLCBsaXN0KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKQEAgLTM4Miw5ICszNzYsOSBAQCB2
b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnRmKCIsICIpOwogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRm
KCIoIik7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGxp
c3QtPmF0KGkpLnN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChs
aXN0LT5hdChpKS5jaGFpbigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdC0+YXQo
aSkuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwg
bGlzdC0+YXQoaSkuY2hhaW4oKSwgaWRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50KGxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIpIik7CiAgICAgICAgICAgICAgICAg
fQpAQCAtNDU2LDEwICs0NTAsOCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVT
dGF0dXMoCiAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2Iiwgc3R1Yklu
Zm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwog
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgIm5leHQiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4gPSBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgZHVtcENo
YWluKG91dCwgY2hhaW4sIGlkZW50KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KQorICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6OmZyb21SYXdQb2ludGVyKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0
aW9uU2V0KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfbGlzdDogewogICAgICAgICAgICAgICAgIG91dC5wcmludGYoImxpc3QgPSBb
Iik7CkBAIC00ODMsMTAgKzQ3NSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJl
diIsIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgaWRlbnQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIsICIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVy
ZShvdXQsICJuZXh0IiwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYWNjZXNzLmNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVt
cENoYWluKG91dCwgYWNjZXNzLmNoYWluKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzLmNvbmRpdGlvblNldCgp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwg
YWNjZXNzLmNvbmRpdGlvblNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInVua25vd24iKTsKICAgICAgICAgICAgICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24g
MTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAgdm9p
ZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ6OmZpcgogICAgICAgICBkYXRhTG9nKCJG
aXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9j
aywgIlxuIik7CiAKICAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlvbiwgJmRldGFpbCk7
Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkKLSAgICAgICAgcmVtb3ZlKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhH
ZXRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4
R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlKiBoZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgdW5zaWdu
ZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICBTdHJ1Y3R1cmUqIGhl
YWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBh
c3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUgdGhhdAogICAgIC8vIGhhc0ltcHVy
ZUdldE93blByb3BlcnR5U2xvdCgpIGJ1dCBmb3Igd2hpY2ggd2UgZG9uJ3QKQEAgLTQwLDMyICsz
OSwzNCBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgLy8g
dGhhdCwgeWV0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzE4MTAKICAgICAKKyAgICBBU1NFUlQoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSk7CisgICAg
CiAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3Bl
cnR5KCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCiAgICAgQ29tcGxl
eEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAg
Ci0gICAgaWYgKGNoYWluICYmIGNoYWluQ291bnQpIHsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4g
PSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgIHByb2Zp
bGVkQmxvY2ssIGhlYWRTdHJ1Y3R1cmUsIGNoYWluLCBjaGFpbkNvdW50KSk7CisgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9
IGNvbmRpdGlvblNldDsKICAgICAgICAgCi0gICAgICAgIGlmICghcmVzdWx0Lm1fY2hhaW4tPmlz
U3RpbGxWYWxpZCgpKQorICAgICAgICBpZiAoIXJlc3VsdC5tX2NvbmRpdGlvblNldC5zdHJ1Y3R1
cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgIHJldHVybiBza2lwKCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoaGVhZFN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJl
UHJvcGVydHkoKQotICAgICAgICAgICAgfHwgcmVzdWx0Lm1fY2hhaW4tPnRha2VzU2xvd1BhdGhJ
bkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTbG90
QmFzZXMgPQorICAgICAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0Lm51bWJlck9mQ29uZGl0
aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG51bWJlck9mU2xvdEJhc2VzIDw9IDEpOworICAgICAgICBpZiAoIW51bWJlck9m
U2xvdEJhc2VzKSB7CisgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBt
aXNzZXMuIFRoYXQncyBhIGJ1bW1lci4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCiAgICAgICAgICAgICByZXR1cm4g
dGFrZXNTbG93UGF0aCgpOworICAgICAgICB9CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIGJhc2UgPSByZXN1bHQubV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKTsKKyAg
ICAgICAgQVNTRVJUKGJhc2Uua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSk7
CiAgICAgICAgIAotICAgICAgICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IHJlc3VsdC5tX2No
YWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1
Y3R1cmUgPSByZXN1bHQubV9jaGFpbi0+bGFzdCgpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJU
X1VOVVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKLSAgICAgICAgCi0gICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQs
IHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IGhlYWRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIHJlc3VsdC5tX2F0dHJp
YnV0ZXMpOwotICAgIH0KKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYmFzZS5vZmZzZXQoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7CiAgICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5t
X29mZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHJldmlz
aW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0
U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgQ29tcGxleEdl
dFN0YXR1c19oCiAjZGVmaW5lIENvbXBsZXhHZXRTdGF0dXNfaAogCi0jaW5jbHVkZSAiSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0Lmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgQ29tcGxl
eEdldFN0YXR1cygpCiAgICAgICAgIDogbV9raW5kKFNob3VsZFNraXApCiAgICAgICAgICwgbV9v
ZmZzZXQoaW52YWxpZE9mZnNldCkKLSAgICAgICAgLCBtX2F0dHJpYnV0ZXMoVUlOVF9NQVgpCiAg
ICAgewogICAgIH0KICAgICAKQEAgLTk3LDIxICs5NiwxNiBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogICAgIHN0YXRpYyBDb21wbGV4R2V0U3RhdHVzIGNvbXB1dGVGb3IoCi0gICAgICAgIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOworICAgICAgICBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAg
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgdW5zaWduZWQgYXR0
cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQotICAgIEpTVmFsdWUgc3Bl
Y2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQogICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiBwcml2YXRlOgogICAgIEtpbmQg
bV9raW5kOwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fYXR0
cmlidXRlczsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKLSAgICBSZWZQdHI8SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBtX2NvbmRpdGlvblNldDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVy
ZUNoZWNrLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIK
LQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoCi0gICAgICAgICIoQ2hl
Y2sgaWYgIiwgaW5Db250ZXh0KEpTVmFsdWUobV9jb25zdGFudCksIGNvbnRleHQpLCAiIGhhcyBz
dHJ1Y3R1cmUgIiwKLSAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNv
bnRleHQpLCAiKSIpOwotfQotCi12b2lkIENvbnN0YW50U3RydWN0dXJlQ2hlY2s6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7
Ci19Ci0KLVN0cnVjdHVyZSogc3RydWN0dXJlRm9yKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hl
Y2tWZWN0b3ImIHZlY3RvciwgSlNDZWxsKiBjb25zdGFudCkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICh2ZWN0b3JbaV0uY29uc3Rh
bnQoKSA9PSBjb25zdGFudCkKLSAgICAgICAgICAgIHJldHVybiB2ZWN0b3JbaV0uc3RydWN0dXJl
KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIGFyZUNvbXBhdGlibGUo
Y29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgYSwgY29uc3QgQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVja1ZlY3RvciYgYikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBhLnNpemUoKTsg
aS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIG90aGVyU3RydWN0dXJlID0gc3RydWN0dXJlRm9y
KGIsIGFbaV0uY29uc3RhbnQoKSk7Ci0gICAgICAgIGlmICghb3RoZXJTdHJ1Y3R1cmUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGFbaV0uc3RydWN0dXJlKCkgIT0gb3RoZXJT
dHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIG1lcmdlSW50byhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJiBzb3VyY2UsIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHRhcmdldCkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzb3VyY2Uuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChz
dHJ1Y3R1cmVGb3IodGFyZ2V0LCBzb3VyY2VbaV0uY29uc3RhbnQoKSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgdGFyZ2V0LmFwcGVuZChzb3VyY2VbaV0pOwotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaAkocmV2aXNpb24gMTg3NjA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hl
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVj
a19oCi0jZGVmaW5lIENvbnN0YW50U3RydWN0dXJlQ2hlY2tfaAotCi0jaW5jbHVkZSAiRHVtcENv
bnRleHQuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb25zdGFudFN0cnVjdHVyZUNoZWNrIHsKLXB1YmxpYzoK
LSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrKCkKLSAgICAgICAgOiBtX2NvbnN0YW50KG51bGxw
dHIpCi0gICAgICAgICwgbV9zdHJ1Y3R1cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2soSlNDZWxsKiBjb25zdGFudCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgICAgIDogbV9jb25zdGFudChjb25zdGFudCkKLSAgICAgICAgLCBtX3N0
cnVjdHVyZShzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBBU1NFUlQoISFtX2NvbnN0YW50ID09
ICEhbV9zdHJ1Y3R1cmUpOwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFtX2NvbnN0YW50OyB9Ci0gICAgCi0gICAgSlNDZWxsKiBjb25zdGFudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnQ7IH0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Ci0gICAgCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgSlNDZWxsKiBtX2NvbnN0YW50Owot
ICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Ci19OwotCi10eXBlZGVmIFZlY3RvcjxDb25zdGFu
dFN0cnVjdHVyZUNoZWNrLCAyPiBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yOwotCi1TdHJ1
Y3R1cmUqIHN0cnVjdHVyZUZvcihjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2
ZWN0b3IsIEpTQ2VsbCogY29uc3RhbnQpOwotYm9vbCBhcmVDb21wYXRpYmxlKGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImLCBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJik7Ci12b2lkIG1lcmdlSW50byhjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9y
JiBzb3VyY2UsIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHRhcmdldCk7Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjksOCArMTY5LDcg
QEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0
dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHByb2Zp
bGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbigpLAotICAgICAg
ICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jb25kaXRpb25TZXQoKSwg
dWlkKTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1
cy5raW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tp
cDoKQEAgLTIwNiw4ICsyMDUsOCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50KAotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0
YXR1cy5jaGFpbigpLAotICAgICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0
dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBs
ZXhHZXRTdGF0dXMub2Zmc2V0KCksCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0
dXMuY29uZGl0aW9uU2V0KCksIFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlh
bnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0
YXRlLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMjMg
KzM0LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlh
bnQoCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChz
dHJ1Y3R1cmVTZXQpCi0gICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKKyAgICAsIG1fY29u
ZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1f
Y2FsbExpbmtTdGF0dXMoV1RGOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKICAgICBpZiAoIXN0
cnVjdHVyZVNldC5zaXplKCkpIHsKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlkT2Zm
c2V0KTsKLSAgICAgICAgQVNTRVJUKCFjaGFpbik7Ci0gICAgfQotICAgIAotICAgIGlmIChjaGFp
biAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50
ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hlY2tzKG1fY29uc3Rh
bnRDaGVja3MpOworICAgICAgICBBU1NFUlQoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CiAgICAg
fQogfQotCisgICAgICAgICAgICAgICAgICAgICAKIEdldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZh
cmlhbnQoKSB7IH0KIAogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5
SWRWYXJpYW50JiBvdGhlcikKQEAgLTYyLDggKzU4LDcgQEAgR2V0QnlJZFZhcmlhbnQ6OkdldEJ5
SWRWYXJpYW50KGNvbnN0IEdldAogR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVy
YXRvcj0oY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQogewogICAgIG1fc3RydWN0dXJlU2V0
ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1f
Y29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVC
YXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9v
ZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykK
ICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0
dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTcyLDI4ICs2NywyNCBAQCBHZXRCeUlk
VmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQog
Ci1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAotewot
ICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCk7
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IobV9jb25zdGFu
dENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUp
OwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVt
cHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsKLSAgICBpZiAobV9hbHRl
cm5hdGVCYXNlICE9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWFyZUNvbXBhdGlibGUobV9jb25zdGFu
dENoZWNrcywgb3RoZXIubV9jb25zdGFudENoZWNrcykpCisKKyAgICBpZiAobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tz
LCBtX2NvbnN0YW50Q2hlY2tzKTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJn
ZWRDb25kaXRpb25TZXQ7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhl
ci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFs
aWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1fY29uZGl0aW9uU2V0ID0gbWVy
Z2VkQ29uZGl0aW9uU2V0OworICAgIAogICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1f
c3RydWN0dXJlU2V0KTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMiwxMCArMTAzLDcg
QEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgIH0KICAgICAK
ICAgICBvdXQucHJpbnQoCi0gICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBj
b250ZXh0KSwgIiwgIiwKLSAgICAgICAgIlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50
Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsKLSAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAg
ICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0
ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKKyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJl
U2V0KCksIGNvbnRleHQpLCAiLCAiLCBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQp
KTsKICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCkpOwogICAgIGlmIChtX2Nh
bGxMaW5rU3RhdHVzKQogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5r
U3RhdHVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsOSArMjcsOCBAQAog
I2RlZmluZSBHZXRCeUlkVmFyaWFudF9oCiAKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgot
I2luY2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKIApAQCAtNDMsNyArNDIsNyBAQCBjbGFzcyBHZXRCeUlk
VmFyaWFudCB7CiBwdWJsaWM6CiAgICAgR2V0QnlJZFZhcmlhbnQoCiAgICAgICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IGludmFsaWRPZmZzZXQsCi0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIGNoYWluID0gbnVsbHB0ciwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKICAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9IG51bGxwdHIpOwogICAg
IAogICAgIH5HZXRCeUlkVmFyaWFudCgpOwpAQCAtNTUsOSArNTQsMTAgQEAgcHVibGljOgogICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0
OyB9CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVy
ZVNldDsgfQotICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50
Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENoZWNrczsgfQotICAgIEpTT2JqZWN0
KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOyB9Ci0gICAg
U3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsKKworICAgIC8vIFRoZSBwcmVzZW5j
ZSBvZiBhIGNvbmRpdGlvbiBzZXQgbWVhbnMgdGhhdCB0aGlzIGlzIGEgcHJvdG90eXBlIGxvYWQu
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBDYWxsTGlua1N0YXR1cyog
Y2FsbExpbmtTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9
CiAgICAgCkBAIC03MCw4ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdldEJ5
SWRTdGF0dXM7CiAgICAgCiAgICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwotICAgIENv
bnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVj
dCogbV9hbHRlcm5hdGVCYXNlOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgor
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAor
eworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoIjwiLCBpbkNvbnRleHQo
SlNWYWx1ZShtX29iamVjdCksIGNvbnRleHQpLCAiOiAiLCBpbkNvbnRleHQobV9jb25kaXRpb24s
IGNvbnRleHQpLCAiPiIpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxw
dHIpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlk
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlk
aXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgp
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxp
ZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHZhbGlkaXR5
UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFs
aWQoc3RydWN0dXJlLCBtX29iamVjdCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQobV9vYmplY3QtPnN0cnVj
dHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5z
dXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBt
X2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkgY29uc3QKK3sKKyAgICBp
ZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHN0cnVj
dHVyZUVuc3VyZXNWYWxpZGl0eShtX29iamVjdC0+c3RydWN0dXJlKCkpOworfQorCitib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6
V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRp
b24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUs
IG1fb2JqZWN0LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpp
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFByb3BlcnR5
Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFi
bGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCks
IGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxl
KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmls
aXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNXYXRj
aGFibGUoc3RydWN0dXJlLCBtX29iamVjdCwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0
eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29iamVjdC0+c3RydWN0dXJl
KCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxM
aXZlKCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29iamVjdCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbExpdmUoKTsKK30KKwor
dm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRy
YWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlmICghKnRoaXMpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2JqZWN0KTsKKyAgICBtX2Nv
bmRpdGlvbi52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisKK09iamVjdFByb3BlcnR5
Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphdHRlbXB0VG9NYWtlRXF1aXZhbGVu
Y2VXaXRob3V0QmFycmllcigpIGNvbnN0Cit7CisgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0
ID0gY29uZGl0aW9uKCkuYXR0ZW1wdFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2Jq
ZWN0KCkpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlD
b25kaXRpb24oKTsKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24ob2JqZWN0KCks
IHJlc3VsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisK
KyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNr
ZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiB7CitwdWJsaWM6
CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxw
dHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAgICAgIDogbV9vYmplY3QobnVs
bHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3Bl
cnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAg
ICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAg
ICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVj
dDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OnByZXNl
bmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOyAKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBv
YmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAg
ICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIHBy
ZXNlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwgYXR0cmlidXRlcyk7Cisg
ICAgfQorCisgICAgLy8gTk9URTogVGhlIHByb3RvdHlwZSBpcyB0aGUgc3RvcmVkUHJvdG90eXBl
LCBub3QgdGhlIHByb3RvdHlwZUZvckxvb2t1cC4KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9v
YmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29u
ZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
b2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIo
b3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlk
LCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIEpTT2JqZWN0KiBv
YmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAg
eworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVy
dHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBl
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAgICAgVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09i
amVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZU9mU2V0
dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJy
aWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5t
X2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVy
KHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNl
V2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247IH07CisgICAgCisgICAg
SlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgUHJvcGVy
dHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb247IH0KKyAg
ICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gY29u
ZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsg
cmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgpOyB9CisgICAgdW5zaWdu
ZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc0F0dHJpYnV0
ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25kaXRp
b24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgpOyB9CisgICAgYm9vbCBo
YXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzUmVxdWlyZWRW
YWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29u
ZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaChtX29iamVjdCkgKyBt
X2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fY29uZGl0
aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3Qg
JiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2Fs
IG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAgICAvLyBkaWZmZXJlbnQg
b2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8g
cmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzIGEg
UHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2Fu
dCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGlsZSBpbiBvdGhlciBjYXNl
cyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzCisgICAgLy8g
d2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2Ug
YW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlkLiBCeSBjb252ZW50aW9u
LCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBhbnl0aGluZy4KKyAg
ICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAhb3RoZXIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBvdGhlciB8fCB1aWQo
KSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmplY3QoKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9kcyBjYW4gb3B0aW9uYWxs
eSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUKKyAgICAvLyBTdHJ1Y3R1
cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25jdXJyZW50IEpJVCwgdGhl
biB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtlIGFuIGV4cGxpY2l0IFN0
cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRo
ZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRlZCAoaS5lLiBhdm9pZCBh
IFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVj
dHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZhbGlk
aXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0Lgor
ICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFs
aWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OworICAgIAorICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50
IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5n
VG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHZhbGlk
aXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKKworICAgIC8vIENo
ZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkgY29uc2VydmF0aXZlbHkgcmV0
dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0cnVjdHVyZSBhbG9uZSBkb24n
dCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiB0cnVl
IGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJlcyBzb21lIHdhdGNocG9pbnRz
IG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhlCisgICAgLy8gc3RydWN0
dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9uIGhvbGRzIGJ5IHVzaW5n
IHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wg
aXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hvcnRoYW5kIGZvciBjb25kaXRp
b24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxp
ZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZh
bGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9u
CisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1
cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFByb3Bl
cnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFr
ZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5
RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworCisgICAg
Ly8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2Ug
dmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRo
ZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwK
KyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5
Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29sIGlzV2F0Y2hhYmxlKAor
ICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlD
b25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdS
ZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1l
bnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53
YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7CisgICAgfQorICAgIAorICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBzdGls
bCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZh
bGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCisgICAg
Ym9vbCBpc1ZhbGlkVmFsdWVGb3JQcmVzZW5jZShKU1ZhbHVlIHZhbHVlKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbigpLmlzVmFsaWRWYWx1ZUZvclByZXNlbmNlKHZhbHVl
KTsKKyAgICB9CisKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhdHRlbXB0VG9NYWtlRXF1
aXZhbGVuY2VXaXRob3V0QmFycmllcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIEpTT2JqZWN0
KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKK307CisKK3N0
cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Fm
ZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6Zm9yT2Jq
ZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlv
bi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uOworICAg
IH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKK30KKworT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZvckNvbmRpdGlvbktp
bmQoCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCkgY29uc3QKK3sKKyAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAg
ICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIGNv
bmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7Cit9
CisKK3Vuc2lnbmVkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlv
bnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKSBjb25zdAoreworICAgIHVu
c2lnbmVkIHJlc3VsdCA9IDA7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0g
a2luZCkKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNPbmVTbG90QmFzZUNvbmRp
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFBy
b3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgPT0gMTsKK30KKworT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29u
c3QKK3sKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgdW5zaWduZWQg
bnVtRm91bmQgPSAwOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9u
OworICAgICAgICAgICAgbnVtRm91bmQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVChudW1Gb3VuZCA9PSAxKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bWVyZ2VkV2l0
aCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0Cit7
CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IGludmFsaWQoKTsKKworICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gcmVzdWx0
OworICAgIAorICAgIGlmICghaXNFbXB0eSgpKQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9y
KG1fZGF0YS0+dmVjdG9yKTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBuZXdDb25kaXRpb24gOiBvdGhlcikgeworICAgICAgICBmb3IgKGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBleGlzdGluZ0NvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAg
ICAgICBpZiAobmV3Q29uZGl0aW9uID09IGV4aXN0aW5nQ29uZGl0aW9uKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRpb24uaXNDb21wYXRpYmxl
V2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWQo
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9uKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBub25FbXB0eShyZXN1bHQpOworfQorCitib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdAorewor
ICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9y
IChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAg
ICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoIWNvbmRpdGlv
bi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi52YWxpZGl0
eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjphcmVTdGlsbExpdmUoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uLmlzU3RpbGxMaXZlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFs
aWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJbIik7
CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgb3V0LnByaW50KGxpc3REdW1wSW5Db250ZXh0KG1f
ZGF0YS0+dmVjdG9yLCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCJdIik7Cit9CisKK3ZvaWQg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK25hbWVzcGFjZSB7CisK
K2Jvb2wgdmVyYm9zZSA9IGZhbHNlOworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0
ZUNvbmRpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3Qs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlv
bktpbmQpCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgp
OworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBjb25kaXRpb24g
IiwgY29uZGl0aW9uS2luZCwgIiBmb3IgIiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKSwgIlxuIik7
CisKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgc3dpdGNoIChjb25k
aXRpb25LaW5kKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6IHsKKyAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAg
aWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCk7CisgICAgICAgIHJlc3VsdCA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uOjpwcmVzZW5jZSh2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJz
ZW5jZTogeworICAgICAgICByZXN1bHQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5j
ZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJl
KCktPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjogeworICAgICAgICByZXN1
bHQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZU9mU2V0dGVyKAorICAgICAgICAg
ICAgdm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJv
dG90eXBlT2JqZWN0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgfQorCisgICAgaWYgKCFyZXN1bHQuc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBjcmVhdGUg
Y29uZGl0aW9uOiAiLCByZXN1bHQsICJcbiIpOworICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24oKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiTmV3IGNvbmRpdGlvbjogIiwgcmVzdWx0LCAiXG4iKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitlbnVtIENvbmN1cnJlbmN5IHsKKyAgICBNYWluVGhyZWFkLAorICAgIENvbmN1cnJlbnQK
K307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgZ2VuZXJhdGVDb25kaXRpb25zKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IsCisgICAgQ29uY3VycmVuY3kgY29uY3VycmVuY3kgPSBNYWluVGhy
ZWFkKQoreworICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4gY29uZGl0aW9uczsK
KyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygiQ29uc2lkZXJpbmcgc3RydWN0dXJlOiAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUp
LCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkgewor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSXQncyBh
IHByb3h5LCBzbyBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQ6OmludmFsaWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVj
dCk7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAg
IGlmICghcHJvdG90eXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIlJlYWNoZWQgZW5kIHVwIHByb3RvdHlwZSBjaGFpbiBhcyBl
eHBlY3RlZCwgZG9uZS5cbiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiVW5l
eHBlY3RlZGx5IHJlYWNoZWQgZW5kIG9mIHByb3RvdHlwZSBjaGFpbiwgc28gaW52YWxpZC5cbiIp
OworICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPih2YWx1ZSk7CisgICAgICAgIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0
dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHBy
b3RvdHlwZSByZXBlYXRlZGx5LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdCBzaG91bGQgbm90IGJl
CisgICAgICAgIC8vIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IE1h
aW5UaHJlYWQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0
cnVjdHVyZSh2bSwgb2JqZWN0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDYW5ub3QgZmxhdHRl
biBkaWN0aW9uYXJ5IHdoZW4gbm90IG9uIG1haW4gdGhyZWFkLCBzbyBpbnZhbGlkLlxuIik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlk
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZ1bmN0b3IoY29u
ZGl0aW9ucywgb2JqZWN0KSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiRnVuY3RvciBmYWlsZWQsIGludmFsaWQuXG4iKTsKKyAgICAgICAgICAg
IHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkgeworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVhY2hlZCBkZXNpcmVk
IHByb3RvdHlwZSwgZG9uZS5cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUmV0dXJuaW5nIGNvbmRp
dGlvbnM6ICIsIGxpc3REdW1wKGNvbmRpdGlvbnMpLCAiXG4iKTsKKyAgICByZXR1cm4gT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQ6Om5vbkVtcHR5KGNvbmRpdGlvbnMpOworfQorCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwKKyAgICAg
ICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09i
amVjdCogb2JqZWN0KSAtPiBib29sIHsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Y29uZGl0aW9ucy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9KTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwKKyAgICAg
ICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09i
amVjdCogb2JqZWN0KSAtPiBib29sIHsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcik7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0pOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVj
dCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJu
IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLAorICAgICAgICBbJl0gKFZlY3RvcjxPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlvbnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJv
b2wgeworICAgICAgICAgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCA9CisgICAgICAg
ICAgICAgICAgb2JqZWN0ID09IHByb3RvdHlwZSA/IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZSA6IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gcmVzdWx0ID0KKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2
bSwgb3duZXIsIG9iamVjdCwgdWlkLCBraW5kKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbmRpdGlvbnMuYXBw
ZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7Cit9CisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRp
b25zKAorICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0
dXJlLCBwcm90b3R5cGUsCisgICAgICAgIFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uPiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVjdCkgLT4gYm9vbCB7CisgICAgICAgICAg
ICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2UpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKK30KKworT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNz
Q29uY3VycmVudGx5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAg
IHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIGhl
YWRTdHJ1Y3R1cmUsIG51bGxwdHIsCisgICAgICAgIFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVjdCkgLT4gYm9vbCB7CisgICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQgPQorICAgICAgICAgICAgICAg
IGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBudWxscHRyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25k
aXRpb246OkFic2VuY2VPZlNldHRlcik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sIENvbmN1cnJlbnQp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKyNkZWZpbmUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXRfaAorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQW4gb2JqZWN0IHByb3BlcnR5
IGNvbmRpdGlvbiBzZXQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIHNldCBvZiBhZGRpdGlvbmFs
IGNvbmRpdGlvbnMKKy8vIHRoYXQgbmVlZCB0byBiZSBtZXQgZm9yIHNvbWUgaGVhcCBhY2Nlc3Mg
dG8gYmUgdmFsaWQuIFRoZSBzZXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZworLy8gaW50ZXJlc3Rp
bmcgc3RhdGVzOgorLy8KKy8vIEVtcHR5OiBUaGVyZSBhcmUgbm8gc3BlY2lhbCBjb25kaXRpb25z
IHRoYXQgbmVlZCB0byBiZSBtZXQuCisvLyBJbnZhbGlkOiBUaGUgaGVhcCBhY2Nlc3MgaXMgbmV2
ZXIgdmFsaWQuCisvLyBOb24tZW1wdHk6IFRoZXJlIGFyZSBzb21lIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdmFsaWQuCisKK2NsYXNzIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpIHsg
fQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnZhbGlkKCkK
KyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fZGF0YSA9IGFkb3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbm9uRW1wdHkoY29uc3QgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgdmVjdG9y
KQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAgICAgICAgCisgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IGFk
b3B0UmVmKG5ldyBEYXRhKCkpOworICAgICAgICByZXN1bHQubV9kYXRhLT52ZWN0b3IgPSB2ZWN0
b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YSB8fCAhbV9kYXRhLT52ZWN0
b3IuaXNFbXB0eSgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICFtX2RhdGE7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24qIGl0ZXJhdG9yOworICAgIAorICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5iZWdpbigpOwor
ICAgIH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rh
dGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+
dmVjdG9yLmVuZCgpOworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBm
b3JPYmplY3QoSlNPYmplY3QqIG9iamVjdCkgY29uc3Q7CisgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gZm9yQ29uZGl0aW9uS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlv
bjo6S2luZCkgY29uc3Q7CisKKyAgICBib29sIGhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkgY29u
c3Q7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQgZm9yIGEgcHJvdG90
eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZQorICAgIC8vIGNv
bmRpdGlvbiBvbiB0aGUgcHJvdG90eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3MgeW91IHRvIGdldCB0
aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9yIHRoZSBwcm90b3R5
cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgb25lIFBy
ZXNlbmNlCisgICAgLy8gaW4gdGhlIHNldCwgYW5kIGl0IHdpbGwgcmV0dXJuIHRoYXQgcHJlc2Vu
Y2UuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gc2xvdEJhc2VDb25kaXRpb24oKSBjb25z
dDsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhIG5ldyBjb25kaXRpb24gc2V0IGJ5
IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0aGUgb3RoZXIgb25lLiBUaGlzIHdpbGwKKyAgICAvLyBm
YWlsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWFjaCBv
dGhlci4gV2hlbiBpZiBmYWlscywgaXQgcmV0dXJucworICAgIC8vIGludmFsaWQoKS4KKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRXaXRoKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgYm9vbCBzdHJ1Y3R1cmVzRW5z
dXJlVmFsaWRpdHkoKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBu
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbExp
dmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorICAgIC8vIEhlbHBlcnMgZm9yIHVzaW5nIHRoaXMgaW4gYSB1bmlvbi4KKyAgICB2b2lk
KiByZWxlYXNlUmF3UG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkpOworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgYWRvcHRSYXdQb2ludGVyKHZvaWQqIHJhd1BvaW50ZXIpCisgICAgewor
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcikpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgZnJvbVJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAgICB7CisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fZGF0
YSA9IHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIEludGVybmFsbHksIHRoaXMgcmVwcmVz
ZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9pbnRlciB0byBhIERhdGEgdGhhdCBoYXMgYW4gZW1wdHkg
dmVjdG9yLgorICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21w
YWN0IGJ5IGhhdmluZyBpdCBpbnRlcm5hbGx5IHVzZSBhIHZlY3RvciB0aGF0IGp1c3QgaGFzCisg
ICAgLy8gdGhlIG5vbi11aWQgcG9ydGlvbiBvZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgYW5k
IHRoZW4gcmVxdWlyaW5nIHRoYXQgdGhlIGNhbGxlcnMgb2YgYWxsCisgICAgLy8gb2YgdGhlIEFQ
SXMgc3VwcGx5IHRoZSB1aWQuCisgICAgCisgICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxEYXRhPiB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEp
OworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgcHVibGlj
OgorICAgICAgICBEYXRhKCkgeyB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+IHZlY3RvcjsKKyAgICB9OworICAgIAorICAgIFJlZlB0cjxEYXRhPiBt
X2RhdGE7Cit9OworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0
ZXJNaXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAor
ICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3Ry
dWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
OworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExp
c3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY2hhaW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkK
ICAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9jaGFpbkNvdW50KGNoYWluQ291bnQpCiAgICAg
LCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0
KGNvbmRpdGlvblNldCkKICAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0gICAg
aWYgKGNoYWluKQotICAgICAgICBtX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKIH0KIAog
R2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQpAQCAtNzEsNyArNjksNyBAQCBib29sIEdl
dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiB7CiAgICAgaWYgKG1fc3RydWN0dXJl
ICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkp
CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4
NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5
SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTMsMTMgKzU0LDEyIEBAIHB1
YmxpYzoKICAgICAKICAgICBHZXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxp
ZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIEdl
dEJ5SWRBY2Nlc3MoCiAgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNo
YWluKiA9IDAsIHVuc2lnbmVkIGNoYWluQ291bnQgPSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAg
ICAgCiAgICAgfkdldEJ5SWRBY2Nlc3MoKTsKICAgICAKQEAgLTcyLDggKzcyLDcgQEAgcHVibGlj
OgogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmUuZ2V0KCk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7
IHJldHVybiBtX2NoYWluLmdldCgpOyB9Ci0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2hhaW5Db3VudDsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQog
ICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAt
OTEsOSArOTAsOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAg
CiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OwogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBt
X2NvbmRpdGlvblNldDsgLy8gRklYTUUgd2hhdCBhYm91dCBiYXJyaWVycz8KICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3Qu
Y3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUx
LDcgKzUxLDggQEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAg
ICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3Ry
dWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1
Y3R1cmUpOwogICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8u
dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5j
b3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKTsKKyAgICAgICAgcmVz
dWx0Lm1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3
UG9pbnRlcigKKyAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29u
ZGl0aW9uU2V0KTsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHVi
Um91dGluZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtNjQsNiArNjUsOSBAQCBQdXRC
eUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAKIGJvb2wgUHV0QnlJZEFjY2Vz
czo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpIGNvbnN0CiB7CisgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKQEAgLTc0LDE1ICs3
OCwxMSBAQCBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1
Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFNldHRlcjoKICAgICBjYXNlIEN1c3RvbVNldHRlcjoK
ICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX2NoYWluICYmICFIZWFwOjppc01h
cmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAj
aW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCkBAIC01Myw3ICs1NCw2IEBAIHB1YmxpYzoKICAg
ICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICAg
ICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTYyLDE0
ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAg
ICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0
OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKICAgICAgICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0cnVjdHVyZSk7CiAgICAgICAgIHJlc3Vs
dC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICBy
ZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2Nv
bmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVy
ID0gMDsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1LDggKzk1LDcgQEAgcHVibGljOgogICAgICAgICBKU0Nl
bGwqIG93bmVyLAogICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAg
IHVuc2lnbmVkIGNoYWluQ291bnQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1
YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0LDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFB1
dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7
Ci0gICAgICAgIGlmIChjaGFpbikgewotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZt
LCBvd25lciwgY2hhaW4pOwotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWlu
Q291bnQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAg
ICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
bmV3U3RydWN0dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzU2V0
dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluLmdldCgpOwotICAg
IH0KLSAgICAKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jaGFp
bkNvdW50OwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBK
SVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKQEAgLTE3OCw4ICsxNjQs
NyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5cGUgbV90eXBlOwogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
bmV3U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsK
LSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9j
dXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwog
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3Bl
cnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q29uZGl0aW9uLmgiCisKKyNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBib29sIHZl
cmJvc2UgPSBmYWxzZTsKKwordm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KG1fa2luZCwgIiBvZiAiLCBtX3VpZCk7Cisg
ICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICBvdXQucHJp
bnQoIiBhdCAiLCBvZmZzZXQoKSwgIiB3aXRoIGF0dHJpYnV0ZXMgIiwgYXR0cmlidXRlcygpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEFic2VuY2VPZlNl
dHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpT
VmFsdWUocHJvdG90eXBlKCkpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiB3aXRoICIsIGluQ29udGV4dChyZXF1
aXJlZFZhbHVlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51
bGxwdHIpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNP
YmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxv
ZygKKyAgICAgICAgICAgICJEZXRlcm1pbmluZyB2YWxpZGl0eSBvZiAiLCAqdGhpcywgIiB3aXRo
IHN0cnVjdHVyZSAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUpLCAiIGFuZCBiYXNlICIsCisgICAg
ICAgICAgICBKU1ZhbHVlKGJhc2UpLCAiIGFzc3VtaW5nIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBv
aW50cyBhcmUgc2V0LlxuIik7CisgICAgfQorICAgIAorICAgIGlmICghKnRoaXMpIHsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgdW5z
ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7CisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiSW52YWxpZCBiZWNhdXNlIGFjY2Vzc2VzIGFy
ZSBub3QgY2FjaGVhYmxlLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOiB7CisgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50
T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0KCkgfHwgY3VycmVudEF0
dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJl
Y2F1c2Ugd2UgbmVlZCBvZmZzZXQsIGF0dHJpYnV0ZXMgdG8gYmUgIiwgb2Zmc2V0KCksICIsICIs
IGF0dHJpYnV0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgIiBidXQgdGhleSBhcmUgIiwgY3Vy
cmVudE9mZnNldCwgIiwgIiwgY3VycmVudEF0dHJpYnV0ZXMsICJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBYnNlbmNlOiB7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgaXQncyBhIGRpY3Rpb25hcnku
XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQoKSk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQg
YmVjYXVzZSB0aGUgcHJvcGVydHkgZXhpc3RzIGF0IG9mZnNldDogIiwgY3VycmVudE9mZnNldCwg
IlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpICE9IHByb3RvdHlw
ZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFM
b2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2UgdGhlIHByb3RvdHlwZSBp
cyAiLCBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCAiIGV2ZW4gdGhvdWdoICIKKyAgICAg
ICAgICAgICAgICAgICAgIml0IHNob3VsZCBoYXZlIGJlZW4gIiwgSlNWYWx1ZShwcm90b3R5cGUo
KSksICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
Y2FzZSBBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIkludmFsaWQgYmVjYXVzZSBpdCdzIGEgZGljdGlvbmFyeS5cbiIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAg
ICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlm
IChjdXJyZW50QXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yKSkgeworICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHdlIGV4cGVjdGVkIG5v
dCB0byBoYXZlIGEgc2V0dGVyLCBidXQgd2UgaGF2ZSBvbmUgYXQgb2Zmc2V0ICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0LCAiIHdpdGggYXR0cmlidXRlcyAiLCBjdXJy
ZW50QXR0cmlidXRlcywgIlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90eXBlKCkp
IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB0aGUgcHJvdG90eXBlIGlzICIs
IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksICIgZXZlbiB0aG91Z2ggIgorICAgICAgICAg
ICAgICAgICAgICAiaXQgc2hvdWxkIGhhdmUgYmVlbiAiLCBKU1ZhbHVlKHByb3RvdHlwZSgpKSwg
IlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJhc2UgfHwgYmFzZS0+c3RydWN0dXJl
KCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSByZXR1cm4g
ZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBvbmUgd2l0aG91dCBoYXZpbmcgdGhl
CisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJlY2F1
c2Ugd2UgZG9uJ3QgaGF2ZSBhIGJhc2Ugb3IgdGhlIGJhc2UgaGFzIHRoZSB3cm9uZyBzdHJ1Y3R1
cmU6ICIsCisgICAgICAgICAgICAgICAgICAgIFJhd1BvaW50ZXIoYmFzZSksICJcbiIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByYWN5LCBhbmQgbWF5YmUgbW9y
ZSByaXNreSB0aGFuIHdlIHdhbnQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKKyAgICAgICAgCisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAg
ICAgIEpTVmFsdWUgY3VycmVudFZhbHVlID0gYmFzZS0+Z2V0RGlyZWN0KGN1cnJlbnRPZmZzZXQp
OworICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IHJlcXVpcmVkVmFsdWUoKSkgeworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHRoZSB2YWx1ZSBpcyAiLCBjdXJyZW50VmFsdWUs
ICIgYnV0IHdlIHJlcXVpcmUgIiwgcmVxdWlyZWRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAg
ICAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2Fz
ZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgYW4gaW1wdXJlIHByb3BlcnR5IGNh
biBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwgYW5kIGNhbiBhbHNvCisgICAgLy8gInNoYWRv
dyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24gdGhlIHNhbWUgb2JqZWN0LiBIZW5jZSBpdCBh
ZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAgLy8gYWJzZW5jZS4gSXQgZG9lc24ndCBhZmZl
Y3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1wdXJlIHByb3BlcnRpZXMgYXJlbid0IGV2ZXIg
c2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAg
Y2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBFcXVpdmFs
ZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZhcmlhbnQgb2YgaXNWYWxpZCByZXR1cm5lZCB0
cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVzIHRoYXQgd2UgYWxyZWFkeSBjb25maXJtZWQg
dGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkCisgICAg
ICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZSBTdHJ1Y3R1cmUgaXMgYSBjYWNoZWFi
bGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UKKyAgICAgICAgLy8gc2hvdWxkbid0IGhhdmUg
YSBUT0NUT1UgcmFjZSBlaXRoZXIuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCAhPSBp
bnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAg
ICAgICAgc3dpdGNoIChlZmZvcnQpIHsKKyAgICAgICAgY2FzZSBNYWtlTm9DaGFuZ2VzOgorICAg
ICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNl
dChvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5zdXJlV2F0Y2hh
YmlsaXR5OgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVJlcGxh
Y2VtZW50V2F0Y2hwb2ludFNldCgKKyAgICAgICAgICAgICAgICAqSGVhcDo6aGVhcChzdHJ1Y3R1
cmUpLT52bSgpLCBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmICghc2V0IHx8ICFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVy
biBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUs
IGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0
KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0
KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQorICAg
ICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7Cit9CisKK2Jv
b2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFz
UHJvdG90eXBlKCkgJiYgcHJvdG90eXBlKCkgJiYgIUhlYXA6OmlzTWFya2VkKHByb3RvdHlwZSgp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVl
KCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAgICAgICYmIHJlcXVpcmVkVmFsdWUo
KS5pc0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQocmVxdWlyZWRWYWx1ZSgpLmFz
Q2VsbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJh
Y2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Byb3RvdHlwZSgp
KQorICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgpKTsKKyAgICAKKyAgICBpZiAoaGFz
UmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHJlcXVpcmVkVmFsdWUoKSk7
Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzVmFsaWRWYWx1ZUZvckF0dHJpYnV0ZXMo
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3sKKyAgICBib29sIGF0dHJpYnV0
ZXNDbGFpbUFjY2Vzc29yID0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKTsKKyAgICBib29sIHZh
bHVlQ2xhaW1zQWNjZXNzb3IgPSAhIWpzRHluYW1pY0Nhc3Q8R2V0dGVyU2V0dGVyKj4odmFsdWUp
OworICAgIHJldHVybiBhdHRyaWJ1dGVzQ2xhaW1BY2Nlc3NvciA9PSB2YWx1ZUNsYWltc0FjY2Vz
c29yOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1ZhbGlkVmFsdWVGb3JQcmVzZW5j
ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBpc1ZhbGlkVmFsdWVGb3JBdHRy
aWJ1dGVzKHZhbHVlLCBhdHRyaWJ1dGVzKCkpOworfQorCitQcm9wZXJ0eUNvbmRpdGlvbiBQcm9w
ZXJ0eUNvbmRpdGlvbjo6YXR0ZW1wdFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoSlNP
YmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5z
dHJ1Y3R1cmUoKTsKKyAgICBpZiAoIXN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQoKSkp
CisgICAgICAgIHJldHVybiBQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBiYXNlLT5nZXREaXJlY3Qob2Zmc2V0KCkpOworICAgIGlmICghaXNWYWxpZFZhbHVlRm9yUHJl
c2VuY2UodmFsdWUpKQorICAgICAgICByZXR1cm4gUHJvcGVydHlDb25kaXRpb24oKTsKKyAgICBy
ZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcih1aWQoKSwgdmFsdWUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbikK
K3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmludCgiUHJlc2VuY2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZToKKyAgICAg
ICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6
UHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJB
YnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRp
b246OkVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIkVxdWl2YWxlbmNlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBQcm9wZXJ0eUNv
bmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xh
c3MgUHJvcGVydHlDb25kaXRpb24geworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAg
IFByZXNlbmNlLAorICAgICAgICBBYnNlbmNlLAorICAgICAgICBBYnNlbmNlT2ZTZXR0ZXIsCisg
ICAgICAgIEVxdWl2YWxlbmNlIC8vIEFuIGFkYXB0aXZlIHdhdGNocG9pbnQgb24gdGhpcyB3aWxs
IGJlIGEgcGFpciBvZiB3YXRjaHBvaW50cywgYW5kIHdoZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0
aW9ucywgd2Ugd2lsbCBzZXQgdGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgb24gdGhlIG5ldyBz
dHJ1Y3R1cmUuCisgICAgfTsKKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbigpCisgICAgICAg
IDogbV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tpbmQoUHJlc2VuY2UpCisgICAgeworICAg
ICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5
Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3Vp
ZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChBYnNlbmNlKQorICAgIHsKKyAgICAgICAgbWVt
c2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlD
b25kaXRpb24gcHJlc2VuY2VXaXRob3V0QmFycmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAg
ICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZXNlbmNlOworICAgICAgICByZXN1bHQudS5wcmVz
ZW5jZS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLmF0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2UoCisgICAgICAgIFZNJiwgSlNDZWxs
KiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJp
ZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKworICAgIC8vIE5PVEU6IFRoZSBw
cm90b3R5cGUgaXMgdGhlIHN0b3JlZFByb3RvdHlwZSBub3QgdGhlIHByb3RvdHlwZUZvckxvb2t1
cC4KKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2U7CisgICAgICAgIHJlc3VsdC51LmFic2Vu
Y2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVhcC53
cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJyaWVy
KHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0
aW9uIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlD
b25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBBYnNlbmNlT2ZTZXR0ZXI7CisgICAgICAgIHJlc3VsdC51LmFic2VuY2Uu
cHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyKAorICAgICAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0
KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5o
ZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiBhYnNlbmNlT2ZTZXR0ZXJX
aXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUHJvcGVy
dHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91aWQgPSB1aWQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBFcXVpdmFsZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuZXF1aXZhbGVu
Y2UudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxl
bmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkgJiYg
b3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAg
IHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgIH0KKyAg
ICAgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV91aWQgJiYgbV9r
aW5kID09IFByZXNlbmNlOyB9OworICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBt
X3VpZDsgfQorICAgIAorICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gISEqdGhp
cyAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNPZmZzZXQoKSk7CisgICAgICAgIHJldHVy
biB1LnByZXNlbmNlLm9mZnNldDsKKyAgICB9CisgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29u
c3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgdW5zaWdu
ZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQXR0cmlidXRl
cygpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICB9CisgICAg
CisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIChtX2tp
bmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQgPT0gQWJzZW5jZU9mU2V0dGVyKTsgfQorICAgIEpTT2Jq
ZWN0KiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1Byb3RvdHlw
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5wcm90b3R5cGU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgbV9r
aW5kID09IEVxdWl2YWxlbmNlOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChoYXNSZXF1aXJlZFZhbHVlKCkpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuZXF1aXZhbGVuY2UudmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gV1RGOjpQdHJIYXNo
PFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91aWQpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fa2luZCk7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgUHJlc2Vu
Y2U6CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5jZS5vZmZzZXQ7CisgICAgICAgICAg
ICByZXN1bHQgKz0gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQWJzZW5jZToKKyAgICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAg
ICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTT2JqZWN0Kj46Omhhc2godS5hYnNlbmNl
LnByb3RvdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFcXVpdmFsZW5j
ZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBFbmNvZGVkSlNWYWx1ZUhhc2g6Omhhc2godS5lcXVp
dmFsZW5jZS52YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJv
cGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdWlkICE9
IG90aGVyLm1fdWlkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9r
aW5kICE9IG90aGVyLm1fa2luZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgICAgIHJl
dHVybiB1LnByZXNlbmNlLm9mZnNldCA9PSBvdGhlci51LnByZXNlbmNlLm9mZnNldAorICAgICAg
ICAgICAgICAgICYmIHUucHJlc2VuY2UuYXR0cmlidXRlcyA9PSBvdGhlci51LnByZXNlbmNlLmF0
dHJpYnV0ZXM7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAgICAgICAgY2FzZSBBYnNlbmNlT2ZT
ZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZSA9PSBvdGhlci51
LmFic2VuY2UucHJvdG90eXBlOworICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICAg
ICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWUgPT0gb3RoZXIudS5lcXVpdmFsZW5jZS52YWx1
ZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQg
PT0gQWJzZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBh
dGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50
IHVpZHMuIElmCisgICAgLy8gZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRvIGRlY2lkZSBo
b3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLSBmb3IgZXhhbXBsZSBpZiB0aGVyZSBpcworICAg
IC8vIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBjYXNlcyB5b3Un
bGwgd2FudCB0aGUgbW9yZSBnZW5lcmFsIG9mIHRoZSB0d28KKyAgICAvLyB3aGlsZSBpbiBvdGhl
ciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdvLiBUaGlzIHdp
bGwgYWxzbyByZXR1cm4gZmFsc2UKKyAgICAvLyBmb3IgY29udHJhZGljdGlvbnMsIGxpa2UgUHJl
c2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUgdWlkLiBCeSBjb252ZW50aW9uLCBpbnZhbGlk
CisgICAgLy8gY29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nLgorICAg
IGJvb2wgaXNDb21wYXRpYmxlV2l0aChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzIHx8ICFvdGhlcikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IG90aGVyIHx8IHVpZCgpICE9IG90
aGVyLnVpZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0
cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuCisg
ICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1
Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVu
c3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGlsbFZhbGlkQWNjb3JkaW5nVG9TdHJ1
Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFsaWRpdHlSZXF1aXJlc0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICAKKyAgICAvLyBDaGVja3Mg
aWYgdGhlIGNvbmRpdGlvbiBpcyBzdGlsbCB2YWxpZCByaWdodCBub3cgZm9yIHRoZSBnaXZlbiBv
YmplY3QgYW5kIHN0cnVjdHVyZS4KKyAgICAvLyBNYXkgY29uc2VydmF0aXZlbHkgcmV0dXJuIGZh
bHNlLCBpZiB0aGUgb2JqZWN0IGFuZCBzdHJ1Y3R1cmUgYWxvbmUgZG9uJ3QgZ3VhcmFudGVlIHRo
ZQorICAgIC8vIGNvbmRpdGlvbi4gVGhpcyBoYXBwZW5zIGZvciBhbiBBYnNlbmNlIGNvbmRpdGlv
biBvbiBhbiBvYmplY3QgdGhhdCBtYXkgaGF2ZSBpbXB1cmUKKyAgICAvLyBwcm9wZXJ0aWVzLiBJ
ZiB0aGUgb2JqZWN0IGlzIG5vdCBzdXBwbGllZCwgdGhlbiBhICJ0cnVlIiByZXR1cm4gaW5kaWNh
dGVzIHRoYXQgY2hlY2tpbmcgaWYKKyAgICAvLyBhbiBvYmplY3QgaGFzIHRoZSBnaXZlbiBzdHJ1
Y3R1cmUgZ3VhcmFudGVlcyB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBJZiBhbiBvYmplY3Qg
aXMKKyAgICAvLyBzdXBwbGllZCwgdGhlbiB5b3UgbWF5IG5lZWQgdG8gdXNlIHNvbWUgb3RoZXIg
d2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdCB0byBndWFyYW50ZWUgdGhlCisgICAgLy8gY29uZGl0
aW9uIGluIGFkZGl0aW9uIHRvIHRoZSBzdHJ1Y3R1cmUgY2hlY2suCisgICAgYm9vbCBpc1N0aWxs
VmFsaWQoU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyKSBjb25zdDsKKyAgICAK
KyAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgY29uZGl0aW9uIGlzIG5vdCB3YXRjaGFibGUsIGJ1
dCBjb3VsZCBiZSBtYWRlIHdhdGNoYWJsZSBieSBlbmFibGluZyB0aGUKKyAgICAvLyBhcHByb3By
aWF0ZSB3YXRjaHBvaW50LiBGb3IgZXhhbXBsZSwgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludHMgYXJl
IGVuYWJsZWQgb25seSB3aGVuIHNvbWUKKyAgICAvLyBhY2Nlc3MgaXMgY2FjaGVkIG9uIHRoZSBw
cm9wZXJ0eSBpbiBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBtYWlubHkgdG8gc2F2ZSBzcGFjZSBm
b3IKKyAgICAvLyBkaWN0aW9uYXJ5IHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IG5ldmVy
IGdldCB2ZXJ5IGhvdC4gQnV0LCBpdCdzIGFsd2F5cyBzYWZlIHRvCisgICAgLy8gZW5hYmxlIHdh
dGNoaW5nLCBwcm92aWRlZCB0aGF0IHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFk
LgorICAgIGVudW0gV2F0Y2hhYmlsaXR5RWZmb3J0IHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUg
ZGVmYXVsdC4gSXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFueSBT
dHJ1Y3R1cmUgb3IKKyAgICAgICAgLy8gb2JqZWN0LCBhbmQgaW1wbGllcyB0aGF0IGlmIHRoZSBw
cm9wZXJ0eSBoYXBwZW5zIG5vdCB0byBiZSB3YXRjaGFibGUgdGhlbiB3ZSBkb24ndCBtYWtlCisg
ICAgICAgIC8vIGl0IHdhdGNoYWJsZS4gVGhpcyBpcyBtYW5kYXRvcnkgaWYgY2FsbGluZyBmcm9t
IGEgSklUIHRocmVhZC4gVGhpcyBpcyBhbHNvIHNvbWV3aGF0CisgICAgICAgIC8vIHByZWZlcmFi
bGUgd2hlbiBmaXJzdCBkZWNpZGluZyB3aGV0aGVyIHRvIHdhdGNoIGEgY29uZGl0aW9uIGZvciB0
aGUgZmlyc3QgdGltZSAoaS5lLgorICAgICAgICAvLyBub3QgZnJvbSBhIHdhdGNocG9pbnQgZmly
ZSB0aGF0IGNhdXNlcyB1cyB0byBzZWUgaWYgd2Ugc2hvdWxkIGFkYXB0KSwgc2luY2UgYQorICAg
ICAgICAvLyB3YXRjaHBvaW50IG5vdCBiZWluZyBpbml0aWFsaXplZCBmb3Igd2F0Y2hpbmcgaW1w
bGllcyB0aGF0IG1heWJlIHdlIGRvbid0IGtub3cgZW5vdWdoCisgICAgICAgIC8vIHlldCB0byBt
YWtlIGl0IHByb2ZpdGFibGUgdG8gd2F0Y2ggLS0gYXMgaW4sIHRoZSB0aGluZyBiZWluZyB3YXRj
aGVkIG1heSBub3QgaGF2ZQorICAgICAgICAvLyBzdGFiaWxpemVkIHlldC4gV2UgcHJlZmVyIHRv
IG9ubHkgYXNzdW1lIHRoYXQgYSBjb25kaXRpb24gd2lsbCBob2xkIGlmIGl0IGhhcyBiZWVuCisg
ICAgICAgIC8vIGtub3duIHRvIGhvbGQgZm9yIGEgd2hpbGUgYWxyZWFkeS4KKyAgICAgICAgTWFr
ZU5vQ2hhbmdlcywKKyAgICAgICAgCisgICAgICAgIC8vIERvIHdoYXQgaXQgdGFrZXMgdG8gZW5z
dXJlIHRoYXQgdGhlIHByb3BlcnR5IGNhbiBiZSB3YXRjaGVkLCBpZiBkb2luZyBzbyBoYXMgbm8K
KyAgICAgICAgLy8gdXNlci1vYnNlcnZhYmxlIGVmZmVjdC4gRm9yIG5vdyB0aGlzIGp1c3QgbWVh
bnMgdGhhdCB3ZSB3aWxsIGVuc3VyZSB0aGF0IGEgcHJvcGVydHkKKyAgICAgICAgLy8gcmVwbGFj
ZW1lbnQgd2F0Y2hwb2ludCBpcyBlbmFibGVkIGlmIGl0IGhhZG4ndCBiZWVuIGVuYWJsZWQgYWxy
ZWFkeS4gRG8gbm90IHVzZSB0aGlzCisgICAgICAgIC8vIGZyb20gSklUIHRocmVhZHMsIHNpbmNl
IHRoZSBhY3Qgb2YgZW5hYmxpbmcgd2F0Y2hwb2ludHMgaXMgbm90IHRocmVhZC1zYWZlLgorICAg
ICAgICBFbnN1cmVXYXRjaGFiaWxpdHkKKyAgICB9OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNl
dHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFu
ZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0
Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVy
ZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5v
Q2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwg
dmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRp
b24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNo
YWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBudWxscHRyLCBXYXRj
aGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAKKyAgICBib29sIHdh
dGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpIGNvbnN0CisgICAg
eworICAgICAgICAvLyBDdXJyZW50bHksIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBvZiBvdXIg
Y29uZGl0aW9ucy4KKyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAgfQorICAgIGJvb2wgd2F0
Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gRXF1aXZhbGVuY2U7CisgICAgfQorICAgIAor
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGlzIGFyZSBz
dGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworCisg
ICAgc3RhdGljIGJvb2wgaXNWYWxpZFZhbHVlRm9yQXR0cmlidXRlcyhKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKworICAgIGJvb2wgaXNWYWxpZFZhbHVlRm9yUHJlc2VuY2Uo
SlNWYWx1ZSkgY29uc3Q7CisKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBhdHRlbXB0VG9NYWtlRXF1
aXZhbGVuY2VXaXRob3V0QmFycmllcihKU09iamVjdCogYmFzZSkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1Y3R1cmUqLCBXYXRjaGFiaWxpdHlF
ZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworICAgIEtpbmQg
bV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAg
ICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBKU09iamVjdCog
cHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgfSBlcXVpdmFsZW5jZTsKKyAgICB9
IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAgIGNvbnN0IFByb3BlcnR5Q29u
ZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1l
c3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZh
dWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvcGVydHlDb25k
aXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlDb25kaXRpb25IYXNoIEhhc2g7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4g
c3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5MCwyMiBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUu
b3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
X291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBpbnN0
cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4g
PSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAgIEFTU0VSVChuZXdT
dHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZv
cm1hdGlvbik7CiAgICAgCi0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGludGVu
ZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBpbnRlbmRlZENoYWluID0gYWRvcHRS
ZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBj
aGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bj
b2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291
dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAg
ICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9
CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBpbnRlbmRlZENoYWluLmdldCgpLCBvZmZzZXQpOworICAgIHJldHVybiBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBvZmZzZXQpOwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTY1LDE2ICsxNjgs
MTQgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJh
bnNpdGlvbi5jaGFpbikgewotICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
IHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAot
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQ
b2ludGVyKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVz
RW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlk
VHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgY2hhaW4uZ2V0KCks
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0K
QEAgLTIxOSwxNSArMjIwLDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclMKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0
ZSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWlu
OwotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3MuY2hhaW4oKSkgewotICAgICAgICAgICAgICAg
ICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBh
Y2Nlc3MuY2hhaW4oKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYWluLT5pc1N0aWxs
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZh
cmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAg
YWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNoYWluLmdldCgp
LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFj
Y2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM1LDcgKzIz
Miw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRT
dGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGFjY2Vzcy5jaGFpbigpLCBhY2Nlc3MuY2hhaW5D
b3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25k
aXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMjUzLDcgKzI1MCw3IEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxF
eGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVz
LmNoYWluKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRT
dGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAg
ICAgICB9IH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2OCwyMiArMzY1LDExIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAotICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbj4gY2hhaW47CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgY2hhaW4g
PSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSkpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4g
aGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KLSAgICAg
ICAgICAgIGlmIChjaGFpbi0+bWF5SW50ZXJjZXB0U3RvcmVUbyh1aWQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAKLSAgICAg
ICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXplZCAo
aS5lLiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJpZXMpCi0gICAgICAgICAgICAvLyB0
aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9uYXJ5IGNhc2Ugd291bGQgb25seSBoYXBwZW4gaWYgdGhp
cyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVuCi0gICAgICAgICAgICAvLyB1c2VkIGluIGFuIG9wdGlt
aXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxseSB0aGUgb25seSByZWFzb24gd2h5
IHdlIHdvdWxkCi0gICAgICAgICAgICAvLyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJlYWxs
eSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBvcHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgotICAg
ICAgICAgICAgLy8gZGljdGlvbmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0
aGF0IHRob3NlIG9iamVjdHMgd2VyZSBuZXZlciB1c2VkIGFzCi0gICAgICAgICAgICAvLyBwcm90
b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJlJ3MgYSBn
b29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKLSAgICAgICAgICAgIC8vIHRoZSBvdGhlciBjaGVja3Mg
YmVsb3cgd2lsbCBmYWlsLgotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpIHx8
ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkpCisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAg
ICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlk
KTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQogICAg
IApAQCAtMzk0LDcgKzM4MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAg
ICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWluLmdl
dCgpLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKICAgICAgICAgaWYg
KCFkaWRBcHBlbmQpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDgg
KzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1f
a2luZCA9IG90aGVyLm1fa2luZDsKICAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3Ry
dWN0dXJlOwogICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAg
bV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5h
dGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3Ro
ZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBp
ZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsK
QEAgLTY0LDI5ICs2MywyNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwK
LSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFyaWFu
dCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CiAgICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9
IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAoc3RydWN0dXJlQ2hhaW4pCi0gICAgICAgIHN0cnVjdHVy
ZUNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAgIHJlc3Vs
dC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBv
ZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZh
cmlhbnQ6OnNldHRlcigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LAotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQorICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKIHsKICAgICBQdXRCeUlkVmFyaWFu
dCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKICAgICByZXN1bHQubV9vbGRT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKGNoYWluKSB7Ci0gICAgICAgIGNoYWluLT5n
YXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQubV9h
bHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgfQorICAgIHJl
c3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2FsbExp
bmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzQsMTggKzEzMCw2IEBAIGJvb2wg
UHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAogICAgIHJldHVybiBraW5kKCkgPT0g
U2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQgUHV0QnlJZFZhcmlhbnQ6OmJhc2VTdHJ1Y3R1cmUo
KSBjb25zdAotewotICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAKLSAgICBpZiAo
IW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpOwotICAgIAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29uc3RhbnRDaGVja3MsIG1f
YWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKLSAgICByZXR1
cm4gc3RydWN0dXJlOwotfQotCiBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVy
Lm1fb2Zmc2V0KQpAQCAtMTU1LDggKzEzOSw4IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVt
cHRUb01lcmdlKGNvbnMKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIHN3aXRjaCAob3RoZXIu
bV9raW5kKSB7CiAgICAgICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJUKG1f
Y29uc3RhbnRDaGVja3MuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2Nv
bnN0YW50Q2hlY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJn
ZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5
Niw2ICsxODAsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zCiAg
ICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwogICAgIEFTU0VSVCghcmVw
bGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwogICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRl
c1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgp
KTsKICAgICAKICAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2Ug
aGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKICAgICAv
LyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxy
ZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0CkBAIC0yMzIsMTUgKzIxNywxMyBAQCB2
b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIG91dC5wcmlu
dCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgp
LCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3
U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250
ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8U2V0
dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAg
ICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIpOwot
ICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAgICAgICAgb3V0LnByaW50KCIsIGFs
dGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250
ZXh0KSk7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwogICAgICAg
ICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKICAgICAgICAgb3V0
LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgUHV0QnlJZFZhcmlhbnRfaAogI2RlZmluZSBQdXRCeUlkVmFyaWFudF9oCiAK
LSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICBQdXRC
eUlkVmFyaWFudCgpCiAgICAgICAgIDogbV9raW5kKE5vdFNldCkKICAgICAgICAgLCBtX25ld1N0
cnVjdHVyZShudWxscHRyKQotICAgICAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQogICAg
ICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgewogICAgIH0KQEAgLTU0LDE2ICs1
MywxNSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQm
KTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7
CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZSgKLSAgICAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgc3RhdGlj
IFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsCi0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWlu
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZh
cmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAotICAgICAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyk7CisgICAg
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+KTsKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQ7IH0KICAgICAKQEAgLTc2LDYgKzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOwogICAgIH0KICAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7CisgICAg
fQorICAgIAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVw
bGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKQEAgLTEwMCwxMCArMTAzLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxz
KCkgY29uc3Q7CiAgICAgCi0gICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYg
Y29uc3RhbnRDaGVja3MoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRD
aGVja3M7Ci0gICAgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtMTExLDE0ICsxMTEsNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICB9CiAgICAgCi0gICAgSlNPYmpl
Y3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwotICAgIH0KLSAgICAK
LSAgICBTdHJ1Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OwotICAgIAogICAgIENhbGxM
aW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
a2luZCgpID09IFNldHRlcik7CkBAIC0xMzYsOCArMTI4LDcgQEAgcHJpdmF0ZToKICAgICBLaW5k
IG1fa2luZDsKICAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJl
KiBtX25ld1N0cnVjdHVyZTsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29u
c3RhbnRDaGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBt
X29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywzMyArMzcsNDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojp+U3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgpIHsgfQogCiBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgV2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQ+JiBoZWFkKQogewotICAgIGhlYWQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+KGhvbGRlciwgV1RGOjptb3ZlKGhl
YWQpKTsKKyAgICBoZWFkID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50PihrZXksIGhvbGRlciwgV1RGOjptb3ZlKGhlYWQpKTsKICAgICByZXR1cm4gaGVh
ZC5nZXQoKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJl
SW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0
bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50
cy4KLSAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0Y2hwb2ludCByZW1v
dmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAotICAgIC8vIHRoZSBzZXQncyBsaXN0IHRy
YXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0g
ICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1YkluZm8oKSk7
CisgICAgaWYgKCFtX2tleSB8fCAhbV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246
OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkg
Y2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4K
KyAgICAgICAgLy8gVGhhdCB3b3JrcywgYmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVt
b3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBsaXN0LCBhbmQKKyAgICAgICAgLy8gdGhlIHNldCdzIGxp
c3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBjaGFuZ2lu
Zy4KKyAgICAgICAgbV9ob2xkZXIuY29kZUJsb2NrKCktPnJlc2V0U3R1YigqbV9ob2xkZXIuc3R1
YkluZm8oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9rZXkua2luZCgp
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAvLyBJZiB0aGlzIHdh
cyBhIHByZXNlbmNlIGNvbmRpdGlvbiwgbGV0J3Mgd2F0Y2ggdGhlIHByb3BlcnR5IGZvciByZXBs
YWNlbWVudHMuIFRoaXMgaXMgcHJvZml0YWJsZQorICAgICAgICAvLyBmb3IgdGhlIERGRywgd2hp
Y2ggd2lsbCB3YW50IHRoZSByZXBsYWNlbWVudCBzZXQgdG8gYmUgdmFsaWQgaW4gb3JkZXIgdG8g
ZG8gY29uc3RhbnQgZm9sZGluZy4KKyAgICAgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAobV9rZXku
b2JqZWN0KCkpLT52bSgpOworICAgICAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPnN0
YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgbV9rZXkub2Zmc2V0KCkpOwor
ICAgIH0KKworICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQodGhpcyk7CiB9CiAKIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6fldh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbygpCiB7CiB9CiAKLVN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hw
b2ludCgpCitTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6
cHVzaCgqdGhpcywgbV9oZWFkKTsKKyAgICByZXR1cm4gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludDo6cHVzaChrZXksICp0aGlzLCBtX2hlYWQpOwogfQogCiBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJl
ZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbz4mIGhvbGRlclJlZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCi0gICAgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvKQorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKICAgICBpZiAoIWhvbGRlclJl
ZikKICAgICAgICAgaG9sZGVyUmVmID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbyhjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CkBAIC03Miw3ICs4NSw3IEBAIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAgICAgQVNTRVJUKGhvbGRl
clJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBo
b2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoKTsKKyAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRj
aHBvaW50KGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnRfaAogI2RlZmluZSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKIAorI2lu
Y2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5o
IgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTQ2LDE1ICs0NywxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50IDogCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgKLSAgICAgICAgV2F0
Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIpCi0gICAgICAgIDogbV9ob2xkZXIo
aG9sZGVyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAg
ICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIsCiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiBuZXh0KQotICAg
ICAgICA6IG1faG9sZGVyKGhvbGRlcikKKyAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICwg
bV9ob2xkZXIoaG9sZGVyKQogICAgICAgICAsIG1fbmV4dChXVEY6Om1vdmUobmV4dCkpCiAgICAg
ewogICAgIH0KQEAgLTYyLDYgKzU5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoKTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludCogcHVzaCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSwKICAgICAgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBo
b2xkZXIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50PiYgaGVhZCk7CiAKQEAgLTY5LDYgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OwogICAgIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbyYgbV9ob2xkZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+IG1fbmV4dDsKIH07CkBAIC04MywxMSArODIsMTEg
QEAgcHVibGljOgogICAgIAogICAgIH5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oKTsK
ICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50
KCk7CisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KTsKICAgICAKICAgICBzdGF0aWMgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hw
b2ludCgKICAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhv
bGRlclJlZiwKLSAgICAgICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyAgICAg
ICAgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5KTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODc2
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwxMiBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVy
ZXM7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCk7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgogICAgIGNhc2UgYWNj
ZXNzX3Vuc2V0OgogICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byBy
ZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5CkBAIC03NSw4ICs3OCwxMCBAQCBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X2RpcmVjdDoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9u
LnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2Vk
KHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhl
YXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKQorICAgICAgICAg
ICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAgICAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
QEAgLTExMyw3ICsxMTQsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8g
UHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQ
dXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNE
aXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjMsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50
ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAgLTE3NSwxMCArMTc2
LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwog
ICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRk
V2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uKCkpCiAgICAgewogICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAgICAg
ICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcyk7CisgICAgICAgICAgICB3YXRjaHBvaW50
cywgY29kZUJsb2NrLCB0aGlzLCBjb25kaXRpb24pOwogICAgIH0KICAgICAKICAgICBpbnQ4X3Qg
YWNjZXNzVHlwZTsKQEAgLTIxNywyMyArMjE5LDEyIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
byB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0
cnVjdHVyZTsKICAgICAgICAgfSBnZXRCeUlkU2VsZjsKICAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByb3RvdHlwZVN0cnVjdHVy
ZTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgIH0gZ2V0QnlJZFByb3RvOwot
ICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50IDogMzE7Ci0gICAg
ICAgICAgICBib29sIGlzRGlyZWN0IDogMTsKLSAgICAgICAgfSBnZXRCeUlkQ2hhaW47Ci0gICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0Owog
ICAgICAgICB9IGdldEJ5SWRMaXN0OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICAgICAgdm9pZCogcmF3
Q29uZGl0aW9uU2V0OwogICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwogICAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RT
dHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NzksNyArMTc3OSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUg
c3VidGxlPwogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tpXS5h
bHRlcm5hdGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0
IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3
ZSdkCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCisg
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNv
bmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNl
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewpAQCAtMjA2
MCwzMCArMjA2MywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1
bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAg
ICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAg
ICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQg
PSBnZXRDYXNlLnNldCgpOwogICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAg
ICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1Zh
bHVlIGJhc2VGb3JMb2FkOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KQotICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlLm1f
dmFsdWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAg
IGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7
Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoZ2V0
Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7CiAg
ICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50
UmVzdWx0KSwKKyAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAog
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlv
bjo6RXF1aXZhbGVuY2UpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRj
aGFibGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFu
c2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKCktPmdldENvbmN1
cnJlbnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9rZXkub2Jq
ZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZz
ZXQpOworICAgIHNldC0+YWRkKCZtX3Byb3BlcnR5V2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpmaXJlKGNvbnN0IEZpcmVEZXRh
aWwmIGRldGFpbCkKK3sKKyAgICAvLyBPbmUgb2YgdGhlIHdhdGNocG9pbnRzIGZpcmVkLCBidXQg
dGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1ha2Ugc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlbSBhcmUK
KyAgICAvLyBpbiBhbnkgc2V0IGFueW1vcmUuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgYnkgYWxs
b3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRoZSB3YXRjaHBvaW50cworICAgIC8vIHdoZXJldmVyIGZy
b20gc2NyYXRjaC4KKyAgICBpZiAobV9zdHJ1Y3R1cmVXYXRjaHBvaW50LmlzT25MaXN0KCkpCisg
ICAgICAgIG1fc3RydWN0dXJlV2F0Y2hwb2ludC5yZW1vdmUoKTsKKyAgICBpZiAobV9wcm9wZXJ0
eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAgICAgICAgbV9wcm9wZXJ0eVdhdGNocG9pbnQucmVt
b3ZlKCk7CisgICAgCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9u
OjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkg
eworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpcmluZyB3YXRjaHBvaW50ICIsIFJh
d1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIp
OworICAgIH0KKyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50
KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDogIiwgZGV0YWlsKTsKKyAgICAKKyAg
ICBTdHJpbmdGaXJlRGV0YWlsIHN0cmluZ0RldGFpbChvdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsK
KyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgIFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6YXRpb24sICZzdHJp
bmdEZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKAorICAgIGNvbnN0IEZpcmVE
ZXRhaWwmIGRldGFpbCkKK3sKKyAgICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBPQkpFQ1RfT0ZGU0VU
T0YoCisgICAgICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCwgbV9z
dHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFp
bCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpQ
cm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBk
ZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAg
ICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fcHJvcGVydHlX
YXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4o
dGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRldGFpbCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUg
IldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSwKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIAor
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBt
X2tleTsgfQorICAgIAorICAgIHZvaWQgaW5zdGFsbCgpOworCitwcml2YXRlOgorICAgIGNsYXNz
IFN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgor
ICAgICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsK
KyAgICB9OworICAgIGNsYXNzIFByb3BlcnR5V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFByb3BlcnR5V2F0Y2hwb2ludCgpIHsgfQorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0
YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIGZpcmUoY29uc3QgRmlyZURl
dGFpbCYpOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgU3RydWN0dXJlV2F0Y2hwb2ludCBtX3N0cnVjdHVy
ZVdhdGNocG9pbnQ7CisgICAgUHJvcGVydHlXYXRjaHBvaW50IG1fcHJvcGVydHlXYXRjaHBvaW50
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2Nr
KGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1aXJlc1N0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXku
d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1
cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQodGhpcyk7Cit9CisKK3ZvaWQgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWls
KQoreworICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJl
V2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVy
KHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9
CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRh
dGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5n
RmlyZURldGFpbCBzdHJpbmdEZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisg
ICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVU
b1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWls
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dF9oCisjZGVmaW5lIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5j
bHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsK
K3B1YmxpYzoKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29u
c3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5Owor
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAzLDcgKzIwMywyNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNr
c0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJl
c3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29uc3Qg
Q2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNl
dChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSog
dmFsdWUpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2Rl
KiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFu
ZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAg
ICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29u
c3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5
T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKworICAgIC8vIENyZWF0ZSBhIHByZXNl
bmNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2VkIG9uIHNvbWUga25vd24gb2Zmc2V0IGFu
ZCBzdHJ1Y3R1cmUgc2V0LiBEb2VzIG5vdAorICAgIC8vIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0
aGUgY29uZGl0aW9uLCBidXQgaXQgbWF5IHJldHVybiBhIG51bGwgb25lIGlmIGl0IGVuY291bnRl
cnMgYSBjb250cmFkaWN0aW9uLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNl
TGlrZSgKKyAgICAgICAgSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQ
cm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgCisgICAgLy8gQXR0ZW1w
dCB0byB3YXRjaCB0aGUgcHJlc2VuY2Ugb2YgYSBwcm9wZXJ0eS4gSXQgd2lsbCB3YXRjaCB0aGF0
IHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50IGluIHRoZSBzYW1lCisgICAgLy8gd2F5IGFzIGluIGFs
bCBvZiB0aGUgc3RydWN0dXJlcyBpbiB0aGUgc2V0LiBJdCBtYXkgZW1pdCBjb2RlIGluc3RlYWQg
b2YganVzdCBzZXR0aW5nIGEgd2F0Y2hwb2ludC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhp
cyBhbGwgd29ya3Mgb3V0LgorICAgIGJvb2wgY2hlY2tQcmVzZW5jZUxpa2UoSlNPYmplY3QqIGtu
b3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0
dXJlU2V0Jik7CisgICAgdm9pZCBjaGVja1ByZXNlbmNlTGlrZShOb2RlKiBiYXNlLCBVbmlxdWVk
U3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICAK
KyAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlJZFZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9y
bSBvZiBQdXRCeUlkVmFyaWFudC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4K
KyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYpOworCisgICAgTm9kZSogc3RvcmUoTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmLCBOb2Rl
KiB2YWx1ZSk7CisgICAgICAgIAogICAgIHZvaWQgaGFuZGxlR2V0QnlJZCgKICAgICAgICAgaW50
IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsKQEAgLTIx
Miw3ICsyMzIsMzIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAgICAg
IE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25z
dCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCk7Ci0gICAgdm9pZCBlbWl0
Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsKKyAgICAKKyAgICAv
LyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhpcyBj
b25kaXRpb24uIFJldHVybnMgZmFsc2UgaWYgdGhlCisgICAgLy8gY29uZGl0aW9uIG5vIGxvbmdl
ciBob2xkcywgYW5kIHRoZXJlZm9yZSBubyByZWFzb25hYmxlIGNoZWNrIGNhbiBiZSBlbWl0dGVk
LgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICAK
KyAgICBHZXRCeU9mZnNldE1ldGhvZCBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhv
ZCk7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0IGEg
Y2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBJdCBtdXN0IGJlIGEgUHJlc2VuY2UKKyAgICAvLyBj
b25kaXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byBwcm9tb3RlIGEgUHJlc2VuY2UgY29uZGl0aW9u
IHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbi4KKyAgICAvLyBFbWl0cyBjb2RlIGZvciB0aGUg
bG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNvbmRpdGlvbiBndWFyZHMsIGFuZCByZXR1cm5zIGEgbm9k
ZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlmIHRo
ZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLgorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHBsYW5M
b2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgTm9kZSogbG9hZChTcGVj
dWxhdGVkVHlwZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgR2V0QnlPZmZzZXRN
ZXRob2QmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0
ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIE5vZGVUeXBlID0gR2V0QnlP
ZmZzZXQpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNrKCkgZm9yIGVhY2ggY29uZGl0aW9uIGlu
IHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVpdGhlciBlbWl0cyBjaGVja3Mgb3IgcmVnaXN0ZXJzCisg
ICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEgY29tYmluYXRpb24gb2YgdGhlIHR3bykgdG8gbWFrZSB0
aGUgY29uZGl0aW9ucyBob2xkLiBJZiBhbnkgb2YgdGhvc2UKKyAgICAvLyBjb25kaXRpb25zIGFy
ZSBubyBsb25nZXIgY2hlY2thYmxlLCByZXR1cm5zIGZhbHNlLgorICAgIGJvb2wgY2hlY2soY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICAKKyAgICAvLyBDYWxscyBjaGVj
aygpIGZvciB0aG9zZSBjb25kaXRpb25zIHRoYXQgYXJlbid0IHRoZSBzbG90IGJhc2UsIGFuZCBj
YWxscyBsb2FkKCkgZm9yIHRoZSBzbG90CisgICAgLy8gYmFzZS4gRG9lcyBhIGNvbWJpbmF0aW9u
IG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBjaGVjayBlbWlzc2lvbiB0byBndWFyZCB0
aGUKKyAgICAvLyBjb25kaXRpb25zLCBhbmQgZW1pdHMgY29kZSB0byBsb2FkIHRoZSB2YWx1ZSBm
cm9tIHRoZSBzbG90IGJhc2UuIFJldHVybnMgYSBub2RlIGNvbnRhaW5pbmcKKyAgICAvLyB0aGUg
bG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgYW55IG9mIHRoZSBjb25kaXRpb25zIHdlcmUg
bm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwbGFuTG9hZChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOworICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRl
ZFR5cGUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgTm9kZVR5cGUgPSBHZXRC
eU9mZnNldCk7CiAKICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICB2b2lkIGNs
ZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiArNzUxLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2Rl
KiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJvdXRl
IHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIEJ1dCBjdXJy
ZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJvbSB1c2luZyBlbWl0UHJv
cGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRoZQorICAgICAg
ICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEgd2Vha0pTQ29z
bnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25zdGFudChvYmplY3Qp
OwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAgICByZXR1cm4gb2Jq
ZWN0Tm9kZTsKQEAgLTIyMjEsMTUgKzIyNjksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSog
YmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCitOb2RlKiBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwg
Tm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAgICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgewotICAg
ICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQpKSB7Ci0gICAgICAgICAg
ICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOwotICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0Nv
bnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBOb2RlKiBwcm9w
ZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0yMjQ1LDYgKzIyODYsMTggQEAgTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIHJldHVybiBnZXRCeU9mZnNldDsKIH0K
IAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVU
eXBlIG9wKQoreworICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChK
U1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UtPmFz
SlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQsIG9mZnNldCkpIHsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29u
c3RhbnQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBoYW5kbGVHZXRCeU9m
ZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQsIG9wKTsKK30K
KwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCiB7
CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMjI2MiwxMCArMjMxNSwyOTkgQEAgTm9k
ZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2soY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sKKyAgICBpZiAobV9ncmFw
aC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJl
KCk7CisgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVy
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhZGRUb0dyYXBoKAorICAgICAg
ICBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSkpLAorICAgICAgICB3ZWFrSlNDb25zdGFudChjb25kaXRpb24ub2JqZWN0KCkp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJz
ZXI6OnByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCkKK3sKKyAgICBp
ZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGUK
KyAgICAgICAgJiYgbWV0aG9kLnByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0
Y2goKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29u
c3RhbnRQcm9wZXJ0eShtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCksIG1ldGhvZC5wcm90b3R5
cGUoKS0+c3RydWN0dXJlKCksIG1ldGhvZC5vZmZzZXQoKSkpCisgICAgICAgICAgICByZXR1cm4g
R2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKGNvbnN0YW50KSk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBtZXRob2Q7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5
dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJQbGFubmluZyBh
IGxvYWQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CisgICAgCisgICAgLy8gV2UgbWlnaHQgcHJvbW90
ZSB0aGlzIHRvIEVxdWl2YWxlbmNlLCBhbmQgYSBsYXRlciBERkcgcGFzcyBtaWdodCBhbHNvIGRv
IHN1Y2ggcHJvbW90aW9uCisgICAgLy8gZXZlbiBpZiB3ZSBmYWlsLCBidXQgZm9yIHNpbXBsaWNp
dHkgdGhpcyBjYW5ub3QgYmUgYXNrZWQgdG8gbG9hZCBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24u
CisgICAgLy8gTm9uZSBvZiB0aGUgY2xpZW50cyBvZiB0aGlzIG1ldGhvZCB3aWxsIHJlcXVlc3Qg
YSBsb2FkIG9mIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbnl3YXksCisgICAgLy8gYW5kIHN1
cHBvcnRpbmcgaXQgd291bGQgY29tcGxpY2F0ZSB0aGUgaGV1cmlzdGljcyBiZWxvdy4KKyAgICBS
RUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVz
ZW5jZSk7CisgICAgCisgICAgLy8gSGVyZSdzIHRoZSByYW5raW5nIG9mIGhvdyB0byBoYW5kbGUg
dGhpcywgZnJvbSBtb3N0IHByZWZlcnJlZCB0byBsZWFzdCBwcmVmZXJyZWQ6CisgICAgLy8KKyAg
ICAvLyAxKSBXYXRjaHBvaW50IG9uIGFuIGVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbmQgcmV0dXJu
IGEgY29uc3RhbnQgbm9kZSBmb3IgdGhlIGxvYWRlZCB2YWx1ZS4KKyAgICAvLyAgICBObyBvdGhl
ciBjb2RlIGlzIGVtaXR0ZWQsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBiYXNlIG9iamVjdCBp
cyBuZXZlciByZWdpc3RlcmVkLgorICAgIC8vICAgIEhlbmNlIHRoaXMgcmVzdWx0cyBpbiB6ZXJv
IGNvZGUgYW5kIHdlIHdvbid0IGpldHRpc29uIHRoaXMgY29tcGlsYXRpb24gaWYgdGhlIG9iamVj
dAorICAgIC8vICAgIHRyYW5zaXRpb25zLCBldmVuIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgd2F0Y2hh
YmxlIHJpZ2h0IG5vdy4KKyAgICAvLworICAgIC8vIDIpIE5lZWQgdG8gZW1pdCBhIGxvYWQsIGFu
ZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgZ29pbmcgdG8gYmUgd2F0Y2hl
ZCBieSB0aGUKKyAgICAvLyAgICBERkcgYW55d2F5IChpLmUuIGRmZ1Nob3VsZFdhdGNoKS4gV2F0
Y2ggdGhlIHN0cnVjdHVyZSBhbmQgZW1pdCB0aGUgbG9hZC4gRG9uJ3Qgd2F0Y2ggdGhlCisgICAg
Ly8gICAgY29uZGl0aW9uLCBzaW5jZSB0aGUgYWN0IG9mIHR1cm5pbmcgdGhlIGJhc2UgaW50byBh
IGNvbnN0YW50IGluIElSIHdpbGwgY2F1c2UgdGhlIERGRyB0bworICAgIC8vICAgIHdhdGNoIHRo
ZSBzdHJ1Y3R1cmUgYW55d2F5IGFuZCBkb2luZyBzbyB3b3VsZCBzdWJzdW1lIHdhdGNoaW5nIHRo
ZSBjb25kaXRpb24uCisgICAgLy8KKyAgICAvLyAzKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQg
dGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIHdhdGNoYWJsZSBidXQgbm90IGJ5
IHRoZQorICAgIC8vICAgIERGRyAoaS5lLiB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxW
YWxpZCgpIGFuZCAhZGZnU2hvdWxkV2F0Y2hJZlBvc3NpYmxlKCkpLiBXYXRjaAorICAgIC8vICAg
IHRoZSBjb25kaXRpb24sIGFuZCBlbWl0IGEgbG9hZC4KKyAgICAvLworICAgIC8vIDQpIE5lZWQg
dG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMg
bm90IHdhdGNoYWJsZS4gRW1pdCBhCisgICAgLy8gICAgc3RydWN0dXJlIGNoZWNrLCBhbmQgZW1p
dCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA1KSBUaGUgY29uZGl0aW9uIGRvZXMgbm90IGhvbGQu
IEdpdmUgdXAgYW5kIHJldHVybiBudWxsLgorICAgIAorICAgIC8vIEZpcnN0LCB0cnkgdG8gcHJv
bW90ZSBQcmVzZW5jZSB0byBFcXVpdmFsZW5jZS4gV2UgZG8gdGhpcyBiZWZvcmUgZG9pbmcgYW55
dGhpbmcgZWxzZQorICAgIC8vIGJlY2F1c2UgaXQncyB0aGUgbW9zdCBwcm9maXRhYmxlLiBBbHNv
LCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIHByZXNlbmNlIGlzIHdhdGNoYWJsZSBidXQKKyAg
ICAvLyB3ZSBkb24ndCB3YW50IHRvIHdhdGNoIGl0IHVubGVzcyBpdCBiZWNhbWUgYW4gZXF1aXZh
bGVuY2UgKHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4KKyAgICAvLyAoMSksICgyKSwgYW5k
ICgzKSBhYm92ZSkuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VDb25k
aXRpb24gPSBjb25kaXRpb24uYXR0ZW1wdFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIo
KTsKKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlvbikp
CisgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZDo6Y29uc3RhbnQobV9ncmFwaC5mcmVl
emUoZXF1aXZhbGVuY2VDb25kaXRpb24ucmVxdWlyZWRWYWx1ZSgpKSk7CisgICAgCisgICAgLy8g
QXQgdGhpcyBwb2ludCwgd2UnbGwgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgY29uZGl0aW9uJ3Mg
YmFzZSBhcyBhIGNvbnN0YW50IGluIERGRyBJUi4gT25jZQorICAgIC8vIHdlIGRvIHRoaXMsIHRo
ZSBmcm96ZW4gdmFsdWUgd2lsbCBoYXZlIGl0cyBvd24gaWRlYSBvZiB3aGF0IHRoZSBzdHJ1Y3R1
cmUgaXMuIFVzZSB0aGF0IGZyb20KKyAgICAvLyBub3cgb24ganVzdCBiZWNhdXNlIGl0J3MgbGVz
cyBjb25mdXNpbmcuCisgICAgRnJvemVuVmFsdWUqIGJhc2UgPSBtX2dyYXBoLmZyZWV6ZShjb25k
aXRpb24ub2JqZWN0KCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0
dXJlKCk7CisgICAgCisgICAgLy8gQ2hlY2sgaWYgdGhlIHN0cnVjdHVyZSB0aGF0IHdlJ3ZlIHJl
Z2lzdGVyZWQgbWFrZXMgdGhlIGNvbmRpdGlvbiBob2xkLiBJZiBub3QsIGp1c3QgZ2l2ZQorICAg
IC8vIHVwLiBUaGlzIGlzIGNhc2UgKDUpIGFib3ZlLgorICAgIGlmICghY29uZGl0aW9uLnN0cnVj
dHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gR2V0QnlPZmZz
ZXRNZXRob2QoKTsKKyAgICAKKyAgICAvLyBJZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoZWQgYnkg
dGhlIERGRyBhbHJlYWR5LCB0aGVuIGp1c3QgdXNlIHRoaXMgZmFjdCB0byBlbWl0IHRoZSBsb2Fk
LgorICAgIC8vIFRoaXMgaXMgY2FzZSAoMikgYWJvdmUuCisgICAgaWYgKHN0cnVjdHVyZS0+ZGZn
U2hvdWxkV2F0Y2goKSkKKyAgICAgICAgcmV0dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zm
c2V0TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsK
KyAgICAKKyAgICAvLyBJZiB3ZSBjYW4gd2F0Y2ggdGhlIGNvbmRpdGlvbiByaWdodCBub3csIHRo
ZW4gd2UgY2FuIGVtaXQgdGhlIGxvYWQgYWZ0ZXIgd2F0Y2hpbmcgaXQuIFRoaXMKKyAgICAvLyBp
cyBjYXNlICgzKSBhYm92ZS4KKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRp
b24pKQorICAgICAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2Q6
OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZzZXQoKSkpOworICAgIAorICAg
IC8vIFdlIGNhbid0IHdhdGNoIGFueXRoaW5nIGJ1dCB3ZSBrbm93IHRoYXQgdGhlIGN1cnJlbnQg
c3RydWN0dXJlIHNhdGlzZmllcyB0aGUgY29uZGl0aW9uLiBTbywKKyAgICAvLyBjaGVjayBmb3Ig
dGhhdCBzdHJ1Y3R1cmUgYW5kIHRoZW4gZW1pdCB0aGUgbG9hZC4KKyAgICBhZGRUb0dyYXBoKAor
ICAgICAgICBDaGVja1N0cnVjdHVyZSwgCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAgICAgICAgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcElu
Zm8oYmFzZSkpKTsKKyAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRo
b2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZzZXQoKSkpOworfQorCitO
b2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0
aG9kLAorICAgIE5vZGVUeXBlIG9wKQoreworICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgewor
ICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICByZXR1
cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLmNvbnN0YW50KCkpKTsKKyAg
ICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICBO
b2RlKiBiYXNlTm9kZSA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5wcm90
b3R5cGUoKSkpOworICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwg
YmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOworICAgIH0K
KyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAvLyBXaWxsIG5ldmVy
IHNlZSB0aGlzIGZyb20gcGxhbkxvYWQoKS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIE5vZGVUeXBlIG9wKQorewor
ICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvbik7CisgICAg
cmV0dXJuIGxvYWQocHJlZGljdGlvbiwgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShjb25k
aXRpb24udWlkKCkpLCBtZXRob2QsIG9wKTsKK30KKworYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hl
Y2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAg
ICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlv
blNldCkgeworICAgICAgICBpZiAoIWNoZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitHZXRCeU9mZnNldE1ldGhv
ZCBCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygi
Y29uZGl0aW9uU2V0ID0gIiwgY29uZGl0aW9uU2V0LCAiXG4iKTsKKyAgICAKKyAgICBHZXRCeU9m
ZnNldE1ldGhvZCByZXN1bHQ7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24u
a2luZCgpKSB7CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7IC8vIFNob3VsZCBvbmx5IHNlZSBleGFj
dGx5IG9uZSBvZiB0aGVzZS4KKyAgICAgICAgICAgIHJlc3VsdCA9IHBsYW5Mb2FkKGNvbmRpdGlv
bik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0
QnlPZmZzZXRNZXRob2QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgaWYgKCFjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgICAgIHJldHVy
biBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlQoISFyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIE5v
ZGVUeXBlIG9wKQoreworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNv
bmRpdGlvblNldCk7CisgICAgcmV0dXJuIGxvYWQoCisgICAgICAgIHByZWRpY3Rpb24sCisgICAg
ICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29u
ZGl0aW9uKCkudWlkKCkpLAorICAgICAgICBtZXRob2QsIG9wKTsKK30KKworT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gQnl0ZUNvZGVQYXJzZXI6OnByZXNlbmNlTGlrZSgKKyAgICBKU09iamVjdCog
a25vd25CYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVD
aGVjayh2ZWN0b3JbaV0uY29uc3RhbnQoKSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAgICBp
ZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
KCk7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBQcm9wZXJ0eU9mZnNldCBmaXJzdE9m
ZnNldCA9IHNldFswXS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgaWYg
KGZpcnN0T2Zmc2V0ICE9IG9mZnNldCkKKyAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNldC5zaXplKCk7ICsraSkg
eworICAgICAgICB1bnNpZ25lZCBvdGhlckF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG90aGVyT2Zmc2V0ID0gc2V0W2ldLT5nZXRDb25jdXJyZW50bHkodWlkLCBvdGhlckF0dHJp
YnV0ZXMpOworICAgICAgICBpZiAob3RoZXJPZmZzZXQgIT0gb2Zmc2V0IHx8IG90aGVyQXR0cmli
dXRlcyAhPSBhdHRyaWJ1dGVzKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uKCk7CisgICAgfQorICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJl
c2VuY2VXaXRob3V0QmFycmllcihrbm93bkJhc2UsIHVpZCwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsK
K30KKworYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2tQcmVzZW5jZUxpa2UoCisgICAgSlNPYmpl
Y3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICByZXR1cm4gY2hlY2socHJlc2Vu
Y2VMaWtlKGtub3duQmFzZSwgdWlkLCBvZmZzZXQsIHNldCkpOworfQorCit2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpjaGVja1ByZXNlbmNlTGlrZSgKKyAgICBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0
KQoreworICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxKU09iamVjdCo+KCkpIHsKKyAgICAgICAgaWYgKGNoZWNrUHJlc2VuY2VMaWtlKGtub3du
QmFzZSwgdWlkLCBvZmZzZXQsIHNldCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHNldCkpLCBiYXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CitO
b2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
LCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlw
ZSYgdmFyaWFudCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgYmFja3dhcmRzIHByb3BhZ2F0aW9uIGtu
b3dzIHRoYXQgd2UndmUgdXNlZCBiYXNlLgorICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7
CisgICAgCisgICAgYm9vbCBuZWVkU3RydWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIAorICAgIGlm
IChKU09iamVjdCoga25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVj
dCo+KCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBj
aGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMK
KyAgICAgICAgLy8gaWYgdGhlIGJhc2UncyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51
bWJlcl07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25T
ZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Un
cmUgbG9hZGluZyBmcm9tIGEgcHJvdG90eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhh
dmUgdGhlCisgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCisgICAg
ICAgICAgICAgICAgLy8gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUgcHJvdG90
eXBlIChpdCB3b3VsZCBiZSBoaWxhcmlvdXNseSByYXJlIGlmIHRoZXkKKyAgICAgICAgICAgICAg
ICAvLyBkaWRuJ3QpLiBOb3RlIHRoYXQgd2UgYXJlIHJlbHlpbmcgb24gc3RydWN0dXJlU2V0KCkg
aGF2aW5nIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0CisgICAgICAgICAgICAgICAgLy8gd2ls
bCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5SWRTdGF0dXMvUHV0QnlJ
ZFN0YXR1cyB3b3JrLgorICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSB2YXJp
YW50LnN0cnVjdHVyZVNldCgpWzBdLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKTsKKyAgICAgICAg
ICAgICAgICBib29sIGFsbEFncmVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKVtpXS0+c3RvcmVkUHJv
dG90eXBlT2JqZWN0KCkgIT0gcHJvdG90eXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
bGxBZ3JlZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGFs
bEFncmVlKSB7CisgICAgICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNv
bmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIo
CisgICAgICAgICAgICAgICAgICAgICAgICBrbm93bkJhc2UsIHVpZCwgcHJvdG90eXBlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAg
ICAgICAgICBuZWVkU3RydWN0dXJlQ2hlY2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UncmUg
bG9hZGluZyBkaXJlY3RseSBmcm9tIGJhc2UuIFdlIGNhbiBhdm9pZCBhbGwgb2YgdGhlIGNvZGUg
dGhhdCBmb2xsb3dzCisgICAgICAgICAgICAgICAgLy8gaWYgd2UgY2FuIHByb3ZlIHRoYXQgdGhl
IHByb3BlcnR5IGlzIGEgY29uc3RhbnQuIE90aGVyd2lzZSwgd2UgdHJ5IHRvIHByb3ZlIHRoYXQg
dGhlCisgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkgaXMgd2F0Y2hhYmx5IHByZXNlbnQsIGlu
IHdoaWNoIGNhc2Ugd2UgZ2V0IHJpZCBvZiB0aGUgc3RydWN0dXJlIGNoZWNrLgorCisgICAgICAg
ICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2VDb25kaXRpb24gPQorICAg
ICAgICAgICAgICAgICAgICBwcmVzZW5jZUxpa2Uoa25vd25CYXNlLCB1aWQsIHZhcmlhbnQub2Zm
c2V0KCksIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOworCisgICAgICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VDb25kaXRpb24gPQorICAgICAgICAgICAgICAg
ICAgICBwcmVzZW5jZUNvbmRpdGlvbi5hdHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFy
cmllcigpOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGVxdWl2
YWxlbmNlQ29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0
YW50KGVxdWl2YWxlbmNlQ29uZGl0aW9uLnJlcXVpcmVkVmFsdWUoKSk7CisKKyAgICAgICAgICAg
ICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgYXR0cmlidXRlcyB3ZSdyZSBpbnRlcmVzdGVkIGluLiBI
b3BlZnVsbHkgYWxsIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZQorICAgICAgICAgICAgICAgIC8v
IHN0cnVjdHVyZSBzZXQgYWdyZWUuCisgICAgICAgICAgICAgICAgaWYgKGNoZWNrKHByZXNlbmNl
Q29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgbmVlZFN0cnVjdHVyZUNoZWNrID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmVlZFN0cnVj
dHVyZUNoZWNrKQorICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKKyAg
ICAKKyAgICBTcGVjdWxhdGVkVHlwZSBsb2FkUHJlZGljdGlvbjsKKyAgICBOb2RlVHlwZSBsb2Fk
T3A7CisgICAgaWYgKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgeworICAgICAgICBsb2FkUHJl
ZGljdGlvbiA9IFNwZWNDZWxsT3RoZXI7CisgICAgICAgIGxvYWRPcCA9IEdldEdldHRlclNldHRl
ckJ5T2Zmc2V0OworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gcHJlZGlj
dGlvbjsKKyAgICAgICAgbG9hZE9wID0gR2V0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIGxvYWRlZFZhbHVlOworICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5
KCkpCisgICAgICAgIGxvYWRlZFZhbHVlID0gbG9hZChsb2FkUHJlZGljdGlvbiwgdmFyaWFudC5j
b25kaXRpb25TZXQoKSwgbG9hZE9wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUg
PSBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCB2
YXJpYW50LnN0cnVjdHVyZVNldCgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgp
LAorICAgICAgICAgICAgbG9hZE9wKTsKKyAgICB9CisKKyAgICByZXR1cm4gbG9hZGVkVmFsdWU7
Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJl
cGxhY2UpOworCisgICAgY2hlY2tQcmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVy
cygpW2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsK
KyAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5v
ZmZzZXQoKSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KApAQCAtMjI4OCwxOCArMjYzMCwzNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRC
eUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwotICAgIAorICAgICAgICBWZWN0b3I8TXVsdGlH
ZXRCeU9mZnNldENhc2UsIDI+IGNhc2VzOworICAgICAgICAKICAgICAgICAgLy8gMSkgRW1pdCBw
cm90b3R5cGUgc3RydWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0
IG9mIG1heWJlIG5vdCBiZQogICAgICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21l
IHJhcmVseSBleGVjdXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAg
ICAgICAgIC8vICAgIG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2lu
dGFibGUuCi0gICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1
cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0Q2hlY2tz
KGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAg
CisgICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBnZXRCeUlkU3Rh
dHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmNvbmRpdGlvblNldCgp
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAg
ICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoCisgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYW50LnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlPZmZz
ZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgR2V0QnlPZmZz
ZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQodmFyaWFudC5jb25kaXRpb25TZXQoKSk7CisgICAg
ICAgICAgICBpZiAoIW1ldGhvZCkgeworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChn
ZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFz
ZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKE11bHRpR2V0QnlPZmZzZXRDYXNlKHZhcmlhbnQu
c3RydWN0dXJlU2V0KCksIG1ldGhvZCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90
aWNlSW5saW5lZEdldEJ5SWQoKTsKKyAgICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0
QnlPZmZzZXQKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1f
bXVsdGlHZXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gZ2V0
QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT5jYXNlcyA9IGNhc2VzOwogICAg
ICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAogICAgICAgICAgICAgYWRk
VG9HcmFwaChNdWx0aUdldEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgYmFzZSkpOwpAQCAtMjMwOSwzMCArMjY2OSwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeUlkKAogICAgIEFTU0VSVChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0g
MSk7CiAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAg
ICAgICAgICAgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKHByZWRpY3Rpb24sIGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgIGlmICghbG9hZGVkVmFsdWUpIHsK
KyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAg
ICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5m
byhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5u
b3RpY2VJbmxpbmVkR2V0QnlJZCgpOwogICAgIAotICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJh
c2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFz
ZSk7Ci0gICAgCi0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwotCi0g
ICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICBiYXNlID0gd2Vha0pTQ29u
c3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwotICAgIAotICAgIC8vIFVubGVzcyB3ZSB3
YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3
ODMsIHdlIG5lZWQgdG8KLSAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2lu
YWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCi0gICAgLy8g
YWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRo
ZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIg
dGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UuCi0gICAg
aWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQotICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9y
aWdpbmFsQmFzZSk7Ci0gICAgCi0gICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9m
ZnNldCgKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6
IHByZWRpY3Rpb24sCi0gICAgICAgIGJhc2UsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCBpZGVu
dGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAgICB2YXJpYW50LmNhbGxMaW5r
U3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICAK
ICAgICBpZiAoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgewogICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjM2OSw3ICsyNzE1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0
QnlJZCgKICAgICAvLyAgICBzaW5jZSB3ZSBvbmx5IHJlYWxseSBjYXJlIGFib3V0ICd0aGlzJyBp
biB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8gdGFrZSB0aGF0CiAgICAgLy8gICAg
c2hvcnRjdXQuCiAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFj
azo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdp
c3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAg
ICAKICAgICBoYW5kbGVDYWxsKAogICAgICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElu
bGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLApA
QCAtMjQwMywxNyArMjc0OSwyMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
bV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigp
LT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwotICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVj
dCkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewogICAgICAgICAgICAgICAgIGlm
IChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4
XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24o
KSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5
SWQoKTsKKyAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9n
cmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50
cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51
bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CkBAIC0yNDI2LDggKzI3NzUsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5k
KCkpIHsKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJp
YW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAgICAgIHN0
b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24o
KS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQzNSw3ICsy
NzgzLDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAg
Y2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewogICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRT
dHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50
Q2hlY2tzKCkpOworICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7
CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwg
cHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKQEAgLTI0
ODYsMTkgKzI4MzcsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAg
ICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNlOwotICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFw
aCgKLSAgICAgICAgICAgIENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIGVt
aXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25z
dGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBs
b2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgU3BlY0NlbGxPdGhl
ciwgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlh
bnQub2Zmc2V0KCksCi0gICAgICAgICAgICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAg
ICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlm
aWVyTnVtYmVyLCB2YXJpYW50KTsKKyAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgeworICAgICAg
ICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRT
dGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgTm9kZSogc2V0dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZh
bHVlKTsKICAgICAgICAgCkBAIC0yNTI2LDcgKzI4NjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rl
ck9mZnNldCkpLnRvTG9jYWwoKSk7CiAgICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSBy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0
ZU5ha2VkU2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyks
IGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihu
ZXh0UmVnaXN0ZXIrKyksIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAgICAgICAg
IGhhbmRsZUNhbGwoCkBAIC0zNDY2LDYgKzM4MDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigp
OworCiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKHN0cnVjdHVyZSwgdWlkKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVz
LnN0YXRlKCkgIT0gR2V0QnlJZFN0YXR1czo6U2ltcGxlCiAgICAgICAgICAgICAgICAgICAgIHx8
IHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEKQEAgLTM0NzMsOSArMzgxNywxMSBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRCeUlkRmx1c2gsIE9wSW5mbyhp
ZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQoVmlydHVhbFJlZ2lzdGVy
KHNjb3BlKSkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJl
Q2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkub25seVN0cnVjdHVy
ZSgpKTsKKworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSB3ZWFrSlNDb25zdGFudChnbG9i
YWxPYmplY3QpOworICAgICAgICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGxvYWQocHJlZGljdGlv
biwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdHVzWzBdKTsKICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVk
aWN0aW9uLCBiYXNlLCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJOdW1iZXIs
IG9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHJl
c3VsdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjYXNlIEdsb2JhbFZhcjoKQEAgLTM2MTksMTAgKzM5NjUsOCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
UHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNj
b3BlKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVz
WzBdLnN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwotICAgICAgICAg
ICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
Z2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVQdXRC
eU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNl
dD4ob3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CisgICAgICAgICAgICAg
ICAgTm9kZSogYmFzZSA9IHdlYWtKU0NvbnN0YW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAg
ICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdHVzWzBdLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKHZhbHVlKSkpOwogICAgICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUg
dW50aWwgYWZ0ZXIgcHV0LgogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24g
MTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODksNiArODksOSBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRl
UmVmZXJlbmNlcyhjb25zCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2so
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgfQog
ICAgIH0KKyAgICAKKyAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCA6IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQt
PmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lm
IEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5j
bHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5j
bHVkZSAiREZHSnVtcFJlcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOwogICAgIEJh
ZzxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOworICAgIEJhZzxB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7
CisgICAgQmFnPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxh
Y2VtZW50PiBqdW1wUmVwbGFjZW1lbnRzOwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29t
cGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4NzYwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMjEgKzI5NCwyMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBv
dmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAgICAgICAg
ICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNv
bnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9
IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50
LnN0cnVjdHVyZVNldCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJpYW50cy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07
CisgICAgICAgICAgICAgICAgICAgIGdldENhc2Uuc2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChnZXRDYXNlLnNldCgpLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS5jYXNlc1tpLS1dID0gZGF0YS5jYXNlcy5sYXN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLnJlbW92ZUxhc3QoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChk
YXRhLnZhcmlhbnRzLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhc2Vz
LnNpemUoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBkYXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlk
ZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleElu
QmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZGF0YS5jYXNlc1swXSwgZGF0YS5pZGVudGlmaWVyTnVt
YmVyKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTM3NCw4ICszNzMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25zdGFudENoZWNrcygpLmlzRW1wdHkoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJv
dG90eXBlIGNhc2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4NgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0zOTIsNyArMzkwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZz
ZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgpOwotICAg
ICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gc3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJp
YW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvTXVsdGlH
ZXRCeU9mZnNldChkYXRhKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTQz
Miw5ICs0MzUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlh
bnRzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIGFkZENoZWNrcyhvcmlnaW4sIGluZGV4
SW5CbG9jaywgc3RhdHVzW2ldLmNvbnN0YW50Q2hlY2tzKCkpOworCisgICAgICAgICAgICAgICAg
Ym9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1
Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwg
Y29uZGl0aW9uLm9iamVjdCgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAg
ZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0s
IGlkZW50aWZpZXJOdW1iZXIpOwpAQCAtNTI5LDQxICs1NTQsNzIgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRH
ZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3Ry
YWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgeworICAgICAgICAvLyBXaGVuIHdlIGdl
dCB0byBoZXJlIHdlIGhhdmUgYWxyZWFkeSBlbWl0dGVkIGFsbCBvZiB0aGUgcmVxdWlzaXRlIGNo
ZWNrcyBmb3IgZXZlcnl0aGluZy4KKyAgICAgICAgLy8gU28sIHdlIGp1c3QgbmVlZCB0byBlbWl0
IHdoYXQgdGhlIG1ldGhvZCBvYmplY3QgdGVsbHMgdXMgdG8gZW1pdC4KICAgICAgICAgCisgICAg
ICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZ2V0Q2FzZS5z
ZXQoKSk7CisKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRo
b2QoKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgICAgIG1f
Z3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbWV0aG9kLmNvbnN0YW50KCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRo
b2Q6OkxvYWQ6CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2Rl
LCBub2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBt
X2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIG5vZGUtPm9yaWdpbiwgbWV0aG9kLnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRCeU9mZnNldCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVkZ2UoY2hp
bGQsIEtub3duQ2VsbFVzZSksIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0R2V0QnlP
ZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZh
bHVlJiBiYXNlVmFsdWUsIGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyKQogICAgIHsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2Rl
LT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAKICAg
ICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50
LnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZUZvckxvYWQ7
Ci0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2VG
b3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGJhc2VGb3JMb2FkID0gYmFzZVZhbHVlLm1fdmFsdWU7Ci0gICAgICAgIGlmIChKU1ZhbHVl
IHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2FkLCB2YXJp
YW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgLy8gV2Ug
YXJlbid0IHNldCB1cCB0byBoYW5kbGUgcHJvdG90eXBlIHN0dWZmLgorICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKwor
ICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eShiYXNlVmFsdWUubV92YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgdmFyaWFudC5vZmZz
ZXQoKSkpIHsKICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9n
cmFwaC5mcmVlemUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4SW5CbG9j
aywgb3JpZ2luLCB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBjaGlsZEVk
Z2UgPSBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVtaXRHZXRC
eU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwg
dmFyaWFudC5vZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0
KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAg
ICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAogICAgICAg
ICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9m
ZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNl
dCkpCiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1
dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG5vZGUtPm9yaWdpbiwgY2hpbGRFZGdlKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gKm1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS5vZmZzZXQgPSB2
YXJpYW50Lm9mZnNldCgpOworICAgICAgICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAgICAg
ZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgCiAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CkBA
IC02NDMsMTUgKzY5OSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnRDaGVjayhpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGFkZENoZWNrcygKLSAgICAgICAgTm9kZU9yaWdpbiBvcmln
aW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1Zl
Y3RvciYgY2hlY2tzKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNo
ZWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNo
ZWNrKAotICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBjaGVja3NbaV0uY29u
c3RhbnQoKSwgY2hlY2tzW2ldLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAg
IHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNp
Z25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgewogICAgICAgICBpZiAobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1
cmUoKSkgPT0gU3RydWN0dXJlUmVnaXN0ZXJlZEFuZFdhdGNoZWQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZp
c2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRh
cHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyog
dmlldywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAgICBXYXRj
aHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwog
ICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hwb2ludCA9
CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpjb2RlQmxv
Y2stPnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0Y2hwb2lu
dCk7CkBAIC00NSwxMCArNDYsMjMgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRh
cHRvcjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQq
IHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGlu
ZmVycmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2stPmFkZENv
bnN0YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJl
YWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBh
d2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQp
OworICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9j
aykpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkgewor
ICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBjb21tb24u
YWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxv
Y2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNv
bW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmlu
c3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hwb2ludHM6
OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBEZXNpcmVk
V2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5
KHZpZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRl
cihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxk
V2F0Y2goKSkKQEAgLTg4LDYgKzEwNyw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFs
bHlBZGQoQ29kZUIKICAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9u
RGF0YSk7CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25E
YXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEp
OworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1v
bkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNv
bnN0CkBAIC05NSw3ICsxMTUsMTggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxs
VmFsaWQoKQogICAgIHJldHVybiBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1f
aW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5h
cmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7
CisgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKK30KKwordm9pZCBEZXNpcmVk
V2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJEZXNpcmVkIHdhdGNocG9pbnRzOlxu
Iik7CisgICAgb3V0LnByaW50KCIgICAgV2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9z
ZXRzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5saW5lIHdhdGNocG9p
bnQgc2V0czogIiwgaW5Db250ZXh0KG1faW5saW5lU2V0cywgY29udGV4dCksICJcbiIpOworICAg
IG91dC5wcmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRW
YWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6
ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnBy
aW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0
aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDkgQEAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRW
YWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8
d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQwLDMzICs0Miw1NiBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXN0cnVjdCBHZW5lcmljU2V0QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9j
ayosIFQgc2V0LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorc3RydWN0IFNldFBvaW50ZXJBZGFw
dG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBD
b21tb25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQod2F0Y2hw
b2ludCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNv
ZGVCbG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBz
ZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KKyAgICBzdGF0aWMgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIFQgc2V0LCBEdW1wQ29udGV4dCopCisg
ICAgeworICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihzZXQpKTsKKyAgICB9CiB9OwogCiBz
dHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRpYyBib29s
IGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwogICAg
IH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEluZmVy
cmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIER1bXBDb250ZXh0KikKKyAgICB7CisgICAgICAgIG91
dC5wcmludChSYXdQb2ludGVyKGluZmVycmVkVmFsdWUpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3Qg
QXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMg
dm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRhJik7CiAg
ICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3
KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0gICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBEdW1wQ29udGV4
dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoSlNWYWx1ZSh2
aWV3KSwgY29udGV4dCkpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wg
aGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisg
ICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1dhdGNoYWJsZSgpOworICAgIH0KKyAgICBzdGF0
aWMgdm9pZCBkdW1wSW5Db250ZXh0KAorICAgICAgICBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7
CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7CiAgICAgfQogfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3Ig
PSBHZW5lcmljU2V0QWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9y
PFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2ludFNldFR5
cGUsIGJvb2w+IFN0YXRlTWFwOwpAQCAtODcsNyArMTEyLDcgQEAgcHVibGljOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1
dG8mIHNldCA6IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNl
dCwgY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIEFkYXB0
b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fcmVh
bGx5QWRkZWQgPSB0cnVlOwogICAgIH0KQEAgLTEwNyw2ICsxMzIsMTUgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9zZXRzLmNvbnRhaW5zKHNldCk7CiAgICAgfQogCisgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKGNvbnN0IFdh
dGNocG9pbnRTZXRUeXBlJiBlbnRyeSA6IG1fc2V0cykgeworICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmR1bXBJbkNvbnRleHQob3V0LCBlbnRyeSwg
Y29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgSGFzaFNldDxXYXRj
aHBvaW50U2V0VHlwZT4gbV9zZXRzOwogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTEyMiw2
ICsxNTYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFsdWUqKTsK
ICAgICB2b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAorICAgIC8vIEl0
J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3Jh
cGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0Mg
bWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgorICAgIHZvaWQgYWRkTGF6
aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9vbCBjb25z
aWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBD
b21tb25EYXRhJik7CkBAIC0xNDQsMTIgKzE4MiwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAgfQorICAgIGJvb2wg
aXNXYXRjaGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CisgICAg
fQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBj
b25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6
CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwog
ICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+IG1faW5s
aW5lU2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJ
bmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJl
ZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2lu
dEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRv
cj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJl
bmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTAsNyArNTAsMTQgQEAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp+RGVzaXJlZFdlYWtS
ZWZlcgogCiB2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTQ2VsbCogY2Vs
bCkKIHsKLSAgICBtX3JlZmVyZW5jZXMuYWRkKGNlbGwpOworICAgIGlmIChjZWxsKQorICAgICAg
ICBtX3JlZmVyZW5jZXMuYWRkKGNlbGwpOworfQorCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNl
czo6YWRkTGF6aWx5KEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQor
ICAgICAgICBhZGRMYXppbHkodmFsdWUuYXNDZWxsKCkpOwogfQogCiBib29sIERlc2lyZWRXZWFr
UmVmZXJlbmNlczo6Y29udGFpbnMoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lv
biAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IAogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKU1ZhbHVlOwog
Y2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIApAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6
CiAgICAgfkRlc2lyZWRXZWFrUmVmZXJlbmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXppbHkoSlND
ZWxsKik7CisgICAgdm9pZCBhZGRMYXppbHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250YWlucyhK
U0NlbGwqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODc2MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU3LDggKzI1Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QKICAgICBpZiAobm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAg
ICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCAieyIsIGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBj
b250ZXh0KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5j
YXNlc1tpXSwgY29udGV4dCkpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9m
ZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUt
Pm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CkBAIC01MzAsNiArNTMwLDggQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBpZiAodmFsdWUtPnBvaW50c1Rv
SGVhcCgpKQogICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5Db250ZXh0KCp2YWx1ZSwg
Jm15Q29udGV4dCksICJcbiIpOwogICAgIH0KKworICAgIG91dC5wcmludChpbkNvbnRleHQod2F0
Y2hwb2ludHMoKSwgJm15Q29udGV4dCkpOwogICAgIAogICAgIGlmICghbXlDb250ZXh0LmlzRW1w
dHkoKSkgewogICAgICAgICBteUNvbnRleHQuZHVtcChvdXQpOwpAQCAtODQ4LDYgKzg1MCwzMCBA
QCB2b2lkIEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQogfQogCiti
b29sIEdyYXBoOjp3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5KQoreworICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3Qo
KSk7CisgICAgaWYgKGtleS5oYXNQcm90b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndlYWtSZWZl
cmVuY2VzLmFkZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgIGlmIChrZXkuaGFzUmVxdWly
ZWRWYWx1ZSgpKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5y
ZXF1aXJlZFZhbHVlKCkpOworICAgIAorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHko
a2V5KTsKKworICAgIGlmIChrZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5j
ZSkKKyAgICAgICAgbV9zYWZlVG9Mb2FkLmFkZChzdGQ6Om1ha2VfcGFpcihrZXkub2JqZWN0KCks
IGtleS5vZmZzZXQoKSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBo
Ojppc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sK
KyAgICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9m
ZnNldCkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlx
dWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2Rl
TGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTAyMCw4ICsxMDQ2LDEyIEBAIEpTVmFsdWUg
R3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENv
bnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3Ry
dWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpCisgICAgaWYgKHN0cnVj
dHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBJZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBk
byBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbgorICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFu
dC1mb2xkIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NzI3MQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0K
ICAgICAKICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBzdHJ1Y3R1cmUu
c2V0KCksIG9mZnNldCk7CiB9CkBAIC0xMTY3LDE3ICsxMTk3LDkgQEAgdm9pZCBHcmFwaDo6dmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50LnN0cnVj
dHVyZVNldCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6
ZSgpOyBqLS07KQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5UG9pbnRlcihzZXRbal0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERv
bid0IG5lZWQgdG8gbWFyayBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2Ug
dGhhdCB3b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBp
bnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gbWFyayB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlH
ZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRz
IGRpZCB0aGF0LgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtT
dGF0dXMoKSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IGdldENhc2Uuc2V0KCkp
CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9u
bHlQb2ludGVyKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSwxNSBAQCBwdWJsaWM6
CiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5p
ZGVudGlmaWVyczsgfQogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJl
dHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlm
IHRoZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEg
UHJlc2VuY2UgY29uZGl0aW9uLAorICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBx
dWVyeSBpZiB0aGUgY29uZGl0aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mg
a25vd3MKKyAgICAvLyB3aGF0J3MgZ29pbmcgb24uCisgICAgYm9vbCB3YXRjaENvbmRpdGlvbihj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gQ2hlY2tzIGlmIGl0J3Mg
a25vd24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zm
c2V0IGlzIGZpbmUuIFRoaXMgaXMKKyAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBj
b25kaXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4KKyAgICBib29sIGlzU2Fm
ZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOworICAgIAogICAgIEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkBAIC04NDQs
NiArODUzLDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1f
aW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVf
cHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIEhhc2hN
YXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5dGVjb2Rl
S2lsbHM7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9mZnNldD4+
IG1fc2FmZVRvTG9hZDsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0
TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFs
TG9vcHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011
bHRpR2V0QnlPZmZzZXREYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZzZXREYXRh
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2lu
ZCwgIjoiKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAg
ICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3Rh
bnQ6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChjb25zdGFudCgpLCBj
b250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5w
cmludChvZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9tUHJvdG90
eXBlOgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCksICJAIiwgcG9pbnRlckR1bXBJbkNvbnRl
eHQocHJvdG90eXBlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwor
dm9pZCBHZXRCeU9mZnNldE1ldGhvZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKwordm9pZCBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSwg
IjoiLCBpbkNvbnRleHQobV9tZXRob2QsIGNvbnRleHQpKTsKK30KKwordm9pZCBNdWx0aUdldEJ5
T2Zmc2V0Q2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNv
bnRleHQob3V0LCBudWxscHRyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgR2V0QnlPZmZzZXRNZXRob2Q6OktpbmQga2luZCkK
K3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZh
bGlkOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNv
bnN0YW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpM
b2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBvdXQucHJp
bnQoIkxvYWRGcm9tUHJvdG90eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR011bHRpR2V0QnlPZmZzZXREYXRhX2gK
KyNkZWZpbmUgREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgRnJvemVuVmFsdWU7CisKK2NsYXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBDb25zdGFudCwK
KyAgICAgICAgTG9hZCwKKyAgICAgICAgTG9hZEZyb21Qcm90b3R5cGUKKyAgICB9OworICAgIAor
ICAgIEdldEJ5T2Zmc2V0TWV0aG9kKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFudChGcm96
ZW5WYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29u
c3RhbnQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAg
IHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gTG9hZDsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1l
dGhvZCBsb2FkRnJvbVByb3RvdHlwZShGcm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBMb2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAgcmVzdWx0
LnUubG9hZC5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51LmxvYWQub2Zm
c2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkOyB9CisgICAg
CisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgRnJv
emVuVmFsdWUqIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gdS5jb25zdGFudDsKKyAgICB9CisgICAgCisg
ICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5wcm90
b3R5cGU7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWQgfHwga2luZCgpID09IExvYWRGcm9t
UHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAg
IHVuaW9uIHsKKyAgICAgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50OworICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBLaW5kIG1f
a2luZDsKK307CisKK2NsYXNzIE11bHRpR2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoKKyAgICBN
dWx0aUdldEJ5T2Zmc2V0Q2FzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0aUdldEJ5
T2Zmc2V0Q2FzZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgY29uc3QgR2V0QnlPZmZzZXRNZXRo
b2QmIG1ldGhvZCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV9tZXRob2QobWV0
aG9kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzZXQoKSB7IHJldHVy
biBtX3NldDsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zZXQ7IH0KKyAgICBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXRob2Q7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIFN0cnVjdHVyZVNldCBtX3NldDsKKyAgICBHZXRCeU9mZnNl
dE1ldGhvZCBtX21ldGhvZDsKK307CisKK3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7Cisg
ICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRCeU9mZnNl
dENhc2UsIDI+IGNhc2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1l
c3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6
OkdldEJ5T2Zmc2V0TWV0aG9kOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZzZXREYXRh
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NzYw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZH
RXBvY2guaCIKICNpbmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR011bHRp
R2V0QnlPZmZzZXREYXRhLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAi
REZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwxMSArNjYs
NiBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXI7CiB9OwogCi1zdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgewotICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50
czsKLX07Ci0KIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlcjsKICAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsMTAgKzMyNCwxOCBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBj
YXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5v
ZmZzZXQ7CisKKyAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0
cnVjdHVyZXNBcmVXYXRjaGVkKSB7CisgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFz
ZSA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgewor
ICAgICAgICAgICAgICAgIGlmIChncmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBz
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAgaWYgKHZh
bHVlLmlzSW5maW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZzZXQ7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAg
ICAgaWYgKCF2YWx1ZVtpXS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTMzNyw0MiArMzQ1LDI4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShB
YnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0
OiB7CiAgICAgICAgIC8vIFdlIGNhbid0IGFsd2F5cyBndWFyYW50ZWUgdGhhdCB0aGUgTXVsdGlH
ZXRCeU9mZnNldCBpcyBzYWZlIHRvIGV4ZWN1dGUgaWYgaXQKLSAgICAgICAgLy8gY29udGFpbnMg
bG9hZHMgZnJvbSBwcm90b3R5cGVzLiBXZSBrbm93IHRoYXQgaXQgd29uJ3QgbG9hZCBmcm9tIHRo
b3NlIHByb3RvdHlwZXMgaWYKLSAgICAgICAgLy8gd2Ugd2F0Y2ggdGhlIG11dGFiaWxpdHkgb2Yg
dGhlIHByb3BlcnRpZXMgYmVpbmcgbG9hZGVkLiBTbywgaGVyZSB3ZSB0cnkgdG8KLSAgICAgICAg
Ly8gY29uc3RhbnQtZm9sZCBwcm90b3R5cGUgbG9hZHMsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSBj
bGFpbSB0aGF0IHdlIGNhbm5vdCBob2lzdC4gV2UKLSAgICAgICAgLy8gYWxzbyBrbm93IHRoYXQg
YSBsb2FkIGlzIHNhZmUgdG8gZXhlY3V0ZSBpZiB3ZSBhcmUgd2F0Y2hpbmcgdGhlIHByb3RvdHlw
ZSdzCi0gICAgICAgIC8vIHN0cnVjdHVyZS4KLSAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMpIHsK
LSAgICAgICAgICAgIGlmICghdmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBJdCdzIG5vdCBhIHByb3RvdHlwZSBsb2FkLgotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIGJh
c2UgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBm
cm96ZW4gPSBncmFwaC5mcmVlemUoYmFzZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuc3RydWN0
dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQKLSAgICAgICAgICAgICAg
ICAmJiBmcm96ZW4tPnN0cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpCi0gICAgICAgICAgICAg
ICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldCh2YXJpYW50Lm9mZnNldCgp
KSkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgd2F0Y2hpbmcgdGhhdCBpdCdz
IHNhZmUgdG8gbG9hZCBmcm9tIHRoaXMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1
bHQgPSBncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgIHZhcmlh
bnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZz
ZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gQ291bGRuJ3QgY29uc3RhbnQtZm9sZCBhIHByb3RvdHlwZSBsb2FkLiBUaGVyZWZvcmUs
IHdlIHNob3VsZG4ndCBob2lzdAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHNhZmV0
eSBvZiB0aGUgbG9hZCBkZXBlbmRzIG9uIHN0cnVjdHVyZSBjaGVja3Mgb24gdGhlIHByb3RvdHlw
ZSwKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2UncmUgdG9vIGNoZWFwIHRvIHZlcmlmeSB0aGF0
IGhlcmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBjb250YWlu
cyBsb2FkcyBmcm9tIHByb3RvdHlwZXMuIElmIHRoZSBsb2FkIHJlcXVpcmVzIGEgY2hlY2sgaW4g
SVIsIHdoaWNoIGlzIHJhcmUsIHRoZW4KKyAgICAgICAgLy8gd2UgY3VycmVudGx5IGNsYWltIHRo
YXQgd2UgZG9uJ3Qga25vdyBpZiBpdCdzIHNhZmUgdG8gZXhlY3V0ZSBiZWNhdXNlIGZpbmRpbmcg
dGhhdAorICAgICAgICAvLyBjaGVjayBpbiB0aGUgYWJzdHJhY3Qgc3RhdGUgd291bGQgYmUgaGFy
ZC4gSWYgdGhlIGxvYWQgcmVxdWlyZXMgd2F0Y2hwb2ludHMsIHdlIGp1c3QKKyAgICAgICAgLy8g
Y2hlY2sgaWYgd2UncmUgbm90IGluIGEgY2xvYmJlcmVkIHN0YXRlIChpLmUuIGluIGJldHdlZW4g
YSBzaWRlIGVmZmVjdCBhbmQgYW4KKyAgICAgICAgLy8gaW52YWxpZGF0aW9uIHBvaW50KS4KKyAg
ICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11
bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0
aG9kIG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1ldGhv
ZC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0
YW50OiAvLyBPSyBiZWNhdXNlIGNvbnN0YW50cyBhcmUgYWx3YXlzIHNhZmUgdG8gZXhlY3V0ZS4K
KyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6IC8vIE9LIGJlY2F1c2Ug
dGhlIE11bHRpR2V0QnlPZmZzZXQgaGFzIGl0cyBvd24gY2hlY2tzIGZvciBsb2FkaW5nIGZyb20g
c2VsZi4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgT0sg
aWYgdGhlIHN0YXRlIGlzbid0IGNsb2JiZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNh
c2UuCisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpICE9
IFN0cnVjdHVyZXNBcmVXYXRjaGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgaWYgKCFncmFwaC5pc1NhZmVUb0xvYWQobWV0aG9kLnByb3RvdHlw
ZSgpLT5jYXN0PEpTT2JqZWN0Kj4oKSwgbWV0aG9kLm9mZnNldCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwgZWl0aGVy
OgotICAgICAgICAgICAgLy8gLSBOb3QgbG9hZCBmcm9tIHRoZSBwcm90b3R5cGUgYmVjYXVzZSBj
b25zdGFudCBmb2xkaW5nIHdpbGwgc3VjY2VlZCBpbiB0aGUKLSAgICAgICAgICAgIC8vICAgYmFj
a2VuZCwgb3IKLSAgICAgICAgICAgIC8vIC0gRW1pdCBpbnZhbGlkIGNvZGUgdGhhdCBmYWlscyB3
YXRjaHBvaW50IGNoZWNrcy4gVGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlCi0gICAgICAgICAgICAv
LyAgIHByb3BlcnR5IGJlY29tZXMgbXV0YWJsZSBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB3ZSBh
bHJlYWR5IHNldCB0aGUgd2F0Y2hwb2ludAotICAgICAgICAgICAgLy8gICBhYm92ZS4gVGhpcyBj
YXNlIGlzIE9LIHNpbmNlIHRoZSBjb2RlIHdpbGwgZmFpbCB3YXRjaHBvaW50IGNoZWNrcyBhbmQg
bmV2ZXIKLSAgICAgICAgICAgIC8vICAgZ2V0IGluc3RhbGxlZC4KICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdp
c3RyYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4Niw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2
YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlcyh2YXJpYW50LnN0cnVjdHVyZVNl
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55
dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1
cmUncy4gRG9uJ3QgbmVlZCB0byB3YXRjaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQg
aWYgYW55IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRo
YXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0
dXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCkuY2FzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVy
ZXMoZ2V0Q2FzZS5zZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAko
cmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MzcsMjQgKzM4MzcsMjQgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2Rl
LT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLmlz
RW1wdHkoKSkgeworICAgICAgICBpZiAoZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIC8vIFByb3RlY3QgYWdhaW5zdCBjcmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRoIHplcm8g
aW5wdXRzLiBMTFZNIGRvZXNuJ3QgbGlrZSB0aGF0LgogICAgICAgICAgICAgdGVybWluYXRlKEJh
ZENhY2hlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXplKCkpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKKyAg
ICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS5jYXNlcy5zaXplKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykKICAgICAg
ICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNl
dCBjYXNlICIsIGkpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBmYWlsIikpOwogICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY29u
dGludWF0aW9uIikpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNh
c2VzOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEdldEJ5SWRW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7IGotLTspIHsKLSAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KClbal07
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgpOyBqLS07
KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNlLnNldCgp
W2pdOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSks
IGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CiAgICAgICAgICAgICB9CkBAIC0zODY1LDI5ICszODY1
LDM2IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9u
ZXh0QmxvY2s7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJl
c3VsdHM7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0
YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBNdWx0
aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIEdl
dEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2Vz
LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAg
ICBiYXNlU2V0Lm1lcmdlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdDsKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQ7Ci0gICAgICAg
ICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICBjb25z
dGFudFJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgp
LCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb25z
dGFudFJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpT
VmFsdWU6OmVuY29kZShjb25zdGFudFJlc3VsdCkpOwotICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAg
ICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNv
ZGUobWV0aG9kLmNvbnN0YW50KCktPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWQ6CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlw
ZTogewogICAgICAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcih2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdldEJ5
T2Zmc2V0TWV0aG9kOjpMb2FkKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBi
YXNlOwotICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQo
KSkpCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJh
c2UgPSB3ZWFrUG9pbnRlcihtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxsKCkpOwor
ICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgpKSkKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJh
c2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBsb2FkUHJvcGVydHkocHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlh
bnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxv
YWRQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50
aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
bV9vdXQuYW5jaG9yKHJlc3VsdCkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNj
ZXNzKAogICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNv
bXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0
eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpCiAgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVBy
b3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsK
ICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTEz
Miw0NyArMTMyLDMzIEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRp
ZgogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlND
ZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAog
ICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUo
KSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3Rp
bGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQo
c3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUg
b2JqZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAg
ICAgICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAg
ICAgICBqaXQsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgIGppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2ludCk7Ci0g
ICAgICAgICAgICBvay5saW5rKCZqaXQpOwotICAgICAgICB9CisgICAgaWYgKGNvbmRpdGlvbi5p
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAg
Y29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQo
CisgICAgICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9u
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CisKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOworICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwog
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGJyYW5jaFN0cnVjdHVyZShqaXQsCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LAotICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAg
ICAgICAgICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25zKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQs
IENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCiAgICAg
TWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAg
ICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5h
c0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHVi
SW5mbywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgIGZvciAo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgeworICAgICAg
ICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0aW9uLCBj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAg
fQogfQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRj
aEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgdGFyZ2V0KQpAQCAtMjk2LDExICsyODIsMTMgQEAgc3RhdGljIEZ1bmN0aW9uUHRy
IGN1c3RvbUZvcihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCi0gICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0
RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LAotICAgIENvZGVMb2NhdGlv
bkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCisgICAgRnVuY3Rpb25QdHIgY3VzdG9t
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZy
b21Qcm94eSwKKyAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25M
YWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsCisgICAg
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NFUlQoY29u
ZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpOworICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJl
ZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsK
ICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0NiwzNyArMzM0
LDMxIEBAIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT50
eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQu
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRj
aHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaykpOwogCiAgICAgaWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAgIHdhdGNo
cG9pbnRTZXQtPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAg
U3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVjdCogcHJv
dG9PYmplY3QgPSAwOwotICAgIGlmIChjaGFpbikgewotICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09i
amVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAg
ICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9w
ZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRj
aHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2Nr
LCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAg
fQotICAgICAgICBBU1NFUlQoIXByb3RvT2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUo
KSA9PSBjdXJyU3RydWN0dXJlKTsKKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygK
KyAgICAgICAgY29uZGl0aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkg
eworICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgIGlmIChjb25kaXRp
b25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5z
bG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgY3VyclN0
cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0
KTsKICAgICB9CiAgICAgCi0gICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5
Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQ
UiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAg
ICAgIGlmIChjaGFpbikgeworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGll
ciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0Lgog
ICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCiAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRh
cmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihh
bHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BS
ID0gc2NyYXRjaEdQUjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZvciBwcm94
eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZvcmUg
bW92aW5nIHRoZSBiYXNlR1BSIGludG8KQEAgLTYyNSw5ICs2MDcsOCBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWCiAgICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0
dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
CiAgICAgfQotICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KTsKICAgICAKLSAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkg
JiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlm
ICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCiAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgcmV0dXJuIEF0dGVtcHRUb0NhY2hlOwpAQCAtODI1
LDIxICs4MDYsMjEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAog
ICAgIH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52
YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHBy
b3RvdHlwZUNoYWluID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAwOwogICAgIAorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICBpZiAodHlwZUlu
Zm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgICAgIGlmIChzbG90
LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4o
ZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKAotICAgICAg
ICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0
KTsKLSAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBz
bG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisKKyAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
IHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKworICAg
ICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25T
ZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1
YkluZm8pOwpAQCAtODUwLDcgKzgzMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlC
dWlsZEdldEJ5SUQKICAgICAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
OwogICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2lu
ZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNo
YWluLCBjb3VudCwgb2Zmc2V0LCAKKyAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQs
IGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgp
LCBvZmZzZXQsIAogICAgICAgICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qu
d2F0Y2hwb2ludFNldCgpLCAKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0
dWJSb3V0aW5lKTsKQEAgLTg2OSw3ICs4NTAsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3Mo
CiAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwg
c3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4sIGNvdW50KSk7
CisgICAgICAgIGNvbmRpdGlvblNldCkpOwogICAgIAogICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0
dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwogICAgIApAQCAtOTkx
LDI2ICs5NzIsMjggQEAgc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRH
ZXRPbGRTdHJ1Y3R1cmUoRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVj
dHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitz
dGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLCBW
TSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAor
ICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBQdXRLaW5kIHB1dEtpbmQsCisgICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJlLCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogewogICAgIFByb3BlcnR5TmFt
ZSBwbmFtZShpZGVudCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7
CisgICAgb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIGlmICghb2xkU3RydWN0dXJlLT5p
c09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChw
bmFtZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBQcm9wZXJ0eU9mZnNldCBwcm9wZXJ0eU9mZnNldDsKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50
bHkob2xkU3RydWN0dXJlLCBpZGVudC5pbXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsKIAogICAg
IGlmICghc3RydWN0dXJlIHx8ICFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSB8fCAhc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlm
IHdlIGRvbid0IGhhdmUKICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVu
LgogICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKICAgICAgICAgJiYgb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKQogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
ICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBh
bmQgdGhlIHN0cnVjdHVyZSBoYXMKQEAgLTEwMTgsMTQgKzEwMDEsMTQgQEAgc3RhdGljIFN0cnVj
dHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
c2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMDkxNAogICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSkgPT0gSW52YWxpZFByb3RvdHlwZUNo
YWluKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90
b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIC8vIGVtaXRQdXRUcmFuc2l0aW9uU3R1YgorICAgIGlmIChwdXRL
aW5kID09IE5vdERpcmVjdCkgeworICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgICAgICAgICAqdm0sIGV4ZWMtPmNvZGVC
bG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkp
OworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKQEAgLTEwODEsMTcgKzEwNjQsOCBAQCBzdGF0
aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAg
ICAgICBvbGRTdHJ1Y3R1cmUpKTsKICAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hl
Y2soCi0gICAgICAgIG9sZFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgICAgICAKLSAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAg
ICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+
aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBjaGVja09iamVjdFByb3Bl
cnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUjEpOwogCiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIApAQCAtMTIyNiw3ICsxMjAwLDcg
QEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgIAogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAg
IGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKQEAgLTEyNTQsOCArMTIyOCw4IEBA
IHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgICAgIGV4
ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUpOwotCi0gICAgcmV0dXJuIG9sZFN0cnVjdHVyZTsK
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQp
CkBAIC0xMjc5LDEyICsxMjUzLDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5SUQKICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNo
ZWFibGVQdXQoKSkgewogICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90
OjpOZXdQcm9wZXJ0eSkgewogCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0
dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotICAgICAgICAgICAgaWYgKCFv
bGRTdHJ1Y3R1cmUpCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAg
ICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUNoYWluKGV4ZWMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoCkBAIC0xMjkyLDcgKzEyNjUsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8u
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJl
cGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0
QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hh
aW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlk
VHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVy
ZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQpAQCAt
MTMxMCwyMCArMTI4MywzMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eUlECiAgICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsK
ICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKIAotICAgICAgICBT
dHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSAw
OwotICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBj
b3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgc3RydWN0
dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQg
PT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAg
ICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Cisg
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5i
YXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAgICAgICAg
ICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29u
ZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAgICBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRC
eUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCByZXN1bHQg
PSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRl
bnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAg
ICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0
dWJJbmZvLCBjb25kaXRpb25TZXQsIHNsb3QuYmFzZSgpLAogICAgICAgICAgICAgb2Zmc2V0LCBz
dHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwK
ICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLApAQCAtMTMzNCw3ICsxMzE4LDcgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBsaXN0LT5h
ZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRl
cigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVy
LAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3Vz
dG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTM3OCwxNyArMTM2MiwxNiBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxs
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhl
cmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywgdm0sIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0KLSAgICAg
ICAgICAgIGlmICghb2xkU3RydWN0dXJlKSAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0
dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1
cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHVi
SW5mby5zdHViUm91dGluZTsKICAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAg
ICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9s
ZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAg
ICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAg
ICAgICAgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICB9IGVsc2UgewpAQCAtMTQyMSwyMSArMTQw
NCwzMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgaWYg
KChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQog
ICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7CiAgICAg
ICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIFN0cnVjdHVy
ZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAg
ICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0g
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNs
b3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY291bnQg
PT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUNoYWluKGV4ZWMpOwotICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dDsKKyAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lLmltcGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0
IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAg
ICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBo
aWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90
KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFp
biwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUs
IGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNlKCksCiAg
ICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+
Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLApAQCAtMTQ0Niw3ICsxNDQwLDcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3Mo
UHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0
QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAg
ICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9tU2V0dGVy
KCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
c2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwpAQCAtMTQ4NSwxMSArMTQ3OSwxNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5UmVwYXRjaEluKAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CiAgICAgCi0gICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0SWdub3JlZDsKLSAgICBKU1ZhbHVlIGZvdW5kU2xvdEJhc2UgPSB3YXNGb3Vu
ZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKTsKLSAgICBzaXplX3QgY291bnQgPSAhZm91
bmRTbG90QmFzZSB8fCBmb3VuZFNsb3RCYXNlICE9IGJhc2UgPyAKLSAgICAgICAgbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIGZvdW5kU2xvdEJh
c2UsIGlkZW50LCBvZmZzZXRJZ25vcmVkKSA6IDA7Ci0gICAgaWYgKGNvdW50ID09IEludmFsaWRQ
cm90b3R5cGVDaGFpbikKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQ7CisgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0g
YmFzZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQu
aW1wbCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkp
OworICAgIH0KKyAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwpAQCAtMTUxNCw3ICsxNTE0LDYgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1
Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmU7CiAgICAgCiAgICAgewpAQCAtMTU0NSwxOCArMTU0NCw4IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgICAgIGlmIChzbG90LndhdGNocG9p
bnRTZXQoKSkKICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLT5hZGQoc3R1YkluZm8u
YWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9
IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsg
KytpLCArK2l0KSB7Ci0gICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3Qo
Y3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKLSAgICAgICAgICAgIFN0
cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b3R5cGUtPnN0cnVjdHVyZSgpOwotICAgICAg
ICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3Rv
dHlwZSwgcHJvdG9TdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgaWYgKHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNX
YXRjaHBvaW50cygpKQotICAgICAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJ
bXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsK
LSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgICAgICBjb25kaXRpb25T
ZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1Ykpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZp
c2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZUNoYWluLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICA6IG1f
Z2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkK
LXsKLSAgICBBU1NFUlQobV9wcm90b3R5cGUuaXNOdWxsKCkgfHwgbV9wcm90b3R5cGUuaXNPYmpl
Y3QoKSk7Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJl
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUo
KSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVj
dHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogaGVhZCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dCkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9i
amVjdCkpCi17Ci0gICAgaWYgKG1fcHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChtX3Byb3RvdHlwZSktPnN0
cnVjdHVyZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3Ry
dWN0dXJlKCkpCi0gICAgICAgIG1fdmVjdG9yLmFwcGVuZChjdXJyZW50KTsKLX0KLQotSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKLSAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3By
b3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAg
IG1fdmVjdG9yLmFwcGVuZChwcm90b3R5cGVTdHJ1Y3R1cmUpOwotfQotCi1JbnRlbmRlZFN0cnVj
dHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKLSAgICA6IG1fZ2xvYmFsT2Jq
ZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5w
cm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGNoYWluLT5oZWFkKClbaV07ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNo
YWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQpCi0gICAgOiBtX2dsb2JhbE9i
amVjdChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+
cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5o
ZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbigpCi17Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNT
dGlsbFZhbGlkKCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX3By
b3RvdHlwZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUo
KSAhPSBtX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3Vy
cmVudFByb3RvdHlwZSA9IG1fdmVjdG9yW2ldLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hl
cyhTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSAh
PSBjaGFpbi0+aGVhZCgpW2ldLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAoY2hhaW4tPmhlYWQoKVttX3ZlY3Rvci5zaXplKCldKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBt
X3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlm
ICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92ZWN0b3JbaV07Ci0gICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46
OnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLXsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93
UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjp0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ZlY3Rv
ci5pc0VtcHR5KCkpOwotICAgIGlmIChtX3ZlY3Rvci5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0
dXJuIGFzT2JqZWN0KG1fcHJvdG90eXBlKTsKLSAgICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3Jb
bV92ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0b3JlZFByb3RvdHlwZSgpKTsKLX0KLQotYm9vbCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjpvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hh
aW4mIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5t
X2dsb2JhbE9iamVjdAotICAgICAgICAmJiBtX3Byb3RvdHlwZSA9PSBvdGhlci5tX3Byb3RvdHlw
ZQotICAgICAgICAmJiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsKLX0KLQotdm9pZCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjpnYXRoZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1Zl
Y3RvciYgdmVjdG9yKSBjb25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1f
cHJvdG90eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewot
ICAgICAgICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5
cGUpOwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBhdChpKTsKLSAgICAg
ICAgdmVjdG9yLmFwcGVuZChDb25zdGFudFN0cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1
cnJlbnRTdHJ1Y3R1cmUpKTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IGN1cnJlbnRTdHJ1
Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCk7Ci0gICAgfQotfQotCi12
b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi17Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fZ2xvYmFs
T2JqZWN0KTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJm1fcHJvdG90eXBl
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCi0gICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKCZtX3ZlY3RvcltpXSk7Ci19Ci0KLXZv
aWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAot
ewotICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihnbG9iYWwgPSAiLCBSYXdQ
b2ludGVyKG1fZ2xvYmFsT2JqZWN0KSwgIiwgaGVhZCA9ICIsCi0gICAgICAgIGluQ29udGV4dCht
X3Byb3RvdHlwZSwgY29udGV4dCksICIsIHZlY3RvciA9IFsiKTsKLSAgICBDb21tYVByaW50ZXIg
Y29tbWE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytp
KQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fdmVjdG9y
W2ldLCBjb250ZXh0KSk7Ci0gICAgb3V0LnByaW50KCJdKSIpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLSNkZWZp
bmUgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCi0KLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVy
ZUNoZWNrLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xv
YmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFzcyBWTTsKLXN0cnVjdCBEdW1w
Q29udGV4dDsKLQotY2xhc3MgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHsKLXB1YmxpYzoKLSAgICBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSopOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUp
OwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQpOwotICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KCk7Ci0gICAgCi0gICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKLSAgICBib29sIG1hdGNo
ZXMoU3RydWN0dXJlQ2hhaW4qKSBjb25zdDsKLSAgICBib29sIG1heUludGVyY2VwdFN0b3JlVG8o
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgYm9vbCBpc05vcm1hbGl6ZWQoKTsKLSAgICAK
LSAgICBib29sIHRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCk7Ci0gICAgCi0g
ICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAg
IAotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9Ci0g
ICAgU3RydWN0dXJlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2lu
ZGV4XTsgfQotICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIGF0KGluZGV4KTsgfQotICAgIAotICAgIEpTT2JqZWN0KiB0ZXJtaW5hbFByb3RvdHlw
ZSgpIGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yLmxhc3QoKTsgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGdhdGhlckNoZWNrcyhDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25z
dDsKLSAgICAKLXByaXZhdGU6Ci0gICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0Owot
ICAgIEpTVmFsdWUgbV9wcm90b3R5cGU7Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSo+IG1fdmVjdG9y
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVl
LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzQ2VsbCgpIGNvbnN0OwogICAgIEpTQ2VsbCogYXNDZWxsKCkgY29uc3Q7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1ZhbGlkQ2FsbGVlKCk7Ci0gICAgICAgIAorCiAgICAg
SlNWYWx1ZSBzdHJ1Y3R1cmVPclVuZGVmaW5lZCgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3MjMsNiArMjcyMywxMyBAQCBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjCiAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKIH0KIAordm9pZCBKU09iamVjdDo6Y29udmVydFRvRGlj
dGlvbmFyeShWTSYgdm0pCit7CisgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKKyAgICBzZXRTdHJ1Y3R1cmUoCisgICAg
ICAgIHZtLCBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKSk7Cit9CisKIHZvaWQgSlNPYmpl
Y3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKFZNJiB2bSwgc2l6ZV90IG91dE9mTGlu
ZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKIHsKICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MjksMTAgKzYyOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2Nh
dGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJl
Kik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5
KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICB2b2lkIGNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mIHZt
KQotICAgIHsKLSAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxl
RGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSkpKTsKLSAgICB9CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJik7CiAKICAgICB2b2lk
IGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KFZNJiB2bSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5NCw0OCArMTk0LDYgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQWRkKENhbGxGcmFt
ZSogYwogCiAjZGVmaW5lIEludmFsaWRQcm90b3R5cGVDaGFpbiAoc3RkOjpudW1lcmljX2xpbWl0
czxzaXplX3Q+OjptYXgoKSkKIAotaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFp
bkZvckNoYWluQWNjZXNzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eU9mZnNldCYgc2xvdE9mZnNldCkKLXsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7
Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgCi0gICAgd2hpbGUgKDEpIHsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQ
cm90b3R5cGVDaGFpbjsKLQotICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8gPSBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCk7Ci0gICAgICAgIGlmICh0eXBlSW5mby5oYXNJbXB1cmVHZXRPd25Q
cm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9p
bnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFByb3RvdHlwZUNoYWluOwotICAgICAg
ICAgICAgCi0gICAgICAgIEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3Vw
KGNhbGxGcmFtZSk7Ci0KLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgc2xvdEJhc2UgaW4g
dGhlIGJhc2UncyBwcm90b3R5cGUgY2hhaW4sIHRoZW4gdGhlIGJhc2UKLSAgICAgICAgLy8gbXVz
dCBiZSBhIHByb3h5IGZvciBhbm90aGVyIG9iamVjdC4KLQotICAgICAgICBpZiAodi5pc051bGwo
KSkgewotICAgICAgICAgICAgaWYgKCFzbG90QmFzZSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUHJvdG90eXBlQ2hhaW47Ci0gICAgICAgIH0KLQot
ICAgICAgICBKU0NlbGwqIGNlbGwgPSB2LmFzQ2VsbCgpOwotICAgICAgICBzdHJ1Y3R1cmUgPSBj
ZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBw
cm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAotICAgICAgICAvLyBz
aG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgotICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGlj
dGlvbmFyeVN0cnVjdHVyZSh2bSwgYXNPYmplY3QoY2VsbCkpOwotICAgICAgICAgICAgaWYgKHNs
b3RCYXNlID09IGNlbGwpCi0gICAgICAgICAgICAgICAgc2xvdE9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICAgICAgfQotICAgICAgICArK2NvdW50OwotCi0g
ICAgICAgIGlmIChzbG90QmFzZSA9PSBjZWxsKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgICAgICAKLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KIGlubGluZSBzaXplX3Qgbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW4oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKQEAgLTI1OCwyMyArMjE2LDYgQEAg
aW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbihDYQogICAgIH0KIH0KIAotaW5s
aW5lIGJvb2wgaXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6ZWQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgZm9yICg7OykgewotICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JM
b29rdXAoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgaWYgKHYuaXNOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBzdHJ1Y3R1cmUgPSB2LmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3BlcmF0aW9uc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE4NzYwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxMiw3ICs0MTIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0CiAgICAgZWxzZQogICAgICAgICBtYXhUcmFuc2l0aW9uTGVuZ3RoID0gc19tYXhU
cmFuc2l0aW9uTGVuZ3RoOwogICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Db3VudCgpID4g
bWF4VHJhbnNpdGlvbkxlbmd0aCkgewotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0
b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFu
c2l0aW9uKTsKICAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsKQEAgLTQ4OSwxMSAr
NDg5LDExIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmEKICAgICBy
ZXR1cm4gc3RydWN0dXJlOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5
VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBr
aW5kKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCwgRGVmZXJyZWRTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewogICAgIEFTU0VSVCgh
c3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7CkBAIC01MDcsOSArNTA3LDkgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaQogICAgIHJldHVybiB0cmFuc2l0aW9uOwog
fQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRv
Q2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQog
ewotICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIENhY2hl
ZERpY3Rpb25hcnlLaW5kKTsKKyAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCwgZGVmZXJyZWQpOwogfQogCiBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC03NjEsNiArNzYxLDEwIEBAIHZvaWQgU3RydWN0dXJl
OjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6ZW5z
dXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKwor
ICAgIC8vIEluIHNvbWUgcGxhY2VzIGl0J3MgY29udmVuaWVudCB0byBjYWxsIHRoaXMgd2l0aCBh
biBpbnZhbGlkIG9mZnNldC4gU28sIHdlIGRvIHRoZSBjaGVjayBoZXJlLgorICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBp
ZiAoIWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOwpAQCAtNzgx
LDExICs3ODUsNyBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yCiB7
CiAgICAgQVNTRVJUKCFpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBnZXQodm0sIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFKU0M6
OmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHN0YXJ0
V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KTsKKyAgICBzdGFydFdh
dGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIGdldCh2bSwgcHJvcGVydHlOYW1lKSk7
CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoVk0mIHZt
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkBAIC0xMTE3LDYgKzExMTcsMTcgQEAgdm9pZCBTdHJ1
Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgIAogICAgIGlmIChtX3Byb3RvdHlw
ZS5nZXQoKS5pc0NlbGwoKSkKICAgICAgICAgb3V0LnByaW50KCIsIFByb3RvOiIsIFJhd1BvaW50
ZXIobV9wcm90b3R5cGUuZ2V0KCkuYXNDZWxsKCkpKTsKKworICAgIHN3aXRjaCAoZGljdGlvbmFy
eUtpbmQoKSkgeworICAgIGNhc2UgTm9uZURpY3Rpb25hcnlLaW5kOgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIENhY2hlZERpY3Rpb25hcnlLaW5kOgorICAgICAgICBvdXQucHJpbnQoIiwgRGlj
dGlvbmFyeSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVuY2FjaGVkRGljdGlvbmFyeUtp
bmQ6CisgICAgICAgIG91dC5wcmludCgiLCBVbmNhY2hlYWJsZURpY3Rpb25hcnkiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgIAogICAgIG91dC5wcmludCgiXSIpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4NzYwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OCw3ICsxNjgsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24o
Vk0mLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVj
dHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1
cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEZWZl
cnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBz
dGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBzZWFs
VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTdHJ1Y3R1cmUqIGZyZWV6ZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKQEAgLTE5NCw3
ICsxOTQsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1
cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KICAgICBib29sIGlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSA9
PSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gVW5jYWNoZWREaWN0
aW9uYXJ5S2luZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKTsgfQor
ICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kCisgICAgICAg
ICAgICAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICAg
ICAgJiYgISh0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBl
SW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICAgICAgICAgICYmIHR5
cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAgICAgICAgICYmIHR5
cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCk7CisgICAgfQogCiAg
ICAgLy8gV2UgdXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9yIHN0cnVjdHVyZXMgdGhh
dCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBwcmV2ZW50CiAgICAgLy8g
REZHIGZyb20gaW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ugc3RydWN0dXJlcyBkb24n
dCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFwcGVhcnMuCkBAIC0yMDIs
NyArMjE0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuaGFz
SW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gVHlwZSBh
Y2Nlc3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1
cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291
dE9mTGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
dHlwZUluZm8oKS5pc09iamVjdCgpOyB9CkBAIC01MjgsNyArNTQwLDcgQEAgcHJpdmF0ZToKICAg
ICAvLyB0byB1bmxvY2sgaXQuCiAgICAgdm9pZCBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSom
LCBQcm9wZXJ0eVRhYmxlKiYpOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlv
bmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCk7CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERp
Y3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSog
PSBudWxscHRyKTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5
TmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4NzYw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzNiw2ICs1MzYsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
aXNjYXJkQWxsQ29kZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQ
cm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAgIAogICAgIC8vIEZJ
WE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIu
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJp
bmcmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11
bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0
cnVjdHVyZS1jaGVjay1uZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13
aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay1uZXcuanMJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9m
ZnNldC10by1nZXQtYnktb2Zmc2V0LXdpdGhvdXQtZm9sZGluZy10aGUtc3RydWN0dXJlLWNoZWNr
LW5ldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACitmdW5jdGlvbiBmb28obykg
eworICAgIHJldHVybiBvLmY7Cit9CisKK2Z1bmN0aW9uIGJhcihvKSB7CisgICAgcmV0dXJuIG8u
ZzsKK30KKworZnVuY3Rpb24gYmF6KG8sIHAsIHEpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAg
ICBpZiAoaXNGaW5hbFRpZXIoKSkgeworICAgICAgICBwID0gbzsKKyAgICAgICAgcSA9IG87Cisg
ICAgICAgIHJlc3VsdCArPSAxMDAwMDsKKyAgICB9CisgICAgcmVzdWx0ICs9IGZvbyhwKTsKKyAg
ICByZXN1bHQgKz0gYmFyKHEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGJh
eik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgbywgcCwg
cTsKKyAgICB2YXIgZXhwZWN0ZWQxOworICAgIHZhciBleHBlY3RlZDI7CisgICAgbyA9IHtmOjEw
MCwgZzoxMDF9OworICAgIGV4cGVjdGVkMiA9IDEwMDAwICsgMTAwICsgMTAxOworICAgIGlmIChp
ICYgMSkgeworICAgICAgICBwID0ge2U6MSwgZjoyLCBnOjN9OworICAgICAgICBxID0ge2U6NCwg
Zjo1LCBnOjZ9OworICAgICAgICBleHBlY3RlZDEgPSAyICsgNjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBwID0ge2Y6NywgZzo4fTsKKyAgICAgICAgcSA9IHtnOjksIGY6MTB9OworICAgICAgICBl
eHBlY3RlZDEgPSA3ICsgOTsKKyAgICB9CisgICAgdmFyIHJlc3VsdCA9IGJheihvLCBwLCBxKTsK
KyAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVkMSAmJiByZXN1bHQgIT0gZXhwZWN0ZWQyKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQgKyAiIChleHBlY3RlZCAi
ICsgZXhwZWN0ZWQxICsgIiBvciAiICsgZXhwZWN0ZWQyICsgIikiOworfQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211bHRpLWdldC1ieS1vZmZzZXQtc2VsZi1v
ci1wcm90by5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL211bHRpLWdldC1ieS1vZmZzZXQtc2VsZi1vci1wcm90by5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktZ2V0LWJ5LW9mZnNldC1z
ZWxmLW9yLXByb3RvLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKK2Z1bmN0aW9u
IGZvbyhvLCBzdGFydCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBvLmY7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIG8gPSB7fTsKK28uZiA9IDQyOwordmFyIGYg
PSB7fTsKK2YuZiA9IDQzOworZi5nID0gNDQ7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
ICsraSkKKyAgICBvLmYgPSBpOworby5mID0gNDI7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgIHZhciBwOworICAgIGlmIChpICYgMSkKKyAgICAgICAgcCA9IG87Cisg
ICAgZWxzZQorICAgICAgICBwID0gT2JqZWN0LmNyZWF0ZShvKTsKKyAgICB2YXIgcmVzdWx0ID0g
Zm9vKHApOworICAgIGlmIChyZXN1bHQgIT0gMTAwICogNDIpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHEgPSB7fTsKK3EuZiA9IDQzOwor
dmFyIHJlc3VsdCA9IGZvbyhxKTsKK2lmIChyZXN1bHQgIT0gMTAwICogNDMpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC1kaWN0aW9uYXJ5
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVw
bGFjZW1lbnQtd2F0Y2hwb2ludC1kaWN0aW9uYXJ5LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBsYWNlbWVudC13YXRjaHBvaW50LWRpY3Rp
b25hcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gZm9vKG8p
IHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28pOworCit2YXIgcCA9IHtmOjQy
fTsKK3ZhciBvID0gT2JqZWN0LmNyZWF0ZShwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7
ICsraSkgeworICAgIHBbImkiICsgaV0gPSBpOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTAw
OyArK2opIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPSA0MikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKKyAgICB9Cit9CisKKy8vIE1ha2UgcCBhIG5vbi1kaWN0aW9uYXJ5LgorZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHZhciB0bXAgPSBvLmY7Cit9CisKK3AuZiA9IDQzOwor
dmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0gNDMpCisgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9p
bnQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3JlcGxhY2VtZW50LXdhdGNocG9pbnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBA
QAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28p
OworCit2YXIgcCA9IHtmOjQyfTsKK3ZhciBvID0gT2JqZWN0LmNyZWF0ZShwKTsKKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHBbImkiICsgaV0gPSBpOworICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgMTAwOyArK2opIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9Cit9CisKK3AuZiA9IDQzOwordmFyIHJlc3VsdCA9
IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0gNDMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVk
LWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLWRpY3Rp
b25hcnktdGhlbi1wcm90by1jaGFuZ2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNyBA
QAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciBwID0ge307CisgICAgdmFyIG8gPSB7fTsKKyAg
ICBvLl9fcHJvdG9fXyA9IHA7CisgICAgdmFyIHJlc3VsdDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCA9IG8uZjsKKyAgICAgICAgaWYgKGkgPT0g
NTApCisgICAgICAgICAgICBwLmYgPSA0MjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSA0MikKKyAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1h
Y2Nlc3MtdGhlbi1wcm90by1jaGFuZ2UuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3MtdGhlbi1wcm90by1jaGFuZ2Uu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAg
ICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28pOworCit2YXIgcCA9IHt9OwordmFyIG8g
PSBPYmplY3QuY3JlYXRlKHApOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGluIGxvb3A6ICIgKyByZXN1bHQ7Cit9CisK
K3AuZiA9IDQyOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT09IDQyKQorICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxODc2MDUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAxNS0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hw
b2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NjkyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIG1pY3JvYmVuY2htYXJrIHRoYXQgaWxsdXN0cmF0ZXMgdGhlIG5lZWQgZm9yIHRoaXMgZmVh
dHVyZS4gVGhpcyBiZW5jaG1hcmsgZ2V0cyA1OHggZmFzdGVyIHdpdGgKKyAgICAgICAgdGhpcyBj
aGFuZ2UuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRh
dGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuaHRtbDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11
dGF0aW5nLXByb3RvdHlwZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDE1LTA3LTMw
ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXBsYWNl
IEdvb2dsZSBBcHAgRW5naW5lIHdpdGggQXBwU2NhbGUKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLW9iamVj
dC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11
dGF0aW5nLXN0cnVjdHVyZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MCBAQAorSlNSZWdyZXNzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0
dXJlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0
aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgt
bXV0YXRpbmctc3RydWN0dXJlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vz
cy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2ds
b2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBl
LWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmct
cHJvdG90eXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3Byb3RvdHlwZS1h
Y2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
cHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5n
LXByb3RvdHlwZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
cm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVy
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9n
bG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dsb2JhbC1vYmplY3Qt
YWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTYgQEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICByZXN1bHQgKz0gZjsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitub0lubGluZShmb28pOworCitmID0gNDI7Citmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0aGlzWyJpIiArIGldID0gaTsKKyAgICB2YXIgcmVz
dWx0ID0gZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAqIDEwMCkKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3Rv
dHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vz
cy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4
IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBvLmY7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIHAgPSB7Zjo0Mn07Cit2YXIgbyA9
IE9iamVjdC5jcmVhdGUocCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgIHBbImkiICsgaV0gPSBpOworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJl
c3VsdCAhPSA0MiAqIDEwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworfQpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvdW5k
ZWZpbmVkLXByb3BlcnR5LWFjY2Vzcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy91bmRlZmluZWQtcHJvcGVydHktYWNjZXNzLmpzCShyZXZpc2lv
biAxODc2MDUpCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy91bmRlZmlu
ZWQtcHJvcGVydHktYWNjZXNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw3ICsxMSw3IEBAIGZ1
bmN0aW9uIGZvbygpIHsKIH0KIHJlc3VsdCA9IGZvbygpOwogaWYgKHJlc3VsdCAhPSB1bmRlZmlu
ZWQpCi0gICAgdGhyb3cgIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgdGhyb3cgbmV3IEVy
cm9yKCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKIAogLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0
IGEgY2FjaGVkIHByb3BlcnR5IGxvb2t1cCBtaXNzIGRvZXNuJ3QgY29udGludWUgdG8gZmlyZSB3
aGVuIHRoZSBwcm9wZXJ0eSBzdWRkZW5seSBhcHBlYXJzIG9uIHRoZSBvYmplY3QuCiAKQEAgLTI2
LDcgKzI2LDcgQEAgZnVuY3Rpb24gYmFyKCkgewogfQogdmFyIHJlc3VsdCA9IGJhcigpOwogaWYg
KHJlc3VsdCAhPSAxKQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIHRo
cm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiBzb21lR2xvYmFsID0gdW5k
ZWZpbmVkOwogCiAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgYSBjYWNoZWQgcHJvcGVydHkgbG9v
a3VwIG1pc3MgZG9lc24ndCBjb250aW51ZSB0byBmaXJlIHdoZW4gdGhlIHByb3BlcnR5IHN1ZGRl
bmx5IGFwcGVhcnMgb24gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4KQEAgLTQ0LDUgKzQ0LDUgQEAg
ZnVuY3Rpb24gYmF6KCkgewogfQogdmFyIHJlc3VsdCA9IGJheigpOwogaWYgKHJlc3VsdCAhPSAy
KQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJv
cigiQmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257960</attachid>
            <date>2015-07-31 14:23:28 -0700</date>
            <delta_ts>2015-07-31 23:12:20 -0700</delta_ts>
            <desc>fix debug tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>327516</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyNSBA
QAorMjAxNS0wNy0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5n
ZSwgaWYgeW91IHdhbnRlZCB0byBlZmZpY2llbnRseSB2YWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVj
dCBoYXMgKG9yIGRvZXNuJ3QgaGF2ZSkgYQorICAgICAgICBwcm9wZXJ0eSwgeW91J2QgY2hlY2sg
dGhhdCB0aGUgb2JqZWN0IHN0aWxsIGhhcyB0aGUgc3RydWN0dXJlIHRoYXQgeW91IGZpcnN0IHNh
dyB0aGUgb2JqZWN0IGhhdmUuIFdlCisgICAgICAgIG9wdGltaXplZCB0aGlzIGEgYml0IHdpdGgg
dHJhbnNpdGlvbiB3YXRjaHBvaW50cyBvbiB0aGUgc3RydWN0dXJlLCB3aGljaCBzb21ldGltZXMg
YWxsb3dlZCB1cyB0bworICAgICAgICBlbGlkZSB0aGUgc3RydWN0dXJlIGNoZWNrLgorCisgICAg
ICAgIEJ1dCB0aGlzIGFwcHJvYWNoIGZhaWxzIHdoZW4gdGhhdCBvYmplY3QgZnJlcXVlbnRseSBo
YXMgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXQuIFRoaXMgd291bGQKKyAgICAgICAgY2hhbmdl
IHRoZSBzdHJ1Y3R1cmUgYW5kIGZpcmUgdGhlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCwgc28gdGhl
IGNvZGUgd2UgZW1pdHRlZCB3b3VsZCBiZSBpbnZhbGlkIGFuZAorICAgICAgICB3ZSdkIGhhdmUg
dG8gcmVjb21waWxlIGVpdGhlciB0aGUgSUMgb3IgYW4gZW50aXJlIGNvZGUgYmxvY2suCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBjb25jZXB0OiBhbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uLiBUaGlzIHZhbHVlIGRlc2NyaWJlcyBzb21lCisgICAgICAgIGNvbmRp
dGlvbiBpbnZvbHZpbmcgYSBwcm9wZXJ0eSBvbiBzb21lIG9iamVjdC4gVGhlcmUgYXJlIGZvdXIg
a2luZHM6IHByZXNlbmNlLCBhYnNlbmNlLAorICAgICAgICBhYnNlbmNlLW9mLXNldHRlciwgYW5k
IGVxdWl2YWxlbmNlLiBGb3IgZXhhbXBsZSwgYSBwcmVzZW5jZSBjb25kaXRpb24gc2F5cyB0aGF0
IHdlIGV4cGVjdCB0aGF0IHRoZQorICAgICAgICBvYmplY3QgaGFzIHNvbWUgcHJvcGVydHkgYXQg
c29tZSBvZmZzZXQgd2l0aCBzb21lIGF0dHJpYnV0ZXMuIFRoaXMgYWxsb3dzIHVzIHRvIGltcGxl
bWVudCBhIG5ldyBraW5kCisgICAgICAgIG9mIHdhdGNocG9pbnQsIHdoaWNoIGtub3dzIGFib3V0
IHRoZSBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHRoYXQgaXQncyBiZWluZyB1c2VkIHRvIGVu
Zm9yY2UuIElmCisgICAgICAgIHRoZSB3YXRjaHBvaW50IGZpcmVzIGJlY2F1c2Ugb2YgYSBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbiwgdGhlIHdhdGNocG9pbnQgbWF5IHNpbXBseSByZWluc3RhbGwgaXRz
ZWxmCisgICAgICAgIG9uIHRoZSBuZXcgc3RydWN0dXJlLgorCisgICAgICAgIE9iamVjdCBwcm9w
ZXJ0eSBjb25kaXRpb25zIGFyZSB1c2VkIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgUHV0QnlJ
ZCB0cmFuc2l0aW9ucywgR2V0QnlJZCBtaXNzZXMsCisgICAgICAgIGFuZCBwcm90b3R5cGUgYWNj
ZXNzZXMuIFRoZXkgYXJlIGFsc28gdXNlZCBmb3IgYW55IERGRyBhY2Nlc3NlcyB0byBvYmplY3Qg
Y29uc3RhbnRzLCBpbmNsdWRpbmcKKyAgICAgICAgZ2xvYmFsIHByb3BlcnR5IGFjY2Vzc2VzLgor
CisgICAgICAgIE1vc3RseSBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gZ2xvYmFsIHByb3BlcnR5
IGFjY2VzcywgdGhpcyBpcyBhIDklIHNwZWVkLXVwIG9uIEtyYWtlbi4gSXQncworICAgICAgICBu
ZXV0cmFsIG9uIG1vc3Qgb3RoZXIgdGhpbmdzLiBJdCdzIGEgNjh4IHNwZWVkLXVwIG9uIGEgbWlj
cm9iZW5jaG1hcmsgdGhhdCBpbGx1c3RyYXRlcyB0aGUgcHJvdG90eXBlCisgICAgICAgIGNoYWlu
IHNpdHVhdGlvbi4gSXQncyBhbHNvIGEgc21hbGwgc3BlZWQtdXAgb24gZ2V0dGVyLXJpY2hhcmRz
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpDb21wbGV4R2V0
U3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6dGFrZXNTbG93UGF0aCk6
CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmtpbmQpOgorICAgICAgICAoSlNDOjpD
b21wbGV4R2V0U3RhdHVzOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVz
Ojpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjphdHRyaWJ1
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6c3BlY2lmaWNW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmNoYWluKTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmg6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0
QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6fkdldEJ5SWRWYXJp
YW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6Okdl
dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRW
YXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpvcGVyYXRvciEpOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6c3RydWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFZhcmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJp
YW50OjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0
dXMpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0ZW1wdFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJp
ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb24pOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2Vu
Y2VXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
OjpwcmVzZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNl
bmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6YWJzZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNl
bmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6b2JqZWN0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25k
aXRpb246OmNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
OjpraW5kKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnVpZCk6Cisg
ICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjpoYXNQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6cHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVy
dHlDb25kaXRpb246Omhhc1JlcXVpcmVkVmFsdWUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6cmVxdWlyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpoYXNoKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b246Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNDb21wYXRpYmxlV2l0aCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJl
c1JlcGxhY2VtZW50V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjppc1ZhbGlkVmFsdWVGb3JQcmVzZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0Ojpmb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6Zm9yQ29uZGl0aW9uS2luZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZCk6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlvbik6Cisg
ICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlv
bik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjptZXJnZWRXaXRo
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNF
bnN1cmVWYWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmFyZVN0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmR1bXApOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9w
ZXJ0eU1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNl
dHRlck1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdCk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0Q3VzdG9tKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KToKKyAgICAgICAgKiBieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQpOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9uRW1wdHkpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmVuZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjpyZWxlYXNlUmF3UG9pbnRlcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6RGF0YTo6RGF0YSk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OkdldEJ5
SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2Vzcyk6
CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnZpc2l0V2Vhayk6CisgICAgICAgICogYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNj
ZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0KToKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpjaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6
OmNoYWluQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJl
U3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWspOgorICAg
ICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaDoKKyAgICAgICAgKEpTQzo6
UHV0QnlJZEFjY2Vzczo6UHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nl
c3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpzZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpQdXRCeUlkQWNjZXNzOjpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNj
ZXNzOjpzdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OmNoYWluKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6Y2hhaW5Db3VudCk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzU3Rp
bGxWYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdo
ZW5WYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlD
b25kaXRpb246OmlzV2F0Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246
OmlzU3RpbGxMaXZlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRl
UmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1ZhbGlkVmFs
dWVGb3JBdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzVmFs
aWRWYWx1ZUZvclByZXNlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmF0
dGVtcHRUb01ha2VFcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpQcm9wZXJ0eUNvbmRpdGlvbik6
CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0QmFycmllcik6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcik6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlDb25kaXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjpraW5kKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OnVpZCk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246
Omhhc0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0cmli
dXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpoYXNQcm90b3R5cGUpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJvdG90eXBlKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246Omhhc1JlcXVpcmVkVmFsdWUpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6cmVxdWlyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjpoYXNoKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNDb21wYXRpYmxl
V2l0aCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVpcmVz
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6b3BlcmF0
b3I9KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6Om1ha2VzQ2FsbHMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YXR0ZW1w
dFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VU
cmFuc2l0aW9uV2l0aFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6ZHVt
cEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQ
dXRCeUlkVmFyaWFudDo6a2luZCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpzdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c3RydWN0dXJlU2V0KToKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9sZFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRWYXJpYW50Ojpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmNhbGxMaW5rU3Rh
dHVzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmNvbnN0YW50Q2hlY2tzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmFsdGVybmF0ZUJhc2UpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojp+U3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2gpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8p
OgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNo
cG9pbnQpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVu
c3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludDo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCk6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6Y29kZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpzdHViSW5mbyk6
CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlk
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJ
ZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6c2V0U2Vlbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KToKKyAgICAgICAg
KiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMp
OgorICAgICAgICAqIGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjppbnN0YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQ6OmZpcmUpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6Zmly
ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAg
ICAgKiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6a2V5KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNocG9pbnQpOgorICAgICAg
ICAqIGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50OjppbnN0YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQ6OmtleSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2VsbENvbnN0YW50V2l0aFN0
cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvbW90ZVRv
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxvYWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcmVzZW5jZUxpa2UpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpjaGVja1ByZXNlbmNlTGlrZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW1pdENoZWNrcyk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgICogZGZnL0RGR0Nv
bW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkQmFzZUNoZWNr
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFz
ZTo6YWRkQ2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRh
cHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFZhbHVlQWRhcHRvcjo6YWRk
KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9y
OjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdh
dGNocG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcik6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KToKKyAgICAg
ICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAgICAgIChKU0M6OkRGRzo6U2V0
UG9pbnRlckFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U2V0UG9pbnRlckFkYXB0
b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6CisgICAgICAgIChKU0M6OkRGRzo6U2V0UG9pbnRlckFk
YXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVkVmFsdWVB
ZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVk
VmFsdWVBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1
ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6ZHVtcEluQ29udGV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRv
cjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dCk6CisgICAgICAg
IChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNoZWQpOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjphZGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkdlbmVyaWNTZXRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpTQzo6REZH
OjpEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKToKKyAgICAgICAgKiBkZmcvREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmg6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNs
ZWFyRmxhZ3NPbkFsbE5vZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6d2F0Y2hDb25k
aXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1NhZmVUb0xvYWQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6aWRlbnRpZmllcnMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp3YXRj
aHBvaW50cyk6CisgICAgICAgICogZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAg
IChKU0M6OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXApOgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OkdldEJ5T2Zmc2V0
TWV0aG9kKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6Y29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvcGVyYXRvciEpOgorICAgICAgICAoSlND
OjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRC
eU9mZnNldE1ldGhvZDo6cHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNl
dE1ldGhvZDo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZTo6TXVsdGlHZXRCeU9mZnNldENhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok11bHRpR2V0QnlP
ZmZzZXRDYXNlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNl
OjptZXRob2QpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6OmNoZWNrT2JqZWN0
UHJvcGVydHlDb25kaXRpb25zKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZVdpdGhKdW1wKToKKyAg
ICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlkU3R1Yik6CisgICAgICAgIChKU0M6OmFjdGlvbkZvckNl
bGwpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6
ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5zaXRpb25TdHVi
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5QnVp
bGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0Y2hJbik6CisgICAgICAgIChK
U0M6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OmVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6dGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29udmVydFRvRGljdGlvbmFyeSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzaGlmdEJ1dHRl
cmZseUFmdGVyRmxhdHRlbmluZyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeSk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlwZUNo
YWluKToKKyAgICAgICAgKEpTQzo6bm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vz
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmlzUHJvdG90eXBlQ2hhaW5Ob3JtYWxpemVkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6c2xvdEJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1wKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mv
Zm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5n
LXRoZS1zdHJ1Y3R1cmUtY2hlY2stbmV3LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAg
ICAgIChiYXIpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbXVsdGkt
Z2V0LWJ5LW9mZnNldC1zZWxmLW9yLXByb3RvLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6Cisg
ICAgICAgICogdGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQtZGljdGlvbmFyeS5q
czogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9yZXBsYWNl
bWVudC13YXRjaHBvaW50LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3MtZGljdGlvbmFyeS10aGVuLXByb3RvLWNoYW5nZS5q
czogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy91bmRlZmlu
ZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hhbmdlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisK
IDIwMTUtMDctMzEgIFNhYW0gYmFyYXRpICA8c2FhbWJhcmF0aTFAZ21haWwuY29tPgogCiAgICAg
ICAgIEVTNiBjbGFzcyBzeW50YXggc2hvdWxkIHVzZSBibG9jayBzY29waW5nCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0
LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9Db2RlT3JpZ2lu
LmNwcAogICAgIGJ5dGVjb2RlL0NvZGVUeXBlLmNwcAogICAgIGJ5dGVjb2RlL0NvbXBsZXhHZXRT
dGF0dXMuY3BwCi0gICAgYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKICAgICBi
eXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKICAgICBieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwCiAgICAgYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcApAQCAt
OTcsMTAgKzk2LDEzIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUv
SnVtcFRhYmxlLmNwcAogICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAog
ICAgIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisgICAgYnl0ZWNv
ZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuY3BwCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2Rl
L1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCiAgICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAKICAgICBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCisgICAgYnl0
ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAKICAgICBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKICAgICBieXRlY29kZS9SZWR1Y2VX
aGl0ZXNwYWNlLmNwcApAQCAtMTI4LDYgKzEzMCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAKICAgICBkZmcvREZHQWJzdHJhY3RIZWFwLmNwcAogICAgIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAorICAgIGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuY3BwCisgICAgZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKICAgICBk
ZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmNwcAogICAgIGRmZy9ERkdBcml0aE1vZGUuY3BwCkBAIC0xOTYsNiArMjAwLDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHTWluaWZpZWRHcmFwaC5j
cHAKICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcAogICAgIGRmZy9ERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlLmNwcAorICAgIGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAKICAgICBkZmcv
REZHTmFpdmVEb21pbmF0b3JzLmNwcAogICAgIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAg
ZGZnL0RGR05vZGUuY3BwCkBAIC00NzQsNyArNDc5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1JV
TlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAogICAgIHJ1bnRpbWUv
SW5mZXJyZWRWYWx1ZS5jcHAKICAgICBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCi0g
ICAgcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAogICAgIHJ1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5jcHAKICAgICBydW50aW1lL0ludGxDb2xsYXRvci5jcHAKICAgICBydW50aW1l
L0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVj
dCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6
Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVt
R3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1
cmF0aW9uIEluY2x1ZGU9IkRlYnVnU3VmZml4fFdpbjMyIj4KQEAgLTMyNCw3ICszMjQsNiBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZU9yaWdpbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlVHlwZS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb21wbGV4R2V0U3RhdHVzLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbnN0YW50U3RydWN0dXJlQ2hl
Y2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXERlZmVycmVkU291cmNlRHVtcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxERkdFeGl0UHJvZmlsZS5jcHAiIC8+CkBAIC0zMzcsMTAgKzMzNiwxMyBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSnVtcFRhYmxlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVj
aXNlSnVtcFRhcmdldHMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcUHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxQdXRCeUlkVmFyaWFudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxSZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4KQEAgLTM2NSw2ICszNjcsOCBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJTY29wZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcml0aE1vZGUuY3BwIiAvPgpA
QCAtNDMzLDYgKzQzNyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWlu
aWZpZWRHcmFwaC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWlu
aWZpZWROb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNb3ZI
aW50UmVtb3ZhbFBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR05vZGUuY3BwIiAvPgpAQCAtNzI5LDcgKzczNCw2IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZGV4aW5nVHlwZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRsQ29sbGF0b3Iu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRsQ29sbGF0b3JD
b25zdHJ1Y3Rvci5jcHAiIC8+CkBAIC05OTEsNyArOTk1LDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVUeXBlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxDb21tZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxDb21wbGV4R2V0U3RhdHVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxEYXRhRm9ybWF0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERlZmVycmVkU291cmNlRHVtcC5oIiAvPgpA
QCAtMTAwOSwxMSArMTAxMiwxNCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXExMSW50Q2FsbExpbmtJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9w
Y29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3BlcmFuZHMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxQdXRLaW5kLmgiIC8+CkBAIC0xMDQ5LDYgKzEwNTUsOCBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0VmFsdWUu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGphY2VuY3lMaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQWxsb2NhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHQW5hbHlzaXMuaCIgLz4KQEAgLTExNDEsNiArMTE0OSw3IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRJRC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05haXZlRG9taW5hdG9ycy5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuaCIgLz4KQEAgLTE1NDQsNyArMTU1Myw2IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludDE2QXJyYXkuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50MzJBcnJheS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnQ4QXJyYXkuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGxDb2xsYXRvci5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5o
IiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NzYwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDggQEAKIAkJMEYxM0UwNEUx
NjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5k
ZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1v
blNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTcyNUZGMUI0ODcx
OUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdN
aW5pZmllZEdyYXBoLmNwcCAqLzsgfTsKKwkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8qIERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKKwkJMEYxOEQzRDAxQjU1QTZFMDAw
MkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAv
KiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcCAqLzsgfTsKIAkJMEYxOTBDQUQxODlEODJGNjAwMEFFNUYwIC8qIFBy
b2ZpbGVySmV0dGlzb25SZWFzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29u
UmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYxREQ4NEExOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUREODQ5MThBOTQ1QkUwMDI2RjNG
QSAvKiBKU0NJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTI5Myw4ICsyOTUsNiBAQAogCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYg
LyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0I3RTJBMTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGM0QwQkJDMTk0QTQxNDMwMEZDOUNGOSAvKiBD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmNwcCAqLzsgfTsKLQkJMEYzRDBCQkQxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFBQjE5
RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8q
IERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTg4LDYgKzU4OCwxNCBAQAogCQkwRkQy
QzkyNDE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNG
IC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIw
MTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyODE0MTE1
RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmgg
Ki87IH07CisJCTBGRDNFNDAxMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGRDNFNDAyMUI2
MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNF
NDAwMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkQzRTQwOTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0
MDMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLzsgfTsK
KwkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNDFC
NjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQzRTQwQjFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZEM0U0MEMxQjYxOEI2
NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJv
cGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNw
cCAqLzsgfTsKKwkJMEZEM0U0MEUxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQw
ODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNF
NzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5j
cHAgKi87IH07CiAJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFEMDE1
NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAg
Ki87IH07CkBAIC02OTIsNiArNzAwLDggQEAKIAkJMEZGMEYxOUUxNkI3MkEwQjAwNURGOTVCIC8q
IERGR0VkZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNEI1MUIxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0VkZ2UuY3BwICovOyB9OwogCQkwRkYw
RjE5RjE2QjcyQTE3MDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUyMTE2QjYyNzhE
MDAzRjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgKi87IH07CiAJCTBGRjBGMUEw
MTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUyMjE2QjYyNzhEMDAzRjY5
NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRjJDRDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdN
dWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuY3BwICovOyB9OworCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRjJDRDVBMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRjQyNzMxMTU4RUJENTQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzJGMTU4RUJENDQwMDRDQjlG
RiAvKiBEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkY0MjczMjE1OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1i
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjQyNzMwMTU4RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovOyB9Owog
CQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzQxNThFQkQ5NDAwNENC
OUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyAqLzsgfTsKQEAgLTE0MTEsOCArMTQyMSw2IEBACiAJCUE3
ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYg
LyogU3ludGF4Q2hlY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg1MDdENTE3Q0JDNkZE
MDAxMUY2RTcgLyogTWFwRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE3ODVGNkJDMThDNTUzRkUwMEYxMDYyNiAvKiBTcGlsbFJlZ2lzdGVy
c01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGlsbFJlZ2lzdGVyc01vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzg4NTNGOTE3OTcyNjI5
MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07Ci0JCUE3ODg1M0ZBMTc5NzI2MjkwMDE0
NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4
QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgKi87IH07CiAJ
CUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZEMTc5NzM4Qjgw
MDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAqLzsgfTsKIAkJQTc4QTk3NzYxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RTE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxp
emVyLmNwcCAqLzsgfTsKQEAgLTE4NzksNiArMTg4Nyw4IEBACiAJCTBGMTNFMDRDMTYxNjRBMUIw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5kZXhpbmdUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxNzI1RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWluaWZpZWRH
cmFwaC5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRmZy9ERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjE4RDNDRTFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE5MENBQTE4OUQ4MkY2MDAwQUU1
RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlckpldHRpc29uUmVhc29uLmg7
IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRpc29uUmVhc29uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMUREODQ5MThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjQsOCArMjA3NCw2IEBACiAJCTBGM0IzQTJBMTU0NzRG
RjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdWYWxpZGF0ZS5oOyBwYXRoID0gZGZnL0RGR1ZhbGlkYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsVmFyaWFudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I3RTI1MTlBMTFCODAwMEQ5QkM1
NiAvKiBDYWxsVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxs
VmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNEMEJCQTE5NEE0MTQz
MDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50
U3RydWN0dXJlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNFMDFB
ODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgcGF0aCA9
IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5oOyBwYXRo
ID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjM3MCw2ICsyMzc4LDE0IEBACiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3
ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cnVjdHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
M0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFD
QiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJp
dmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgcGF0aCA9
IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMzFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwNDFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0
MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDYxQjYxOEI2NjAw
QzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNv
bmRpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9wZXJ0
eUNvbmRpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA4MUI2
MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQ1NjUyMjE2QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9ja0lubGluZXMu
aDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0b3JzLmNwcDsg
cGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEODFBRDAxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0Rv
bWluYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NjksNiArMjQ4NSw4
IEBACiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVj
dXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGMDU0RjgxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9u
RnV6ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENTkxQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgcGF0aCA9
IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRjJDRDVBMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oOyBwYXRoID0gZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzYXNzZW1ibGVyLmg7IHBh
dGggPSBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRjQyNzMwMTU4RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVy
LmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2
X2RlY29kZS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfZGVjb2Rl
LmM7IHBhdGggPSBkaXNhc3NlbWJsZXIvdWRpczg2L3VkaXM4Nl9kZWNvZGUuYzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyMTMsOCArMzIzMSw2IEBACiAJCUE3N0YxODIwMTY0MDg4
QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODI0MTY0
MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJNb2Rl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2
RTcgLyogTWFwRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBF
NCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZDMTc5NzM4
QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHRmFpbGVkRmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdG
YWlsZWRGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2
RDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0Zh
aWxlZEZpbmFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RTE3
OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmluYWxpemVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1NTEsOCArNDU2Nyw2IEBACiAJ
CQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUE3QThB
RjJDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FE
QjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLywKLQkJCQlBNzg4NTNGNzE3OTcyNjI5MDAx
NDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCi0JCQkJQTc4ODUzRjgxNzk3
MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1
QjBFMTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2
N0EwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMUI5RTIz
MzFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yLmNwcCAqLywKQEAgLTQ5NTUsNiArNDk2
OSwxMCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdB
YnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGRDNF
NDAwMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCAqLywKKwkJCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkwRjE4RDNDRTFCNTVBNkUwMDAyQzVD
OUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMEY2NkUxNjgx
NERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLywKIAkJCQkwRkI0QjUxOTE2
QjYyNzcyMDAzRjY5NkIgLyogREZHQWxsb2NhdG9yLmggKi8sCiAJCQkJQTczNzgxMDkxNzk5RUEy
RTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggKi8sCkBAIC01MTE0LDYgKzUxMzIsOCBAQAogCQkJ
CTBGMkJEQzNFMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKIAkJCQkw
RjhGMTQzMTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgKi8s
CiAJCQkJMEY4RjE0MzIxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
aCAqLywKKwkJCQkwRkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNl
dERhdGEuY3BwICovLAorCQkJCTBGRjJDRDVBMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YS5oICovLAogCQkJCTBGQzNDQ0ZBMTlBREE0MTAwMDZBQzcyQSAvKiBERkdO
YWl2ZURvbWluYXRvcnMuY3BwICovLAogCQkJCTBGQzNDQ0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdOYWl2ZURvbWluYXRvcnMuaCAqLywKIAkJCQlBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyog
REZHTmF0dXJhbExvb3BzLmNwcCAqLywKQEAgLTUzODUsOCArNTQwNSw2IEBACiAJCQkJMEYwQjgz
QTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8sCiAJCQkJMEY2RkM3NEUxOTYxMTBB
ODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwICovLAogCQkJCTBGNkZDNzRGMTk2MTEw
QTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggKi8sCi0JCQkJMEYzRDBCQkExOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovLAotCQkJCTBGM0QwQkJC
MTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi8sCiAJCQkJMEY0
MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLywKIAkJCQkwRkM3MTJEQzE3
Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLywKIAkJ
CQkwRkM3MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmggKi8sCkBAIC01NDE5LDYgKzU0MzcsMTAgQEAKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5
ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0Ex
NEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJ
CQkxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAq
LywKKwkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwICovLAorCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5oICovLAorCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCisJCQkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8sCiAJCQkJOTY5QTA3OTQwRUQxRDNB
RTAwRjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgx
IC8qIE9wY29kZS5oICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5k
cy5oICovLApAQCAtNTQzMCw2ICs1NDUyLDggQEAKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJB
RTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0Yw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUz
N0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKKwkJCQkwRkQzRTQwNzFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLAorCQkJCTBGRDNFNDA4MUI2
MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGOTMzMjk5MTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGOTNCNEE3MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCkBAIC01OTQ1LDYgKzU5NjksNyBAQAog
CQkJCUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRDQjlGRiAvKiBERkdEaXNh
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAv
KiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwRTFCNjE4QjY2MDBD
ODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3
MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjIwMCw2ICs2MjI1LDcgQEAKIAkJCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIg
LyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4ODE4NTY4
MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNw
YXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8q
IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4
REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JS
dW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjIwOSw3ICs2MjM1LDYgQEAKIAkJCQlB
N0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50
ZXJuYWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5
NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYy
MDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKQEAgLTYyMjIsNiArNjI0Nyw3
IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMThEM0QwMUI1NUE2RTAw
MDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNh
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjQzOCw3ICs2NDY0LDYgQEAKIAkJCQlCQzE4
QzQzQzBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjNEMEJCRDE5NEE0MTQzMDBGQzlDRjkg
LyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MwMDhDRTcx
ODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4
RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTY1MjIsOSArNjU0NywxMSBAQAogCQkJCTJBQUQ5NjRBMTg1Njk0MTcw
MDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3
MUQgLyogUmVnLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAg
LyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUg
LyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4
MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQzNDBBNDg1MUE5MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjYwMiw2ICs2NjI5
LDcgQEAKIAkJCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVy
ZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIg
LyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQw
QzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVy
ZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNzM5Nyw2
ICs3NDI1LDcgQEAKIAkJCQkwRkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50
cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgx
NzA5NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4RDUw
MDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDA3LDYg
Kzc0MzYsNyBAQAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93
ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0Ey
QzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRjJDRDVCMUI2MUE0
RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjIzNUJERjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExP
dXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDU4LDYgKzc0ODgsNyBAQAogCQkJCUE1Q0VF
RTE0MTg3RjNCQUQwMEU1NUM5OSAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGNjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0U0
MDExQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y3QzE4NDAzNjAzMDBCRkNFMjcg
LyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFG
NzM4MkMxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVGRDAwODExODlCMTkxQTAwNjMzMjMxIC8qIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0NjksNyArNzUwMCw2IEBACiAJCQkJQTUzMjQzOEIx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTBFNEI2MTE4ODA5REQ1MDA2OEE0NkQgLyogSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJ
bnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTc4ODUzRjkxNzk3MjYyOTAw
MTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVybmFsRnVuY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyOUQ3RDQwRUQyMTI4MjAwQjg5NjE5IC8qIEludGVycHJldGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTcwMTEzRDRCMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9w
ZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDg2LDYgKzc1MTYsNyBAQAogCQkJCUJD
REQ1MUVCMEZCOERGNzQwMDRBOEJEQyAvKiBKSVRPcGNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3MTIzNkU1MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2RTg0NUExOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwOTFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE1ODdE
NkQxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlB
Y2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTQxLDcgKzc1NzIsNiBAQAogCQkJCUE1MDNG
QTFCMTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAx
M0U3QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0QwQkJDMTk0QTQxNDMw
MEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc3MzcsNiArNzc2Nyw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMy
RDAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBF
QkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2
MTMgLyogSlNKb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYz
NjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzc0Niw2ICs3Nzc3LDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5
RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAw
OUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1
NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgICAgIFN0
cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiA9IDA7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0
ID0gMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NU
eXBlKSB7CkBAIC0zNzAsMTEgKzM2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRD
YWNoZVN0YXR1cygKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByb3RvdHlw
ZVN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50
ZigiLCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAg
ICAgICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7CiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CkBA
IC0zODIsOSArMzc2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVz
KAogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigiKCIpOwogICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0
dXJlKG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBDaGFpbihvdXQsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ1NiwxMCArNDUwLDggQEAgdm9pZCBDb2RlQmxvY2s6
OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAicHJldiIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1
cmUuZ2V0KCksIGlkZW50KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0Iiwgc3R1YkluZm8udS5wdXRCeUlk
VHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAo
U3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFp
bi5nZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAg
ICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgICAgICAgICBv
dXQucHJpbnRmKCJsaXN0ID0gWyIpOwpAQCAtNDgzLDEwICs0NzUsOCBAQCB2b2lkIENvZGVCbG9j
azo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1w
U3RydWN0dXJlKG91dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwg
aWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGFjY2Vzcy5jaGFpbigpLCBpZGVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFj
Y2Vzcy5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIsICIsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJ1bmtub3du
Iik7CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw5ICszOCw2IEBAIHZvaWQgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXIK
ICAgICAgICAgZGF0YUxvZygiRmlyaW5nIHdhdGNocG9pbnQgIiwgUmF3UG9pbnRlcih0aGlzKSwg
IiBvbiAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogCiAgICAgbV9jb2RlQmxvY2stPmpldHRpc29u
KFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRp
bWl6YXRpb24sICZkZXRhaWwpOwotCi0gICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgIHJlbW92
ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzYw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvbXBs
ZXhHZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLAotICAgIHVuc2lnbmVkIGNoYWluQ291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CisgICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRo
YXQKICAgICAvLyBoYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdl
IGRvbid0CkBAIC00MCwzMiArMzksMzQgQEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3Rh
dHVzOjpjb21wdQogICAgIC8vIHRoYXQsIHlldC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCiAgICAgCisgICAgQVNTRVJUKGNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpOworICAgIAogICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRo
SW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgp
OwogICAgIAogICAgIENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQg
PSBJbmxpbmVhYmxlOwogICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbkNvdW50KSB7Ci0gICAg
ICAgIHJlc3VsdC5tX2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4o
Ci0gICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5D
b3VudCkpOworICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1
bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAgIAotICAgICAgICBpZiAo
IXJlc3VsdC5tX2NoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgaWYgKCFyZXN1bHQubV9j
b25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICByZXR1
cm4gc2tpcCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xv
d1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLSAgICAgICAgICAgIHx8IHJlc3VsdC5tX2No
YWluLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQorCisgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mU2xvdEJhc2VzID0KKyAgICAgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldC5udW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2Vu
Y2UpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlNsb3RCYXNlcyA8PSAxKTsKKyAg
ICAgICAgaWYgKCFudW1iZXJPZlNsb3RCYXNlcykgeworICAgICAgICAgICAgLy8gQ3VycmVudGx5
IHdlIGRvbid0IHN1cHBvcnQgbWlzc2VzLiBUaGF0J3MgYSBidW1tZXIuCisgICAgICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1Mgog
ICAgICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKKyAgICAgICAgfQorICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlID0gcmVzdWx0Lm1fY29uZGl0aW9uU2V0LnNsb3RC
YXNlQ29uZGl0aW9uKCk7CisgICAgICAgIEFTU0VSVChiYXNlLmtpbmQoKSA9PSBQcm9wZXJ0eUNv
bmRpdGlvbjo6UHJlc2VuY2UpOwogICAgICAgICAKLSAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRP
YmplY3QgPSByZXN1bHQubV9jaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICAgICAgU3Ry
dWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gcmVzdWx0Lm1fY2hhaW4tPmxhc3QoKTsKLSAgICAg
ICAgCi0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9iamVjdCk7
Ci0gICAgICAgIAotICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzKTsKLSAgICB9CisgICAgICAgIHJlc3VsdC5tX29mZnNl
dCA9IGJhc2Uub2Zmc2V0KCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IGhlYWRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgIAogICAgIGlmICghaXNW
YWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0
aCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0
dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw4IEBA
CiAjaWZuZGVmIENvbXBsZXhHZXRTdGF0dXNfaAogI2RlZmluZSBDb21wbGV4R2V0U3RhdHVzX2gK
IAotI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRl
ICJQcm9wZXJ0eU9mZnNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTgwLDcgKzgwLDYgQEAg
cHVibGljOgogICAgIENvbXBsZXhHZXRTdGF0dXMoKQogICAgICAgICA6IG1fa2luZChTaG91bGRT
a2lwKQogICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9hdHRy
aWJ1dGVzKFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05NywyMSArOTYsMTYgQEAg
cHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgQ29tcGxleEdldFN0YXR1cyBjb21wdXRl
Rm9yKAotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0
cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAgICB1bnNpZ25lZCBjaGFpbkNv
dW50LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBoZWFkU3Ry
dWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KLSAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmlj
VmFsdWU7IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFpbi5nZXQoKTsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAog
cHJpdmF0ZToKICAgICBLaW5kIG1fa2luZDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
LSAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXM7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7
Ci0gICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVj
dHVyZUNoZWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb25zdGFu
dFN0cnVjdHVyZUNoZWNrLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi12b2lkIENvbnN0YW50U3RydWN0dXJlQ2hlY2s6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgb3V0LnBy
aW50KAotICAgICAgICAiKENoZWNrIGlmICIsIGluQ29udGV4dChKU1ZhbHVlKG1fY29uc3RhbnQp
LCBjb250ZXh0KSwgIiBoYXMgc3RydWN0dXJlICIsCi0gICAgICAgIHBvaW50ZXJEdW1wSW5Db250
ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0KSwgIikiKTsKLX0KLQotdm9pZCBDb25zdGFudFN0cnVj
dHVyZUNoZWNrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29u
dGV4dChvdXQsIG51bGxwdHIpOwotfQotCi1TdHJ1Y3R1cmUqIHN0cnVjdHVyZUZvcihjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIEpTQ2VsbCogY29uc3RhbnQpCi17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yLnNpemUoKTsgaS0tOykgewotICAgICAgICBp
ZiAodmVjdG9yW2ldLmNvbnN0YW50KCkgPT0gY29uc3RhbnQpCi0gICAgICAgICAgICByZXR1cm4g
dmVjdG9yW2ldLnN0cnVjdHVyZSgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
Ym9vbCBhcmVDb21wYXRpYmxlKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGEs
IGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGIpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gYS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBvdGhlclN0cnVj
dHVyZSA9IHN0cnVjdHVyZUZvcihiLCBhW2ldLmNvbnN0YW50KCkpOwotICAgICAgICBpZiAoIW90
aGVyU3RydWN0dXJlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChhW2ldLnN0
cnVjdHVyZSgpICE9IG90aGVyU3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBtZXJnZUludG8oY29uc3QgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgc291cmNlLCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJiB0YXJnZXQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc291cmNlLnNpemUoKTsgaS0t
OykgewotICAgICAgICBpZiAoc3RydWN0dXJlRm9yKHRhcmdldCwgc291cmNlW2ldLmNvbnN0YW50
KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRhcmdldC5hcHBlbmQoc291cmNl
W2ldKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNr
LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b25zdGFudFN0cnVjdHVyZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENv
bnN0YW50U3RydWN0dXJlQ2hlY2tfaAotI2RlZmluZSBDb25zdGFudFN0cnVjdHVyZUNoZWNrX2gK
LQotI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjayB7Ci1wdWJsaWM6Ci0gICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjaygpCi0gICAgICAg
IDogbV9jb25zdGFudChudWxscHRyKQotICAgICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogY29u
c3RhbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IG1fY29uc3RhbnQoY29uc3Rh
bnQpCi0gICAgICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCEhbV9jb25zdGFudCA9PSAhIW1fc3RydWN0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25zdGFudDsgfQotICAgIAotICAgIEpT
Q2VsbCogY29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50OyB9Ci0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQotICAgIAotICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0g
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIEpT
Q2VsbCogbV9jb25zdGFudDsKLSAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwotfTsKLQotdHlw
ZWRlZiBWZWN0b3I8Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjaywgMj4gQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvcjsKLQotU3RydWN0dXJlKiBzdHJ1Y3R1cmVGb3IoY29uc3QgQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yLCBKU0NlbGwqIGNvbnN0YW50KTsKLWJvb2wgYXJlQ29t
cGF0aWJsZShjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiwgY29uc3QgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYpOwotdm9pZCBtZXJnZUludG8oY29uc3QgQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVja1ZlY3RvciYgc291cmNlLCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9y
JiB0YXJnZXQpOwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2tfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTY5LDggKzE2OSw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclMKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlzdElu
ZGV4KS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29tcGxleEdldFN0
YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAg
ICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRl
eCkuY2hhaW4oKSwKLSAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluQ291
bnQoKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRl
eCkuY29uZGl0aW9uU2V0KCksIHVpZCk7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0
Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBsZXhH
ZXRTdGF0dXM6OlNob3VsZFNraXA6CkBAIC0yMDYsOCArMjA1LDggQEAgR2V0QnlJZFN0YXR1cyBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zm
c2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgV1RG
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNl
dChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAorICAgICAgICAgICAgICAg
ICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEY6Om1vdmUoY2FsbExpbmtT
dGF0dXMpKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
YXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzYwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDIzICszNCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZFZh
cmlhbnQ6OkdldEJ5SWRWYXJpYW50KAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJl
U2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQogICAg
IDogbV9zdHJ1Y3R1cmVTZXQoc3RydWN0dXJlU2V0KQotICAgICwgbV9hbHRlcm5hdGVCYXNlKG51
bGxwdHIpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX29mZnNl
dChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKFdURjo6bW92ZShjYWxsTGlua1N0YXR1
cykpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghY2hhaW4pOwotICAgIH0K
LSAgICAKLSAgICBpZiAoY2hhaW4gJiYgY2hhaW4tPnNpemUoKSkgewotICAgICAgICBtX2FsdGVy
bmF0ZUJhc2UgPSBjaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICAgICAgY2hhaW4tPmdh
dGhlckNoZWNrcyhtX2NvbnN0YW50Q2hlY2tzKTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvblNl
dC5pc0VtcHR5KCkpOwogICAgIH0KIH0KLQorICAgICAgICAgICAgICAgICAgICAgCiBHZXRCeUlk
VmFyaWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlk
VmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCkBAIC02Miw4ICs1OCw3IEBAIEdl
dEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXQKIEdldEJ5SWRWYXJpYW50JiBH
ZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKIHsK
ICAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OwotICAgIG1fY29uc3Rh
bnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwotICAgIG1fYWx0ZXJuYXRlQmFzZSA9
IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29u
ZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC03Miwy
OCArNjcsMjQgQEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAg
IHJldHVybiAqdGhpczsKIH0KIAotU3RydWN0dXJlU2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3Ry
dWN0dXJlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0
dXJuIHN0cnVjdHVyZVNldCgpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3Ry
dWN0dXJlRm9yKG1fY29uc3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoc3RydWN0dXJlKTsKLSAgICByZXR1cm4gc3RydWN0dXJlOwotfQotCiBib29sIEdl
dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIp
CiB7Ci0gICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSAhPSBvdGhlci5tX2FsdGVybmF0ZUJhc2UpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFhcmVD
b21wYXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQorCisg
ICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBtZXJnZUludG8ob3Ro
ZXIubV9jb25zdGFudENoZWNrcywgbV9jb25zdGFudENoZWNrcyk7CisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgIGlmICghbV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9u
U2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICBpZiAoIW1lcmdl
ZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90
QmFzZUNvbmRpdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBt
X2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAKICAgICBtX3N0cnVjdHVy
ZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMTIsMTAgKzEwMyw3IEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQo
UHJpbnQKICAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KAotICAgICAgICAiPCIsIGluQ29udGV4
dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsCi0gICAgICAgICJbIiwgbGlzdER1bXBJ
bkNvbnRleHQobV9jb25zdGFudENoZWNrcywgY29udGV4dCksICJdIik7Ci0gICAgaWYgKG1fYWx0
ZXJuYXRlQmFzZSkKLSAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNv
bnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CisgICAgICAgICI8Iiwg
aW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1fY29u
ZGl0aW9uU2V0LCBjb250ZXh0KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNl
dCgpKTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgb3V0LnByaW50KCIsIGNh
bGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI3LDkgKzI3LDggQEAKICNkZWZpbmUgR2V0QnlJZFZhcmlhbnRfaAogCiAjaW5jbHVkZSAi
Q2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiCi0j
aW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCiAKQEAgLTQzLDcgKzQy
LDcgQEAgY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50
KAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNl
dCgpLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAotICAgICAgICBjb25z
dCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
KCksCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXMgPSBudWxscHRyKTsKICAgICAKICAgICB+R2V0QnlJZFZhcmlhbnQoKTsKQEAgLTU1LDkgKzU0
LDEwIEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1Nl
dCgpOyB9CiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJl
dHVybiBtX3N0cnVjdHVyZVNldDsgfQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KLSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVj
a3M7IH0KLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0
ZXJuYXRlQmFzZTsgfQotICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CisK
KyAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgYSBjb25kaXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBp
cyBhIHByb3RvdHlwZSBsb2FkLgorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAog
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAg
ICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
TGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAtNzAsOCArNzAsNyBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBHZXRCeUlkU3RhdHVzOwogICAgIAogICAgIFN0cnVjdHVyZVNldCBtX3N0
cnVjdHVyZVNldDsKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRD
aGVja3M7Ci0gICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNl
dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJU
cmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmlu
dCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnBy
aW50KCI8IiwgaW5Db250ZXh0KEpTVmFsdWUobV9vYmplY3QpLCBjb250ZXh0KSwgIjogIiwgaW5D
b250ZXh0KG1fY29uZGl0aW9uLCBjb250ZXh0KSwgIj4iKTsKK30KKwordm9pZCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJ
bkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
ZGl0aW9uLmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVj
dHVyZSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3QKK3sKKyAg
ICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1f
b2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246
OnZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uLnZhbGlkaXR5UmVxdWlyZXNJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKK30KKworYm9vbCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KG1fb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246Omlz
U3RpbGxWYWxpZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
b25kaXRpb24uaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSwgbV9vYmplY3QpOworfQorCitib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoKSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdGlsbFZh
bGlkKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25k
aXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eSgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkobV9vYmplY3QtPnN0cnVjdHVy
ZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1
bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoc3RydWN0dXJlLCBtX29iamVjdCwgZWZmb3J0KTsKK30KKworYm9vbCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkg
Y29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgcmV0dXJuIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9v
YmplY3QtPnN0cnVjdHVyZSgpLCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjppc1dhdGNoYWJsZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlD
b25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29uZGl0aW9uLmlzV2F0Y2hhYmxlKHN0cnVjdHVyZSwgbV9vYmplY3QsIGVmZm9ydCk7Cit9
CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29u
ZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIGlmICghKnRo
aXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNXYXRjaGFibGUo
bV9vYmplY3QtPnN0cnVjdHVyZSgpLCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vYmplY3Qp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1fY29uZGl0aW9uLmlz
U3RpbGxMaXZlKCk7Cit9CisKK3ZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRl
UmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZCkgY29uc3QKK3sKKyAg
ICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdHJhY2tlZC5jaGVjayht
X29iamVjdCk7CisgICAgbV9jb25kaXRpb24udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWQpOwor
fQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0
ZW1wdFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoKSBjb25zdAoreworICAgIFByb3Bl
cnR5Q29uZGl0aW9uIHJlc3VsdCA9IGNvbmRpdGlvbigpLmF0dGVtcHRUb01ha2VFcXVpdmFsZW5j
ZVdpdGhvdXRCYXJyaWVyKG9iamVjdCgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uKG9iamVjdCgpLCByZXN1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uX2gKKyNkZWZpbmUgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25faAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJQcm9w
ZXJ0eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworY2xhc3MgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24geworcHVibGljOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkKKyAgICAg
ICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIHRva2VuKQorICAg
ICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV9jb25kaXRpb24odG9rZW4pCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbihKU09iamVjdCog
b2JqZWN0LCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQorICAgICAgICA6IG1f
b2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2NvbmRpdGlvbihjb25kaXRpb24pCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2VX
aXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAg
IHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1
bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgb2Zmc2V0LCBhdHRyaWJ1
dGVzKTsgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsCisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAg
ICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7
CisgICAgICAgIHJldHVybiBwcmVzZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBvZmZz
ZXQsIGF0dHJpYnV0ZXMpOworICAgIH0KKworICAgIC8vIE5PVEU6IFRoZSBwcm90b3R5cGUgaXMg
dGhlIHN0b3JlZFByb3RvdHlwZSwgbm90IHRoZSBwcm90b3R5cGVGb3JMb29rdXAuCisgICAgc3Rh
dGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VXaXRob3V0QmFycmllcigKKyAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25k
aXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6YWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJv
dG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmpl
Y3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VXaXRob3V0
QmFycmllcihvYmplY3QsIHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKAor
ICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVj
dCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5t
X2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFy
cmllcih1aWQsIHByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisg
ICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIGlmIChv
d25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAg
cmV0dXJuIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCBwcm90b3R5
cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1
aXZhbGVuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0
OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZh
bGVuY2VXaXRob3V0QmFycmllcih1aWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxl
bmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
b3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAg
IHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCB2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29uZGl0
aW9uOyB9OworICAgIAorICAgIEpTT2JqZWN0KiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdDsgfQorICAgIFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fY29uZGl0aW9uOyB9CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmtpbmQoKTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS51aWQoKTsgfQorICAgIGJvb2wg
aGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uKCkuaGFzT2Zmc2V0KCk7IH0KKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5vZmZz
ZXQoKTsgfQorICAgIHVuc2lnbmVkIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBjb25k
aXRpb24oKS5oYXNBdHRyaWJ1dGVzKCk7IH0KKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkgY29u
c3QgeyByZXR1cm4gY29uZGl0aW9uKCkuYXR0cmlidXRlcygpOyB9CisgICAgYm9vbCBoYXNQcm90
b3R5cGUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNQcm90b3R5cGUoKTsgfQorICAg
IEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5wcm90b3R5
cGUoKTsgfQorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRp
dGlvbigpLmhhc1JlcXVpcmVkVmFsdWUoKTsgfQorICAgIEpTVmFsdWUgcmVxdWlyZWRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnJlcXVpcmVkVmFsdWUoKTsgfQorICAgIAorICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Cisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEpTT2JqZWN0Kj46
Omhhc2gobV9vYmplY3QpICsgbV9jb25kaXRpb24uaGFzaCgpOworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0CisgICAg
ICAgICAgICAmJiBtX2NvbmRpdGlvbiA9PSBvdGhlci5tX2NvbmRpdGlvbjsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fY29uZGl0aW9uLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7CisgICAgfQorICAgIAorICAgIC8vIFR3byBjb25kaXRpb25zIGFyZSBjb21wYXRpYmxlIGlm
IHRoZXkgYXJlIGlkZW50aWNhbCBvciBpZiB0aGV5IHNwZWFrIG9mIGRpZmZlcmVudCB1aWRzIG9y
CisgICAgLy8gZGlmZmVyZW50IG9iamVjdHMuIElmIGZhbHNlIGlzIHJldHVybmVkLCB5b3UgaGF2
ZSB0byBkZWNpZGUgaG93IHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0IC0KKyAgICAvLyBmb3IgZXhh
bXBsZSBpZiB0aGVyZSBpcyBhIFByZXNlbmNlIGFuZCBhbiBFcXVpdmFsZW5jZSB0aGVuIGluIHNv
bWUgY2FzZXMgeW91J2xsIHdhbnQgdGhlCisgICAgLy8gbW9yZSBnZW5lcmFsIG9mIHRoZSB0d28g
d2hpbGUgaW4gb3RoZXIgY2FzZXMgeW91J2xsIHdhbnQgdGhlIG1vcmUgc3BlY2lmaWMgb2YgdGhl
IHR3by4gVGhpcworICAgIC8vIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UgZm9yIGNvbnRyYWRpY3Rp
b25zLCBsaWtlIFByZXNlbmNlIGFuZCBBYnNlbmNlIG9uIHRoZSBzYW1lCisgICAgLy8gb2JqZWN0
L3VpZC4gQnkgY29udmVudGlvbiwgaW52YWxpZCBjb25kaXRpb25zIGFyZW4ndCBjb21wYXRpYmxl
IHdpdGggYW55dGhpbmcuCisgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMg
fHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKnRo
aXMgPT0gb3RoZXIgfHwgdWlkKCkgIT0gb3RoZXIudWlkKCkgfHwgb2JqZWN0KCkgIT0gb3RoZXIu
b2JqZWN0KCk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNlIHZhbGlkaXR5LWNoZWNraW5nIG1l
dGhvZHMgY2FuIG9wdGlvbmFsbHkgdGFrZSBhIFN0cnV0dXJlKiBpbnN0ZWFkIG9mIGxvYWRpbmcg
dGhlCisgICAgLy8gU3RydWN0dXJlKiBmcm9tIHRoZSBvYmplY3QuIElmIHlvdSdyZSBpbiB0aGUg
Y29uY3VycmVudCBKSVQsIHRoZW4geW91IG11c3QgdXNlIHRoZSBmb3JtcworICAgIC8vIHRoYXQg
dGFrZSBhbiBleHBsaWNpdCBTdHJ1Y3R1cmUqIGJlY2F1c2UgeW91IHdhbnQgdGhlIGNvbXBpbGVy
IHRvIG9wdGltaXplIGZvciB0aGUgc2FtZQorICAgIC8vIHN0cnVjdHVyZSB0aGF0IHlvdSB2YWxp
ZGF0ZWQgKGkuZS4gYXZvaWQgYSBUT0NUT1UgcmFjZSkuCisgICAgCisgICAgLy8gQ2hlY2tzIGlm
IHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJl
IGludGVyY2VwdGVkLiBWYWxpZGl0eQorICAgIC8vIGRvZXMgbm90IHJlcXVpcmUgd2F0Y2hwb2lu
dHMgb24gdGhlIG9iamVjdC4KKyAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OworICAgIGJvb2wg
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSBjb25zdDsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCBhbiBpbXB1cmUg
cHJvcGVydHkgd2F0Y2hwb2ludCB0byBlbnN1cmUgdmFsaWRpdHkgZXZlbiBpZgorICAgIC8vIGlz
U3RpbGxWYWxpZEFjY29yZGluZ1RvU3RydWN0dXJlKCkgcmV0dXJuZWQgdHJ1ZS4KKyAgICBib29s
IHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29u
c3Q7CisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkg
Y29uc3Q7CisKKyAgICAvLyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBzdGlsbCBob2xkcy4gTWF5
IGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgaWYgdGhlIG9iamVjdCBhbmQKKyAgICAvLyBz
dHJ1Y3R1cmUgYWxvbmUgZG9uJ3QgZ3VhcmFudGVlIHRoZSBjb25kaXRpb24uIE5vdGUgdGhhdCB0
aGlzIG1heSByZXR1cm4gdHJ1ZSBpZiB0aGUKKyAgICAvLyBjb25kaXRpb24gc3RpbGwgcmVxdWly
ZXMgc29tZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0IGluIGFkZGl0aW9uIHRvIGNoZWNraW5n
IHRoZQorICAgIC8vIHN0cnVjdHVyZS4gSWYgeW91IHdhbnQgdG8gY2hlY2sgaWYgdGhlIGNvbmRp
dGlvbiBob2xkcyBieSB1c2luZyB0aGUgc3RydWN0dXJlIGFsb25lLAorICAgIC8vIHVzZSBzdHJ1
Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKS4KKyAgICBib29sIGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUq
KSBjb25zdDsKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIAorICAgIC8vIFNo
b3J0aGFuZCBmb3IgY29uZGl0aW9uKCkuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZSkuCisgICAgYm9v
bCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBz
dHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHkoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBz
ZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZSBh
bmQgcG9zc2libHkgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQuCisgICAgYm9vbCBpc1dh
dGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBTdHJ1Y3R1
cmUqLAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJv
cGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIGJvb2wgaXNXYXRjaGFi
bGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgUHJvcGVydHlDb25k
aXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFu
Z2VzKSBjb25zdDsKKworICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFu
ZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAg
Ly8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLgorICAgIGJvb2wgaXNXYXRjaGFibGUoCisg
ICAgICAgIFN0cnVjdHVyZSosCisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxp
dHlFZmZvcnQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAg
Ym9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0
eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAK
KyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uZGl0aW9uKCkud2F0Y2hpbmdSZXF1aXJl
c1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCk7CisgICAgfQorICAgIGJvb2wgd2F0Y2hp
bmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uKCkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgp
OworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdHMgaW52b2x2
ZWQgaW4gdGhpcyBhcmUgc3RpbGwgbGl2ZS4KKyAgICBib29sIGlzU3RpbGxMaXZlKCkgY29uc3Q7
CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5j
ZXMmKSBjb25zdDsKKworICAgIGJvb2wgaXNWYWxpZFZhbHVlRm9yUHJlc2VuY2UoSlNWYWx1ZSB2
YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS5pc1ZhbGlkVmFs
dWVGb3JQcmVzZW5jZSh2YWx1ZSk7CisgICAgfQorCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24gYXR0ZW1wdFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBKU09iamVjdCogbV9vYmplY3Q7CisgICAgUHJvcGVydHlDb25kaXRpb24gbV9j
b25kaXRpb247Cit9OworCitzdHJ1Y3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8SlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgor
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmZvck9iamVjdChKU09iamVjdCogb2JqZWN0KSBjb25zdAoreworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7Cisg
ICAgICAgIGlmIChjb25kaXRpb24ub2JqZWN0KCkgPT0gb2JqZWN0KQorICAgICAgICAgICAgcmV0
dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
KCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0Ojpmb3JDb25kaXRpb25LaW5kKAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGtpbmQp
IGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0ga2luZCkKKyAg
ICAgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbigpOworfQorCit1bnNpZ25lZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6bnVtYmVyT2ZDb25kaXRpb25zV2l0aEtpbmQoUHJvcGVydHlDb25kaXRpb246OktpbmQga2lu
ZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChj
b25kaXRpb24ua2luZCgpID09IGtpbmQpCisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
aGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBudW1iZXJPZkNv
bmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpID09IDE7Cit9CisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90
QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVz
dWx0OworICAgIHVuc2lnbmVkIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0
aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIG51bUZvdW5kKys7CisgICAgICAgIH0K
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobnVtRm91bmQgPT0gMSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6Om1lcmdlZFdpdGgoCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFvdGhlci5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkKCk7CisKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVy
dHlDb25kaXRpb24+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAgICAg
cmVzdWx0LmFwcGVuZFZlY3RvcihtX2RhdGEtPnZlY3Rvcik7CisgICAgCisgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgbmV3Q29uZGl0aW9uIDogb3RoZXIpIHsKKyAgICAg
ICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgZXhpc3RpbmdDb25kaXRpb24g
OiAqdGhpcykgeworICAgICAgICAgICAgaWYgKG5ld0NvbmRpdGlvbiA9PSBleGlzdGluZ0NvbmRp
dGlvbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghbmV3Q29u
ZGl0aW9uLmlzQ29tcGF0aWJsZVdpdGgoZXhpc3RpbmdDb25kaXRpb24pKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpbnZhbGlkKCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5ld0NvbmRp
dGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbm9uRW1wdHkocmVzdWx0KTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZh
bGlkaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNW
YWxpZGl0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vu
c3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAorewor
ICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9y
IChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAg
ICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6
Om5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGZvciAoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlm
IChjb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxMaXZlKCkgY29uc3QKK3sK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhp
cykgeworICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAg
ICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG91dC5wcmludCgiWyIpOworICAgIGlmIChtX2RhdGEpCisgICAgICAgIG91dC5wcmludChs
aXN0RHVtcEluQ29udGV4dChtX2RhdGEtPnZlY3RvciwgY29udGV4dCkpOworICAgIG91dC5wcmlu
dCgiXSIpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwor
fQorCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRp
dGlvbjo6S2luZCBjb25kaXRpb25LaW5kKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
b2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygi
Q3JlYXRpbmcgY29uZGl0aW9uICIsIGNvbmRpdGlvbktpbmQsICIgZm9yICIsIHBvaW50ZXJEdW1w
KHN0cnVjdHVyZSksICJcbiIpOworCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0
OworICAgIHN3aXRjaCAoY29uZGl0aW9uS2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRp
b246OlByZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0
cmlidXRlcyk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAg
ICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgICAgICByZXN1bHQgPSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2Uodm0sIG93bmVyLCBvYmplY3QsIHVpZCwg
b2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHJv
cGVydHlDb25kaXRpb246OkFic2VuY2U6IHsKKyAgICAgICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb246OmFic2VuY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlk
LCBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0
ZXI6IHsKKyAgICAgICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VP
ZlNldHRlcigKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3Ry
dWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgIH0KKworICAgIGlm
ICghcmVzdWx0LnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
KCJGYWlsZWQgdG8gY3JlYXRlIGNvbmRpdGlvbjogIiwgcmVzdWx0LCAiXG4iKTsKKyAgICAgICAg
cmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgfQorCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2coIk5ldyBjb25kaXRpb246ICIsIHJlc3VsdCwgIlxuIik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZW51bSBDb25jdXJyZW5jeSB7CisgICAgTWFpblRocmVh
ZCwKKyAgICBDb25jdXJyZW50Cit9OwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK09iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICBWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVj
dCogcHJvdG90eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yLAorICAgIENvbmN1cnJlbmN5IGNv
bmN1cnJlbmN5ID0gTWFpblRocmVhZCkKK3sKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25k
aXRpb24+IGNvbmRpdGlvbnM7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIHN0cnVjdHVyZTogIiwgcG9p
bnRlckR1bXAoc3RydWN0dXJlKSwgIlxuIik7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc1Byb3h5KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkl0J3MgYSBwcm94eSwgc28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAg
cmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChnbG9iYWxPYmplY3QpOworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVs
bCgpKSB7CisgICAgICAgICAgICBpZiAoIXByb3RvdHlwZSkgeworICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZWFjaGVkIGVuZCB1cCBw
cm90b3R5cGUgY2hhaW4gYXMgZXhwZWN0ZWQsIGRvbmUuXG4iKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWRseSByZWFjaGVkIGVuZCBvZiBwcm90b3R5cGUgY2hh
aW4sIHNvIGludmFsaWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgICAgICBzdHJ1Y3R1
cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB3
ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgcmVwZWF0ZWRseSwgaXQncyBhIGdvb2QgYmV0IHRo
YXQgaXQgc2hvdWxkIG5vdCBiZQorICAgICAgICAvLyB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4K
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlm
IChjb25jdXJyZW5jeSA9PSBNYWluVGhyZWFkKQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+
ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIG9iamVjdCk7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiQ2Fubm90IGZsYXR0ZW4gZGljdGlvbmFyeSB3aGVuIG5vdCBvbiBtYWluIHRocmVhZCwg
c28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6aW52YWxpZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFmdW5jdG9yKGNvbmRpdGlvbnMsIG9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkZ1bmN0b3IgZmFpbGVkLCBpbnZhbGlk
LlxuIik7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omlu
dmFsaWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90
b3R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIlJlYWNoZWQgZGVzaXJlZCBwcm90b3R5cGUsIGRvbmUuXG4iKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2coIlJldHVybmluZyBjb25kaXRpb25zOiAiLCBsaXN0RHVtcChjb25kaXRpb25zKSwgIlxuIik7
CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpub25FbXB0eShjb25kaXRp
b25zKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlv
bnMoCisgICAgICAgIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1
cmUsIG51bGxwdHIsCisgICAgICAgIFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
PiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRl
Q29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlv
bnMoCisgICAgICAgIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1
cmUsIG51bGxwdHIsCisgICAgICAgIFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
PiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRl
Q29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlT2ZTZXR0ZXIpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQocmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKK30KKworT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVh
ZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKQoreworICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlwZSwKKyAgICAg
ICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09i
amVjdCogb2JqZWN0KSAtPiBib29sIHsKKyAgICAgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpL
aW5kIGtpbmQgPQorICAgICAgICAgICAgICAgIG9iamVjdCA9PSBwcm90b3R5cGUgPyBQcm9wZXJ0
eUNvbmRpdGlvbjo6UHJlc2VuY2UgOiBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTsKKyAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAgICAgICAgICAgICAg
Z2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwga2luZCk7CisgICAgICAg
ICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0pOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKKyAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09i
amVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgcmV0
dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLAorICAgICAgICBbJl0gKFZlY3RvcjxP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlvbnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+
IGJvb2wgeworICAgICAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBy
ZXN1bHQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZtLCBvd25lciwgb2Jq
ZWN0LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlKTsKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbmRp
dGlvbnMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2
bSwgZ2xvYmFsT2JqZWN0LCBoZWFkU3RydWN0dXJlLCBudWxscHRyLAorICAgICAgICBbJl0gKFZl
Y3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlvbnMsIEpTT2JqZWN0KiBvYmpl
Y3QpIC0+IGJvb2wgeworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0
ID0KKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwgbnVsbHB0ciwgb2JqZWN0
LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXIpOworICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Y29uZGl0aW9ucy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9LCBDb25jdXJyZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldF9oCisjZGVmaW5lIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0X2gKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IEFuIG9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb24gc2V0IGlzIHVzZWQgdG8gcmVwcmVzZW50IHRo
ZSBzZXQgb2YgYWRkaXRpb25hbCBjb25kaXRpb25zCisvLyB0aGF0IG5lZWQgdG8gYmUgbWV0IGZv
ciBzb21lIGhlYXAgYWNjZXNzIHRvIGJlIHZhbGlkLiBUaGUgc2V0IGNhbiBoYXZlIHRoZSBmb2xs
b3dpbmcKKy8vIGludGVyZXN0aW5nIHN0YXRlczoKKy8vCisvLyBFbXB0eTogVGhlcmUgYXJlIG5v
IHNwZWNpYWwgY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgbWV0LgorLy8gSW52YWxpZDogVGhl
IGhlYXAgYWNjZXNzIGlzIG5ldmVyIHZhbGlkLgorLy8gTm9uLWVtcHR5OiBUaGVyZSBhcmUgc29t
ZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHZhbGlkLgorCitjbGFz
cyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQoKSB7IH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgaW52YWxpZCgpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihuZXcgRGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG5vbkVtcHR5KGNvbnN0IFZlY3RvcjxPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbj4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIGlmICh2ZWN0b3IuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7CisgICAg
ICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihuZXcgRGF0YSgpKTsKKyAgICAgICAgcmVzdWx0Lm1f
ZGF0YS0+dmVjdG9yID0gdmVjdG9yOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Rh
dGEgfHwgIW1fZGF0YS0+dmVjdG9yLmlzRW1wdHkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9kYXRhOworICAgIH0KKyAg
ICAKKyAgICB0eXBlZGVmIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKiBpdGVyYXRvcjsK
KyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
ZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9kYXRh
LT52ZWN0b3IuYmVnaW4oKTsKKyAgICB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBtX2RhdGEtPnZlY3Rvci5lbmQoKTsKKyAgICB9CisgICAgCisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gZm9yT2JqZWN0KEpTT2JqZWN0KikgY29uc3Q7CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gZm9yQ29uZGl0aW9uS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2lu
ZCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9w
ZXJ0eUNvbmRpdGlvbjo6S2luZCkgY29uc3Q7CisKKyAgICBib29sIGhhc09uZVNsb3RCYXNlQ29u
ZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIGNvbmRpdGlvbiBzZXQg
Zm9yIGEgcHJvdG90eXBlIGhpdCwgdGhlbiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRo
ZQorICAgIC8vIGNvbmRpdGlvbiBvbiB0aGUgcHJvdG90eXBlIGl0c2VsZi4gVGhpcyBhbGxvd3Mg
eW91IHRvIGdldCB0aGUgb2JqZWN0LCBvZmZzZXQsIGFuZAorICAgIC8vIGF0dHJpYnV0ZXMgZm9y
IHRoZSBwcm90b3R5cGUuIFRoaXMgd2lsbCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZXJlIGlzIGV4
YWN0bHkgb25lIFByZXNlbmNlCisgICAgLy8gaW4gdGhlIHNldCwgYW5kIGl0IHdpbGwgcmV0dXJu
IHRoYXQgcHJlc2VuY2UuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gc2xvdEJhc2VDb25k
aXRpb24oKSBjb25zdDsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhIG5ldyBjb25k
aXRpb24gc2V0IGJ5IG1lcmdpbmcgdGhpcyBvbmUgd2l0aCB0aGUgb3RoZXIgb25lLiBUaGlzIHdp
bGwKKyAgICAvLyBmYWlsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxl
IHdpdGggZWFjaCBvdGhlci4gV2hlbiBpZiBmYWlscywgaXQgcmV0dXJucworICAgIC8vIGludmFs
aWQoKS4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRXaXRoKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgYm9vbCBz
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSBjb25zdDsKKyAgICBib29sIHN0cnVjdHVyZXNFbnN1
cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAg
CisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29uc3Q7CisgICAgYm9v
bCBhcmVTdGlsbExpdmUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIAorICAgIC8vIEhlbHBlcnMgZm9yIHVzaW5nIHRoaXMgaW4gYSB1bmlv
bi4KKyAgICB2b2lkKiByZWxlYXNlUmF3UG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dm9pZCo+KG1fZGF0YS5sZWFrUmVmKCkpOworICAgIH0KKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgYWRvcHRSYXdQb2ludGVyKHZvaWQqIHJhd1BvaW50
ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxEYXRhKj4ocmF3UG9p
bnRlcikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgZnJvbVJhd1BvaW50ZXIodm9pZCogcmF3UG9pbnRlcikKKyAg
ICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihyYXdQb2ludGVyKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIEludGVybmFsbHks
IHRoaXMgcmVwcmVzZW50cyBJbnZhbGlkIHVzaW5nIGEgcG9pbnRlciB0byBhIERhdGEgdGhhdCBo
YXMgYW4gZW1wdHkgdmVjdG9yLgorICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1h
ZGUgbW9yZSBjb21wYWN0IGJ5IGhhdmluZyBpdCBpbnRlcm5hbGx5IHVzZSBhIHZlY3RvciB0aGF0
IGp1c3QgaGFzCisgICAgLy8gdGhlIG5vbi11aWQgcG9ydGlvbiBvZiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiwgYW5kIHRoZW4gcmVxdWlyaW5nIHRoYXQgdGhlIGNhbGxlcnMgb2YgYWxsCisgICAg
Ly8gb2YgdGhlIEFQSXMgc3VwcGx5IHRoZSB1aWQuCisgICAgCisgICAgY2xhc3MgRGF0YSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhPiB7CisgICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERhdGEpOworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAg
CisgICAgcHVibGljOgorICAgICAgICBEYXRhKCkgeyB9CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+IHZlY3RvcjsKKyAgICB9OworICAgIAorICAgIFJl
ZlB0cjxEYXRhPiBtX2RhdGE7Cit9OworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlTZXR0ZXJNaXNzKAorICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKK09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KAorICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFk
U3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpOworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
dG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICBW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9u
IDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTQgKzM3LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiBHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAogICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWlu
LCB1bnNpZ25lZCBjaGFpbkNvdW50KQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogICAgIDogbV90eXBlKHR5
cGUpCi0gICAgLCBtX2NoYWluQ291bnQoY2hhaW5Db3VudCkKICAgICAsIG1fc3RydWN0dXJlKHZt
LCBvd25lciwgc3RydWN0dXJlKQorICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQog
ICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKIHsKLSAgICBpZiAoY2hhaW4pCi0gICAg
ICAgIG1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwogfQogCiBHZXRCeUlkQWNjZXNzOjp+
R2V0QnlJZEFjY2VzcygpCkBAIC03MSw3ICs2OSw3IEBAIGJvb2wgR2V0QnlJZEFjY2Vzczo6dmlz
aXRXZWFrKFJlcGF0Y2hCdWYKIHsKICAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFy
a2VkKG1fc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICht
X2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKKyAgICBpZiAoIW1fY29u
ZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsocmVwYXRjaEJ1ZmZlcikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01MywxMyArNTQsMTIgQEAgcHVibGljOgogICAgIAogICAg
IEdldEJ5SWRBY2Nlc3MoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1f
Y2hhaW5Db3VudCgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcygKICAg
ICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qID0gMCwgdW5zaWdu
ZWQgY2hhaW5Db3VudCA9IDApOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKICAgICAKICAgICB+R2V0QnlJ
ZEFjY2VzcygpOwogICAgIApAQCAtNzIsOCArNzIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQog
ICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4u
Z2V0KCk7IH0KLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGFp
bkNvdW50OyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAgCiAgICAgSklUU3R1
YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKICAgICB7CkBAIC05MSw5ICs5MCw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKICAgICAKICAgICBBY2Nlc3NUeXBl
IG1fdHlwZTsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CiAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBt
X2NoYWluOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OyAv
LyBGSVhNRSB3aGF0IGFib3V0IGJhcnJpZXJzPwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
bV9zdHViUm91dGluZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4
NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBQdXRC
eUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAgICAgIHJlc3VsdC5tX3R5
cGUgPSBUcmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20o
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAg
IHJlc3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0
aW9uLnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOworICAgICAgICByZXN1bHQubV9jb25kaXRpb25T
ZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAorICAgICAg
ICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwogICAg
ICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCkBAIC02NCw2ICs2NSw5IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJ
ZEFjY2Vzczo6ZnJvbVN0cnVjdHUKIAogYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikgY29uc3QKIHsKKyAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIGlmICghSGVhcDo6aXNN
YXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQpAQCAtNzQsMTUgKzc4LDExIEBAIGJvb2wgUHV0
QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWYKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9j
aGFpbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU2V0dGVyOgogICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgogICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2lu
Y2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRQcm9w
ZXJ0eVNsb3QuaCIKQEAgLTUzLDcgKzU0LDYgQEAgcHVibGljOgogICAgIAogICAgIFB1dEJ5SWRB
Y2Nlc3MoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgICAgICAsIG1fY2hhaW5Db3Vu
dChVSU5UX01BWCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNjIsMTQgKzYyLDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsCiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsCiAgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lKQogICAgIHsKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3Vs
dC5tX3R5cGUgPSBUcmFuc2l0aW9uOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgb2xkU3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluLnNl
dCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29u
ZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwogICAgICAgICBy
ZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtOTUsOCArOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAg
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
Ci0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAgdW5zaWduZWQgY2hhaW5D
b3VudCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwKICAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVy
LAogICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7
CkBAIC0xMDQsMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1
bHQ7CiAgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1
cmUpOwogICAgICAgICByZXN1bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGNo
YWluKSB7Ci0gICAgICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7
Ci0gICAgICAgICAgICByZXN1bHQubV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKLSAgICAgICAg
fQorICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgICAg
IHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKICAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0
NiwxNyArMTQyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0
KCk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbigpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3Rv
bSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHVu
c2lnbmVkIGNoYWluQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0dGVy
KCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2NoYWluQ291bnQ7Ci0gICAgfQor
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25z
dCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBz
dHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtMTc4LDggKzE2NCw3IEBAIHByaXZhdGU6CiAg
ICAgQWNjZXNzVHlwZSBtX3R5cGU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRT
dHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0g
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOwotICAgIHVuc2lnbmVkIG1f
Y2hhaW5Db3VudDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNl
dDsKICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKICAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5
Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUHJvcGVydHlDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNl
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwor
Cit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQs
IER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAg
ICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBvdXQucHJpbnQobV9raW5kLCAiIG9mICIsIG1fdWlkKTsKKyAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgIG91dC5wcmludCgiIGF0ICIsIG9mZnNl
dCgpLCAiIHdpdGggYXR0cmlidXRlcyAiLCBhdHRyaWJ1dGVzKCkpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgQWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBv
dXQucHJpbnQoIiB3aXRoIHByb3RvdHlwZSAiLCBpbkNvbnRleHQoSlNWYWx1ZShwcm90b3R5cGUo
KSksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXF1aXZhbGVuY2U6Cisg
ICAgICAgIG91dC5wcmludCgiIHdpdGggIiwgaW5Db250ZXh0KHJlcXVpcmVkVmFsdWUoKSwgY29u
dGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK2Jv
b2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSkgY29u
c3QKK3sKKyAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
IkRldGVybWluaW5nIHZhbGlkaXR5IG9mICIsICp0aGlzLCAiIHdpdGggc3RydWN0dXJlICIsIHBv
aW50ZXJEdW1wKHN0cnVjdHVyZSksICIgYW5kIGJhc2UgIiwKKyAgICAgICAgICAgIEpTVmFsdWUo
YmFzZSksICIgYXNzdW1pbmcgaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnRzIGFyZSBzZXQuXG4i
KTsKKyAgICB9CisgICAgCisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSB1bnNldC5cbiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0
eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgYWNjZXNzZXMgYXJlIG5vdCBjYWNoZWFibGUu
XG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgUHJlc2VuY2U6IHsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0
dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBp
ZiAoY3VycmVudE9mZnNldCAhPSBvZmZzZXQoKSB8fCBjdXJyZW50QXR0cmlidXRlcyAhPSBhdHRy
aWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB3ZSBuZWVkIG9m
ZnNldCwgYXR0cmlidXRlcyB0byBiZSAiLCBvZmZzZXQoKSwgIiwgIiwgYXR0cmlidXRlcygpLAor
ICAgICAgICAgICAgICAgICAgICAiIGJ1dCB0aGV5IGFyZSAiLCBjdXJyZW50T2Zmc2V0LCAiLCAi
LCBjdXJyZW50QXR0cmlidXRlcywgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEFic2VuY2U6IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIkludmFsaWQgYmVjYXVzZSBpdCdzIGEgZGljdGlvbmFyeS5cbiIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3Vy
cmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKTsKKyAgICAgICAg
aWYgKGN1cnJlbnRPZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSW52YWxpZCBiZWNhdXNlIHRoZSBwcm9w
ZXJ0eSBleGlzdHMgYXQgb2Zmc2V0OiAiLCBjdXJyZW50T2Zmc2V0LCAiXG4iKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVj
dHVyZS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90eXBlKCkpIHsKKyAgICAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB0aGUgcHJvdG90eXBlIGlzICIsIHN0cnVjdHVyZS0+
c3RvcmVkUHJvdG90eXBlKCksICIgZXZlbiB0aG91Z2ggIgorICAgICAgICAgICAgICAgICAgICAi
aXQgc2hvdWxkIGhhdmUgYmVlbiAiLCBKU1ZhbHVlKHByb3RvdHlwZSgpKSwgIlxuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBjYXNlIEFic2VuY2VPZlNl
dHRlcjogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSW52YWxpZCBiZWNh
dXNlIGl0J3MgYSBkaWN0aW9uYXJ5LlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwor
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRP
ZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRBdHRyaWJ1
dGVzICYgKEFjY2Vzc29yIHwgQ3VzdG9tQWNjZXNzb3IpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2Ugd2UgZXhwZWN0ZWQgbm90IHRvIGhhdmUgYSBzZXR0
ZXIsIGJ1dCB3ZSBoYXZlIG9uZSBhdCBvZmZzZXQgIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRPZmZzZXQsICIgd2l0aCBhdHRyaWJ1dGVzICIsIGN1cnJlbnRBdHRyaWJ1dGVzLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJl
LT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSAhPSBwcm90b3R5cGUoKSkgeworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAg
ICAgICAiSW52YWxpZCBiZWNhdXNlIHRoZSBwcm90b3R5cGUgaXMgIiwgc3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKSwgIiBldmVuIHRob3VnaCAiCisgICAgICAgICAgICAgICAgICAgICJpdCBz
aG91bGQgaGF2ZSBiZWVuICIsIEpTVmFsdWUocHJvdG90eXBlKCkpLCAiXG4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEVxdWl2YWxlbmNl
OiB7CisgICAgICAgIGlmICghYmFzZSB8fCBiYXNlLT5zdHJ1Y3R1cmUoKSAhPSBzdHJ1Y3R1cmUp
IHsKKyAgICAgICAgICAgIC8vIENvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZSwgc2luY2Ugd2Ug
Y2Fubm90IHZlcmlmeSB0aGlzIG9uZSB3aXRob3V0IGhhdmluZyB0aGUKKyAgICAgICAgICAgIC8v
IG9iamVjdC4KKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZl
IGEgYmFzZSBvciB0aGUgYmFzZSBoYXMgdGhlIHdyb25nIHN0cnVjdHVyZTogIiwKKyAgICAgICAg
ICAgICAgICAgICAgUmF3UG9pbnRlcihiYXNlKSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJhY3ksIGFuZCBtYXliZSBtb3JlIHJpc2t5IHRoYW4gd2Ug
d2FudC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNDY0MQorICAgICAgICAKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgY3VycmVudE9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjdXJy
ZW50VmFsdWUgPSBiYXNlLT5nZXREaXJlY3QoY3VycmVudE9mZnNldCk7CisgICAgICAgIGlmIChj
dXJyZW50VmFsdWUgIT0gcmVxdWlyZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZh
bGlkIGJlY2F1c2UgdGhlIHZhbHVlIGlzICIsIGN1cnJlbnRWYWx1ZSwgIiBidXQgd2UgcmVxdWly
ZSAiLCByZXF1aXJlZFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICJcbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRp
dGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNlbmNlOgorICAg
IGNhc2UgQWJzZW5jZToKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNTdGlsbFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QK
K3sKKyAgICBpZiAoIWlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KHN0cnVjdHVyZSwgYmFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEN1cnJl
bnRseSB3ZSBhc3N1bWUgdGhhdCBhbiBpbXB1cmUgcHJvcGVydHkgY2FuIGNhdXNlIGEgcHJvcGVy
dHkgdG8gYXBwZWFyLCBhbmQgY2FuIGFsc28KKyAgICAvLyAic2hhZG93IiBhbiBleGlzdGluZyBK
UyBwcm9wZXJ0eSBvbiB0aGUgc2FtZSBvYmplY3QuIEhlbmNlIGl0IGFmZmVjdHMgYm90aCBwcmVz
ZW5jZSBhbmQKKyAgICAvLyBhYnNlbmNlLiBJdCBkb2Vzbid0IGFmZmVjdCBBYnNlbmNlT2ZTZXR0
ZXIgYmVjYXVzZSBpbXB1cmUgcHJvcGVydGllcyBhcmVuJ3QgZXZlciBzZXR0ZXJzLgorICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6Cisg
ICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5o
YXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNo
YWJsZVdoZW5WYWxpZCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2F0Y2hhYmlsaXR5RWZm
b3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOiB7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCB3aGVuIHNvbWUgdmFyaWFudCBvZiBpc1ZhbGlkIHJldHVybmVkIHRydWUsIHdoaWNoCisgICAg
ICAgIC8vIGltcGxpZXMgdGhhdCB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBzdHJ1Y3R1
cmUga25vd3Mgb2YgdGhlIHByb3BlcnR5LiBXZSBzaG91bGQKKyAgICAgICAgLy8gYWxzbyBoYXZl
IHZlcmlmaWVkIHRoYXQgdGhlIFN0cnVjdHVyZSBpcyBhIGNhY2hlYWJsZSBkaWN0aW9uYXJ5LCB3
aGljaCBtZWFucyB3ZQorICAgICAgICAvLyBzaG91bGRuJ3QgaGF2ZSBhIFRPQ1RPVSByYWNlIGVp
dGhlci4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOwor
ICAgICAgICAKKyAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0OworICAgICAgICBzd2l0Y2ggKGVm
Zm9ydCkgeworICAgICAgICBjYXNlIE1ha2VOb0NoYW5nZXM6CisgICAgICAgICAgICBzZXQgPSBz
dHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnN1cmVXYXRjaGFiaWxpdHk6CisgICAgICAg
ICAgICBzZXQgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50
U2V0KAorICAgICAgICAgICAgICAgICpIZWFwOjpoZWFwKHN0cnVjdHVyZSktPnZtKCksIG9mZnNl
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KCFzZXQgfHwgIXNldC0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNo
YWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZEFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSwgYmFzZSkKKyAgICAgICAg
JiYgaXNXYXRjaGFibGVXaGVuVmFsaWQoc3RydWN0dXJlLCBlZmZvcnQpOworfQorCitib29sIFBy
b3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hh
YmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNTdGlsbExpdmUoKSBjb25zdAoreworICAgIGlmIChoYXNQcm90b3R5cGUoKSAmJiBw
cm90b3R5cGUoKSAmJiAhSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGhhc1JlcXVpcmVkVmFsdWUoKQorICAgICAgICAmJiBy
ZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpLmlzQ2VsbCgpCisgICAg
ICAgICYmICFIZWFwOjppc01hcmtlZChyZXF1aXJlZFZhbHVlKCkuYXNDZWxsKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvcGVy
dHlDb25kaXRpb246OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYg
dHJhY2tlZCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkpCisgICAgICAgIHRyYWNr
ZWQuY2hlY2socHJvdG90eXBlKCkpOworICAgIAorICAgIGlmIChoYXNSZXF1aXJlZFZhbHVlKCkp
CisgICAgICAgIHRyYWNrZWQuY2hlY2socmVxdWlyZWRWYWx1ZSgpKTsKK30KKworYm9vbCBQcm9w
ZXJ0eUNvbmRpdGlvbjo6aXNWYWxpZFZhbHVlRm9yQXR0cmlidXRlcyhKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAgIGJvb2wgYXR0cmlidXRlc0NsYWltQWNjZXNzb3Ig
PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpOworICAgIGJvb2wgdmFsdWVDbGFpbXNBY2Nlc3Nv
ciA9ICEhanNEeW5hbWljQ2FzdDxHZXR0ZXJTZXR0ZXIqPih2YWx1ZSk7CisgICAgcmV0dXJuIGF0
dHJpYnV0ZXNDbGFpbUFjY2Vzc29yID09IHZhbHVlQ2xhaW1zQWNjZXNzb3I7Cit9CisKK2Jvb2wg
UHJvcGVydHlDb25kaXRpb246OmlzVmFsaWRWYWx1ZUZvclByZXNlbmNlKEpTVmFsdWUgdmFsdWUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVmFsaWRWYWx1ZUZvckF0dHJpYnV0ZXModmFsdWUsIGF0
dHJpYnV0ZXMoKSk7Cit9CisKK1Byb3BlcnR5Q29uZGl0aW9uIFByb3BlcnR5Q29uZGl0aW9uOjph
dHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcihKU09iamVjdCogYmFzZSkgY29u
c3QKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOworICAg
IGlmICghc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCgpKSkKKyAgICAgICAgcmV0dXJu
IFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGJhc2UtPmdldERpcmVj
dChvZmZzZXQoKSk7CisgICAgaWYgKCFpc1ZhbGlkVmFsdWVGb3JQcmVzZW5jZSh2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgIHJldHVybiBlcXVpdmFsZW5j
ZVdpdGhvdXRCYXJyaWVyKHVpZCgpLCB2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEpTQzo6UHJvcGVydHlDb25kaXRpb246OktpbmQgY29uZGl0aW9uKQoreworICAgIHN3aXRjaCAo
Y29uZGl0aW9uKSB7CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToK
KyAgICAgICAgb3V0LnByaW50KCJQcmVzZW5jZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOgorICAgICAgICBvdXQucHJpbnQoIkFi
c2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlv
bjo6QWJzZW5jZU9mU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIkFic2VuY2UiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6
CisgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRp
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9w
ZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBQcm9wZXJ0eUNvbmRpdGlvbl9oCisjZGVmaW5lIFByb3BlcnR5Q29uZGl0aW9uX2gKKworI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBQcm9wZXJ0eUNvbmRp
dGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgUHJlc2VuY2UsCisgICAg
ICAgIEFic2VuY2UsCisgICAgICAgIEFic2VuY2VPZlNldHRlciwKKyAgICAgICAgRXF1aXZhbGVu
Y2UgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0aGlzIHdpbGwgYmUgYSBwYWlyIG9mIHdh
dGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb25zLCB3ZSB3aWxsIHNl
dCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0aGUgbmV3IHN0cnVjdHVyZS4KKyAgICB9
OworICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKCkKKyAgICAgICAgOiBtX3VpZChudWxscHRy
KQorICAgICAgICAsIG1fa2luZChQcmVzZW5jZSkKKyAgICB7CisgICAgICAgIG1lbXNldCgmdSwg
MCwgc2l6ZW9mKHUpKTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlDb25kaXRpb24oV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAg
ICAgICwgbV9raW5kKEFic2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVv
Zih1KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5j
ZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0
aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQu
bV9raW5kID0gUHJlc2VuY2U7CisgICAgICAgIHJlc3VsdC51LnByZXNlbmNlLm9mZnNldCA9IG9m
ZnNldDsKKyAgICAgICAgcmVzdWx0LnUucHJlc2VuY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0
eUNvbmRpdGlvbiBwcmVzZW5jZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisg
ICAgeworICAgICAgICByZXR1cm4gcHJlc2VuY2VXaXRob3V0QmFycmllcih1aWQsIG9mZnNldCwg
YXR0cmlidXRlcyk7CisgICAgfQorCisgICAgLy8gTk9URTogVGhlIHByb3RvdHlwZSBpcyB0aGUg
c3RvcmVkUHJvdG90eXBlIG5vdCB0aGUgcHJvdG90eXBlRm9yTG9va3VwLgorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlV2l0aG91dEJhcnJpZXIoVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0
aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdWlkID0gdWlkOworICAgICAgICByZXN1bHQu
bV9raW5kID0gQWJzZW5jZTsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBw
cm90b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBQcm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25l
cik7CisgICAgICAgIHJldHVybiBhYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5cGUp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0
dGVyV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFi
c2VuY2VPZlNldHRlcjsKKyAgICAgICAgcmVzdWx0LnUuYWJzZW5jZS5wcm90b3R5cGUgPSBwcm90
b3R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQ
cm9wZXJ0eUNvbmRpdGlvbiBhYnNlbmNlT2ZTZXR0ZXIoCisgICAgICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKHVp
ZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9u
IGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IEVxdWl2YWxlbmNlOworICAgICAgICByZXN1bHQudS5lcXVpdmFsZW5jZS52YWx1ZSA9IEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAg
ICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2UoCisgICAgICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSAmJiBvd25lcikKKyAgICAgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0dXJuIGVxdWl2YWxl
bmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CisgICAgfQorICAgICAgICAKKyAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7
IH07CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisgICAgCisg
ICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmIG1fa2luZCA9PSBQ
cmVzZW5jZTsgfTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGhhc09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2Uub2Zm
c2V0OworICAgIH0KKyAgICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiAhISp0
aGlzICYmIG1fa2luZCA9PSBQcmVzZW5jZTsgfTsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBdHRyaWJ1dGVzKCkpOworICAgICAgICBy
ZXR1cm4gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1By
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgKG1fa2luZCA9PSBBYnNlbmNlIHx8
IG1fa2luZCA9PSBBYnNlbmNlT2ZTZXR0ZXIpOyB9CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzUHJvdG90eXBlKCkpOworICAgICAgICBy
ZXR1cm4gdS5hYnNlbmNlLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNSZXF1
aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gRXF1aXZhbGVu
Y2U7IH0KKyAgICBKU1ZhbHVlIHJlcXVpcmVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGhhc1JlcXVpcmVkVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNv
ZGUodS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0lt
cGwqPjo6aGFzaChtX3VpZCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5kKTsKKyAgICAg
ICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVzZW5jZToKKyAgICAgICAgICAg
IHJlc3VsdCArPSB1LnByZXNlbmNlLm9mZnNldDsKKyAgICAgICAgICAgIHJlc3VsdCArPSB1LnBy
ZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBYnNl
bmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFzaCh1LmFic2VuY2UucHJvdG90eXBlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICAgICAg
cmVzdWx0ICs9IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVxdWl2YWxlbmNlLnZhbHVlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV91aWQgIT0gb3RoZXIubV91aWQpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tpbmQgIT0gb3RoZXIubV9r
aW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgICAgICBjYXNlIFByZXNlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUucHJlc2VuY2Uu
b2Zmc2V0ID09IG90aGVyLnUucHJlc2VuY2Uub2Zmc2V0CisgICAgICAgICAgICAgICAgJiYgdS5w
cmVzZW5jZS5hdHRyaWJ1dGVzID09IG90aGVyLnUucHJlc2VuY2UuYXR0cmlidXRlczsKKyAgICAg
ICAgY2FzZSBBYnNlbmNlOgorICAgICAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAg
ICAgIHJldHVybiB1LmFic2VuY2UucHJvdG90eXBlID09IG90aGVyLnUuYWJzZW5jZS5wcm90b3R5
cGU7CisgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgICAgICAgICByZXR1cm4gdS5lcXVp
dmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVxdWl2YWxlbmNlLnZhbHVlOworICAgICAgICB9Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gIW1fdWlkICYmIG1fa2luZCA9PSBBYnNlbmNlOworICAg
IH0KKyAgICAKKyAgICAvLyBUd28gY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSBpZiB0aGV5IGFy
ZSBpZGVudGljYWwgb3IgaWYgdGhleSBzcGVhayBvZiBkaWZmZXJlbnQgdWlkcy4gSWYKKyAgICAv
LyBmYWxzZSBpcyByZXR1cm5lZCwgeW91IGhhdmUgdG8gZGVjaWRlIGhvdyB0byByZXNvbHZlIHRo
ZSBjb25mbGljdCAtIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzCisgICAgLy8gYSBQcmVzZW5jZSBh
bmQgYW4gRXF1aXZhbGVuY2UgdGhlbiBpbiBzb21lIGNhc2VzIHlvdSdsbCB3YW50IHRoZSBtb3Jl
IGdlbmVyYWwgb2YgdGhlIHR3bworICAgIC8vIHdoaWxlIGluIG90aGVyIGNhc2VzIHlvdSdsbCB3
YW50IHRoZSBtb3JlIHNwZWNpZmljIG9mIHRoZSB0d28uIFRoaXMgd2lsbCBhbHNvIHJldHVybiBm
YWxzZQorICAgIC8vIGZvciBjb250cmFkaWN0aW9ucywgbGlrZSBQcmVzZW5jZSBhbmQgQWJzZW5j
ZSBvbiB0aGUgc2FtZSB1aWQuIEJ5IGNvbnZlbnRpb24sIGludmFsaWQKKyAgICAvLyBjb25kaXRp
b25zIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcuCisgICAgYm9vbCBpc0NvbXBhdGli
bGVXaXRoKGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghKnRoaXMgfHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXIgfHwgdWlkKCkgIT0gb3RoZXIudWlkKCk7CisgICAg
fQorICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJlIGNsYWltcyB0
aGF0IHRoZSBwcm9wZXJ0eSB3b24ndCBiZSBpbnRlcmNlcHRlZC4KKyAgICBib29sIGlzU3RpbGxW
YWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSosIEpTT2JqZWN0
KiBiYXNlID0gbnVsbHB0cikgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdl
IG5lZWQgYW4gaW1wdXJlIHByb3BlcnR5IHdhdGNocG9pbnQgdG8gZW5zdXJlIHZhbGlkaXR5IGV2
ZW4gaWYKKyAgICAvLyBpc1N0aWxsVmFsaWRBY2NvcmRpbmdUb1N0cnVjdHVyZSgpIHJldHVybmVk
IHRydWUuCisgICAgYm9vbCB2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIC8vIENoZWNrcyBpZiB0aGUgY29uZGl0aW9u
IGlzIHN0aWxsIHZhbGlkIHJpZ2h0IG5vdyBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgc3RydWN0
dXJlLgorICAgIC8vIE1heSBjb25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIGlmIHRoZSBvYmpl
Y3QgYW5kIHN0cnVjdHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlCisgICAgLy8gY29uZGl0
aW9uLiBUaGlzIGhhcHBlbnMgZm9yIGFuIEFic2VuY2UgY29uZGl0aW9uIG9uIGFuIG9iamVjdCB0
aGF0IG1heSBoYXZlIGltcHVyZQorICAgIC8vIHByb3BlcnRpZXMuIElmIHRoZSBvYmplY3QgaXMg
bm90IHN1cHBsaWVkLCB0aGVuIGEgInRydWUiIHJldHVybiBpbmRpY2F0ZXMgdGhhdCBjaGVja2lu
ZyBpZgorICAgIC8vIGFuIG9iamVjdCBoYXMgdGhlIGdpdmVuIHN0cnVjdHVyZSBndWFyYW50ZWVz
IHRoZSBjb25kaXRpb24gc3RpbGwgaG9sZHMuIElmIGFuIG9iamVjdCBpcworICAgIC8vIHN1cHBs
aWVkLCB0aGVuIHlvdSBtYXkgbmVlZCB0byB1c2Ugc29tZSBvdGhlciB3YXRjaHBvaW50cyBvbiB0
aGUgb2JqZWN0IHRvIGd1YXJhbnRlZSB0aGUKKyAgICAvLyBjb25kaXRpb24gaW4gYWRkaXRpb24g
dG8gdGhlIHN0cnVjdHVyZSBjaGVjay4KKyAgICBib29sIGlzU3RpbGxWYWxpZChTdHJ1Y3R1cmUq
LCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNvbnN0OworICAgIAorICAgIC8vIEluIHNvbWUg
Y2FzZXMsIHRoZSBjb25kaXRpb24gaXMgbm90IHdhdGNoYWJsZSwgYnV0IGNvdWxkIGJlIG1hZGUg
d2F0Y2hhYmxlIGJ5IGVuYWJsaW5nIHRoZQorICAgIC8vIGFwcHJvcHJpYXRlIHdhdGNocG9pbnQu
IEZvciBleGFtcGxlLCByZXBsYWNlbWVudCB3YXRjaHBvaW50cyBhcmUgZW5hYmxlZCBvbmx5IHdo
ZW4gc29tZQorICAgIC8vIGFjY2VzcyBpcyBjYWNoZWQgb24gdGhlIHByb3BlcnR5IGluIHNvbWUg
c3RydWN0dXJlLiBUaGlzIGlzIG1haW5seSB0byBzYXZlIHNwYWNlIGZvcgorICAgIC8vIGRpY3Rp
b25hcnkgcHJvcGVydGllcyBvciBwcm9wZXJ0aWVzIHRoYXQgbmV2ZXIgZ2V0IHZlcnkgaG90LiBC
dXQsIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAvLyBlbmFibGUgd2F0Y2hpbmcsIHByb3ZpZGVk
IHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgZW51bSBXYXRj
aGFiaWxpdHlFZmZvcnQgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0LiBJdCBtZWFu
cyB0aGF0IHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2YgYW55IFN0cnVjdHVyZSBvcgorICAg
ICAgICAvLyBvYmplY3QsIGFuZCBpbXBsaWVzIHRoYXQgaWYgdGhlIHByb3BlcnR5IGhhcHBlbnMg
bm90IHRvIGJlIHdhdGNoYWJsZSB0aGVuIHdlIGRvbid0IG1ha2UKKyAgICAgICAgLy8gaXQgd2F0
Y2hhYmxlLiBUaGlzIGlzIG1hbmRhdG9yeSBpZiBjYWxsaW5nIGZyb20gYSBKSVQgdGhyZWFkLiBU
aGlzIGlzIGFsc28gc29tZXdoYXQKKyAgICAgICAgLy8gcHJlZmVyYWJsZSB3aGVuIGZpcnN0IGRl
Y2lkaW5nIHdoZXRoZXIgdG8gd2F0Y2ggYSBjb25kaXRpb24gZm9yIHRoZSBmaXJzdCB0aW1lIChp
LmUuCisgICAgICAgIC8vIG5vdCBmcm9tIGEgd2F0Y2hwb2ludCBmaXJlIHRoYXQgY2F1c2VzIHVz
IHRvIHNlZSBpZiB3ZSBzaG91bGQgYWRhcHQpLCBzaW5jZSBhCisgICAgICAgIC8vIHdhdGNocG9p
bnQgbm90IGJlaW5nIGluaXRpYWxpemVkIGZvciB3YXRjaGluZyBpbXBsaWVzIHRoYXQgbWF5YmUg
d2UgZG9uJ3Qga25vdyBlbm91Z2gKKyAgICAgICAgLy8geWV0IHRvIG1ha2UgaXQgcHJvZml0YWJs
ZSB0byB3YXRjaCAtLSBhcyBpbiwgdGhlIHRoaW5nIGJlaW5nIHdhdGNoZWQgbWF5IG5vdCBoYXZl
CisgICAgICAgIC8vIHN0YWJpbGl6ZWQgeWV0LiBXZSBwcmVmZXIgdG8gb25seSBhc3N1bWUgdGhh
dCBhIGNvbmRpdGlvbiB3aWxsIGhvbGQgaWYgaXQgaGFzIGJlZW4KKyAgICAgICAgLy8ga25vd24g
dG8gaG9sZCBmb3IgYSB3aGlsZSBhbHJlYWR5LgorICAgICAgICBNYWtlTm9DaGFuZ2VzLAorICAg
ICAgICAKKyAgICAgICAgLy8gRG8gd2hhdCBpdCB0YWtlcyB0byBlbnN1cmUgdGhhdCB0aGUgcHJv
cGVydHkgY2FuIGJlIHdhdGNoZWQsIGlmIGRvaW5nIHNvIGhhcyBubworICAgICAgICAvLyB1c2Vy
LW9ic2VydmFibGUgZWZmZWN0LiBGb3Igbm93IHRoaXMganVzdCBtZWFucyB0aGF0IHdlIHdpbGwg
ZW5zdXJlIHRoYXQgYSBwcm9wZXJ0eQorICAgICAgICAvLyByZXBsYWNlbWVudCB3YXRjaHBvaW50
IGlzIGVuYWJsZWQgaWYgaXQgaGFkbid0IGJlZW4gZW5hYmxlZCBhbHJlYWR5LiBEbyBub3QgdXNl
IHRoaXMKKyAgICAgICAgLy8gZnJvbSBKSVQgdGhyZWFkcywgc2luY2UgdGhlIGFjdCBvZiBlbmFi
bGluZyB3YXRjaHBvaW50cyBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgICAgIEVuc3VyZVdhdGNo
YWJpbGl0eQorICAgIH07CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwg
dmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRp
b24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBvc3NpYmx5IGFuIGlt
cHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50LgorICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNPYmplY3QqIGJh
c2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2VzKSBjb25zdDsK
KyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291
bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgorICAgIC8vIHdhdGNo
cG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBib29sIGlzV2F0Y2hhYmxlKAorICAgICAgICBT
dHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIsIFdhdGNoYWJpbGl0eUVmZm9ydCA9
IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEN1
cnJlbnRseSwgdGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIG9mIG91ciBjb25kaXRpb25zLgorICAg
ICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzUmVw
bGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhISp0aGlz
ICYmIG1fa2luZCA9PSBFcXVpdmFsZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoaXMgYXJlIHN0aWxsIGxpdmUuCisgICAg
Ym9vbCBpc1N0aWxsTGl2ZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVu
Y2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgY29uc3Q7CisKKyAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkVmFsdWVGb3JBdHRyaWJ1dGVzKEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpOworCisgICAgYm9vbCBpc1ZhbGlkVmFsdWVGb3JQcmVzZW5jZShKU1ZhbHVlKSBjb25zdDsK
KworICAgIFByb3BlcnR5Q29uZGl0aW9uIGF0dGVtcHRUb01ha2VFcXVpdmFsZW5jZVdpdGhvdXRC
YXJyaWVyKEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIGlzV2F0
Y2hhYmxlV2hlblZhbGlkKFN0cnVjdHVyZSosIFdhdGNoYWJpbGl0eUVmZm9ydCkgY29uc3Q7CisK
KyAgICBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7CisgICAgS2luZCBtX2tpbmQ7CisgICAgdW5p
b24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OworICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgfSBwcmVzZW5jZTsK
KyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGU7CisgICAg
ICAgIH0gYWJzZW5jZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEVuY29kZWRKU1Zh
bHVlIHZhbHVlOworICAgICAgICB9IGVxdWl2YWxlbmNlOworICAgIH0gdTsKK307CisKK3N0cnVj
dCBQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbCgKKyAgICAgICAgY29uc3QgUHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0
IFByb3BlcnR5Q29uZGl0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAg
ICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpL
aW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxh
dGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geworICAgIHR5
cGVkZWYgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxKU0M6OlByb3BlcnR5Q29uZGl0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
UHJvcGVydHlDb25kaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTAsMTkgKzkwLDIyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZyb20KICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6
OmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmUpKTsK
ICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IGluc3RydWN0aW9uWzZdLnUuc3Ry
dWN0dXJlLmdldCgpOwotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGluc3RydWN0aW9uWzdd
LnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCk7Ci0gICAgQVNTRVJUKG5ld1N0cnVjdHVyZSk7Ci0gICAg
QVNTRVJUKGNoYWluKTsKICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1
Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAK
LSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gaW50ZW5kZWRDaGFpbjsKLSAgICBp
ZiAoY2hhaW4pCi0gICAgICAgIGludGVuZGVkQ2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbihwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGNoYWluKSk7CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmIChpbnN0cnVjdGlv
blswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9u
X25vcm1hbCkKKyAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6Omdl
dE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmUpKSB7Cisg
ICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgKnByb2ZpbGVk
QmxvY2stPnZtKCksIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVp
ZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIH0KICAgICAKLSAgICByZXR1
cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGlu
dGVuZGVkQ2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7
CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0xNjUsMTYgKzE2OCwxNCBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IAogICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewotICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWlu
OwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKSB7
Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8tPnUucHV0
QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCisgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsK
KyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwog
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdl
dCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVj
dHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBjaGFpbi5nZXQoKSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpAQCAtMjE5LDE1ICsyMjAs
MTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseSh1aWQpOwog
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKLSAgICAgICAgICAg
ICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47Ci0gICAgICAgICAgICAg
ICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYWluID0gYWRv
cHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5jaGFpbigpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5j
b25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1
cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRW
YXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0
dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVy
ZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMzUsNyArMjMyLDcgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhH
ZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
IHN0cnVjdHVyZSwgYWNjZXNzLmNoYWluKCksIGFjY2Vzcy5jaGFpbkNvdW50KCksIHVpZCk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0
YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNo
b3VsZFNraXA6CkBAIC0yNTMsNyArMjUwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHBy
b2ZpbGVkQmxvY2ssICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNv
bXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwg
Y29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzY4LDIyICszNjUsMTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8o
KS5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CiAgICAgCi0gICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFp
bjsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAg
ICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSk7Ci0gICAgICAg
IAotICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciBy
ZWFkLW9ubHkgcHJvcGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICAgICAgaWYgKGNoYWlu
LT5tYXlJbnRlcmNlcHRTdG9yZVRvKHVpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhl
IHByb3RvdHlwZSBjaGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBw
cm94aWVzIG9yIGRpY3Rpb25hcmllcykKLSAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhl
IGRpY3Rpb25hcnkgY2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMg
bm90IGJlZW4KLSAgICAgICAgICAgIC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0
cmFuc2l0aW9uLiBBbmQgcmVhbGx5IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKLSAgICAg
ICAgICAgIC8vIGJhaWwgaGVyZSBpcyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZp
bmcgdGhlIG9wdGltaXppbmcgSklUIGdvIGFuZCBmbGF0dGVuCi0gICAgICAgICAgICAvLyBkaWN0
aW9uYXJpZXMgaWYgd2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0
cyB3ZXJlIG5ldmVyIHVzZWQgYXMKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNo
ZWFibGUgcHJvdG90eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQg
c29tZSBvZgotICAgICAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwu
Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1h
bGl6ZWQoKSkKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxP
YmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICB9CiAgICAgCkBAIC0zOTQsNyArMzgw
LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBB
U1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBl
bmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4uZ2V0KCksIG9mZnNldCkpOwor
ICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0
aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNyBAQCBQdXRCeUlk
VmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9raW5kID0gb3RoZXIubV9r
aW5kOwogICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CiAgICAgbV9u
ZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbnN0YW50Q2hlY2tz
ID0gb3RoZXIubV9jb25zdGFudENoZWNrczsKLSAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5t
X2FsdGVybmF0ZUJhc2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNl
dDsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxM
aW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxD
YWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNjQsMjkgKzYzLDI2
IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGMKIAogUHV0QnlJZFZh
cmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0dXJlU2V0
JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICBy
ZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBv
bGRTdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwot
ICAgIGlmIChzdHJ1Y3R1cmVDaGFpbikKLSAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNo
ZWNrcyhyZXN1bHQubV9jb25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0
ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAog
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0
dXM+IGNhbGxMaW5rU3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICBy
ZXN1bHQubV9raW5kID0gU2V0dGVyOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKLSAgICBpZiAoY2hhaW4pIHsKLSAgICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1
bHQubV9jb25zdGFudENoZWNrcyk7Ci0gICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBj
aGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKLSAgICB9CisgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICBy
ZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTEzNCwxOCArMTMwLDYgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6
bWFrZXNDYWxscygpIGNvbnN0CiAgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKLVN0
cnVjdHVyZVNldCBQdXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgIAotICAgIGlmICghbV9hbHRlcm5hdGVCYXNl
KQotICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19
Ci0KIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiBvdGhlcikKIHsKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCkBAIC0x
NTUsOCArMTM5LDggQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwog
ICAgIGNhc2UgUmVwbGFjZToKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAg
ICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudENoZWNrcy5p
c0VtcHR5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uc3RhbnRDaGVja3MuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3Ry
dWN0dXJlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTk2LDYgKzE4MCw3IEBAIGJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7CiAgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAg
ICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwogICAgIAogICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAogICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKQEAgLTIzMiwxNSArMjE3LDEzIEBAIHZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAg
IjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+
ICIsCiAgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29u
dGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVj
a3MoKSwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAg
ICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBv
ZmZzZXQoKSwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRl
cjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4
dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNv
bnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29udGV4dCksICJdIik7Ci0gICAgICAgIGlmIChtX2Fs
dGVybmF0ZUJhc2UpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIs
IGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKKyAgICAgICAg
ICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdIik7CiAgICAgICAgIG91
dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CiAgICAgICAgIG91dC5wcmludCgiLCBj
YWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwogICAgICAgICBvdXQucHJpbnQoIj4iKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
CShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBQdXRC
eUlkVmFyaWFudF9oCiAjZGVmaW5lIFB1dEJ5SWRWYXJpYW50X2gKIAotI2luY2x1ZGUgIkludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0
LmgiCiAKQEAgLTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAg
ICAgICAgOiBtX2tpbmQoTm90U2V0KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIp
Ci0gICAgICAgICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQo
aW52YWxpZE9mZnNldCkKICAgICB7CiAgICAgfQpAQCAtNTQsMTYgKzUzLDE1IEBAIHB1YmxpYzoK
ICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRW
YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQ
dXRCeUlkVmFyaWFudCByZXBsYWNlKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQg
cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAg
c3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29u
c3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJv
cGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0g
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsCi0gICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiwKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CiAgICAgCiAgICAg
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkBAIC03Niw2ICs3NCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKICAgICB9CiAgICAg
CisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7
CkBAIC0xMDAsMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFn
ZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAotICAgIGNvbnN0
IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50Q2hlY2tzOwotICAgIH0KKyAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb25kaXRpb25TZXQ7IH0KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25z
dAogICAgIHsKQEAgLTExMSwxNCArMTExLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9v
ZmZzZXQ7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJu
IG1fYWx0ZXJuYXRlQmFzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1
Y3R1cmUoKSBjb25zdDsKLSAgICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMo
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAtMTM2
LDggKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgU3RydWN0dXJlU2V0
IG1fb2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwotICAgIEpTT2JqZWN0
KiBtX2FsdGVybmF0ZUJhc2U7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25k
aXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsMzMgKzM3LDQ2IEBAIG5hbWVzcGFjZSBKU0MgewogU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6flN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQoKSB7IH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludDo6cHVzaCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5LAogICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PiYgaGVh
ZCkKIHsKLSAgICBoZWFkID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50Pihob2xkZXIsIFdURjo6bW92ZShoZWFkKSk7CisgICAgaGVhZCA9IHN0ZDo6bWFr
ZV91bmlxdWU8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4oa2V5LCBob2xkZXIsIFdU
Rjo6bW92ZShoZWFkKSk7CiAgICAgcmV0dXJuIGhlYWQuZ2V0KCk7CiB9CiAKIHZvaWQgU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwm
KQogewotICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1pc2U6IHN0
dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCi0gICAgLy8gVGhhdCB3b3JrcywgYmVj
YXVzZSBkZWxldGluZyBhIHdhdGNocG9pbnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBsaXN0
LCBhbmQKLSAgICAvLyB0aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9yIGZpcmluZyBpcyByb2J1
c3QgYWdhaW5zdCB0aGUgc2V0IGNoYW5naW5nLgotICAgIG1faG9sZGVyLmNvZGVCbG9jaygpLT5y
ZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgIGlmICghbV9rZXkgfHwgIW1fa2V5
LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7Cisg
ICAgICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1pc2U6IHN0dWIg
cmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCisgICAgICAgIC8vIFRoYXQgd29ya3MsIGJl
Y2F1c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3MgbGlz
dCwgYW5kCisgICAgICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlz
IHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCisgICAgICAgIG1faG9sZGVyLmNvZGVC
bG9jaygpLT5yZXNldFN0dWIoKm1faG9sZGVyLnN0dWJJbmZvKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1fa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJl
c2VuY2UpIHsKKyAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBwcmVzZW5jZSBjb25kaXRpb24sIGxl
dCdzIHdhdGNoIHRoZSBwcm9wZXJ0eSBmb3IgcmVwbGFjZW1lbnRzLiBUaGlzIGlzIHByb2ZpdGFi
bGUKKyAgICAgICAgLy8gZm9yIHRoZSBERkcsIHdoaWNoIHdpbGwgd2FudCB0aGUgcmVwbGFjZW1l
bnQgc2V0IHRvIGJlIHZhbGlkIGluIG9yZGVyIHRvIGRvIGNvbnN0YW50IGZvbGRpbmcuCisgICAg
ICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKG1fa2V5Lm9iamVjdCgpKS0+dm0oKTsKKyAgICAgICAg
bV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBs
YWNlbWVudHModm0sIG1fa2V5Lm9mZnNldCgpKTsKKyAgICB9CisKKyAgICBtX2tleS5vYmplY3Qo
KS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwogfQogCiBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm8oKQogewogfQogCi1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoKQorU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBv
aW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goKnRoaXMsIG1faGVhZCk7CisgICAg
cmV0dXJuIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2goa2V5LCAqdGhpcywg
bV9oZWFkKTsKIH0KIAogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAog
ICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENv
ZGVCbG9jayogY29kZUJsb2NrLAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXkpCiB7CiAgICAgaWYgKCFob2xkZXJSZWYpCiAgICAgICAgIGhvbGRlclJlZiA9IGFk
b3B0UmVmKG5ldyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8oY29kZUJsb2NrLCBzdHVi
SW5mbykpOwpAQCAtNzIsNyArODUsNyBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
KiBXYXRjaHBvCiAgICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1Yklu
Zm8pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KCk7
CisgICAgcmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkocmV2aXNp
b24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50X2gKICNkZWZpbmUgU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludF9oCiAKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC00
NiwxNSArNDcsMTEgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCA6IAog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQoCi0gICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
byYgaG9sZGVyKQotICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQoCisgICAgICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludD4gbmV4dCkKLSAgICAgICAgOiBtX2hvbGRlcihob2xkZXIpCisg
ICAgICAgIDogbV9rZXkoa2V5KQorICAgICAgICAsIG1faG9sZGVyKGhvbGRlcikKICAgICAgICAg
LCBtX25leHQoV1RGOjptb3ZlKG5leHQpKQogICAgIHsKICAgICB9CkBAIC02Miw2ICs1OSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KCk7
CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIHB1c2go
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCiAgICAgICAgIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyLAogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4mIGhlYWQpOwogCkBAIC02OSw2
ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKGNvbnN0
IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiBtX2tleTsKICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIG1faG9s
ZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
PiBtX25leHQ7CiB9OwpAQCAtODMsMTEgKzgyLDExIEBAIHB1YmxpYzoKICAgICAKICAgICB+V2F0
Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKCk7CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgpOworICAgIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSk7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCiAgICAgICAgIFJlZlB0cjxXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCi0gICAgICAgIENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvKik7CisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CiAgICAgCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDgsOSArNDgsMTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAg
ICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNp
dGlvbl9kaXJlY3Q6CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJh
d1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOworICAgICAgICB1
LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfcmVwbGFjZToKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gVGhl
c2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9y
eQpAQCAtNzUsOCArNzgsOSBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZl
cmVuCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKICAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQot
ICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0
dXJlLmdldCgpKQotICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5z
aXRpb24uY2hhaW4uZ2V0KCkpKQorICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUucHV0
QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50
ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCiAjaW5jbHVkZSAiUmVn
aXN0ZXJTZXQuaCIKQEAgLTExMyw3ICsxMTQsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgLy8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAg
ICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAg
ICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDsKQEAgLTEyMiw3ICsxMjMsNyBAQCBzdHJ1Y3QgU3RydWN0
dXJlU3R1YkluZm8gewogCiAgICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1
Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICB1LnB1dEJ5
SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAg
ICB1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKKyAgICAg
ICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVs
ZWFzZVJhd1BvaW50ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKQEAg
LTE3NSwxMCArMTc2LDExIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNl
ZW4gPSB0cnVlOwogICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCogYWRkV2F0Y2hwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCiAgICAgewogICAgICAgICByZXR1cm4gV2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50
KAotICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcyk7CisgICAgICAgICAg
ICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0aGlzLCBjb25kaXRpb24pOwogICAgIH0KICAgICAK
ICAgICBpbnQ4X3QgYWNjZXNzVHlwZTsKQEAgLTIxNywyMyArMjE5LDEyIEBAIHN0cnVjdCBTdHJ1
Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4g
YmFzZU9iamVjdFN0cnVjdHVyZTsKICAgICAgICAgfSBnZXRCeUlkU2VsZjsKICAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0
U3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByb3Rv
dHlwZVN0cnVjdHVyZTsKLSAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgIH0gZ2V0
QnlJZFByb3RvOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50
IDogMzE7Ci0gICAgICAgICAgICBib29sIGlzRGlyZWN0IDogMTsKLSAgICAgICAgfSBnZXRCeUlk
Q2hhaW47Ci0gICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBsaXN0OwogICAgICAgICB9IGdldEJ5SWRMaXN0OwogICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwog
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICAg
ICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwogICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwog
ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NzksNyArMTc3OSwxMCBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgLy8gc29t
ZXRoaW5nIG1vcmUgc3VidGxlPwogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0
OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
IXN0YXR1c1tpXS5hbHRlcm5hdGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IHRoaW5nIHdvbid0IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4g
SWYgaXQgZGlkLCB3ZSdkCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRv
IGRvIGhlcmUuCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
c3RhdHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3Rh
dHVzW2ldLm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3Vs
dCkgewpAQCAtMjA2MCwzMCArMjA2MywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHNbaV07Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKTsKKyAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIFN0cnVj
dHVyZVNldCBzZXQgPSBnZXRDYXNlLnNldCgpOwogICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNl
KTsKICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0
ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRl
cm5hdGVCYXNlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckxv
YWQgPSBiYXNlLm1fdmFsdWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0K
LSAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCi0gICAgICAg
ICAgICAgICAgICAgIGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFu
dC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAg
ICAgICBpZiAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNv
bnN0YW50KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0
KAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJl
ZXplKGNvbnN0YW50UmVzdWx0KSwKKyAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5j
b25zdGFudCgpLAogICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpOwogICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksCisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aW5zdGFsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9rZXkuaXNXYXRjaGFibGUoKSk7CisgICAgCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVy
ZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAg
ICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJl
KCktPmdldENvbmN1cnJlbnRseShtX2tleS51aWQoKSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0
ID0gbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hw
b2ludFNldChvZmZzZXQpOworICAgIHNldC0+YWRkKCZtX3Byb3BlcnR5V2F0Y2hwb2ludCk7Cit9
CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpmaXJlKGNv
bnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICAvLyBPbmUgb2YgdGhlIHdhdGNocG9pbnRz
IGZpcmVkLCBidXQgdGhlIG90aGVyIG9uZSBkaWRuJ3QuIE1ha2Ugc3VyZSB0aGF0IG5laXRoZXIg
b2YgdGhlbSBhcmUKKyAgICAvLyBpbiBhbnkgc2V0IGFueW1vcmUuIFRoaXMgc2ltcGxpZmllcyB0
aGluZ3MgYnkgYWxsb3dpbmcgdXMgdG8gcmVpbnN0YWxsIHRoZSB3YXRjaHBvaW50cworICAgIC8v
IHdoZXJldmVyIGZyb20gc2NyYXRjaC4KKyAgICBpZiAobV9zdHJ1Y3R1cmVXYXRjaHBvaW50Lmlz
T25MaXN0KCkpCisgICAgICAgIG1fc3RydWN0dXJlV2F0Y2hwb2ludC5yZW1vdmUoKTsKKyAgICBp
ZiAobV9wcm9wZXJ0eVdhdGNocG9pbnQuaXNPbkxpc3QoKSkKKyAgICAgICAgbV9wcm9wZXJ0eVdh
dGNocG9pbnQucmVtb3ZlKCk7CisgICAgCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3Bl
cnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlz
YXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpcmluZyB3YXRj
aHBvaW50ICIsIFJhd1BvaW50ZXIodGhpcyksICIgKCIsIG1fa2V5LCAiKSBvbiAiLCAqbV9jb2Rl
QmxvY2ssICJcbiIpOworICAgIH0KKyAgICAKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7Cisg
ICAgb3V0LnByaW50KCJBZGFwdGF0aW9uIG9mICIsIG1fa2V5LCAiIGZhaWxlZDogIiwgZGV0YWls
KTsKKyAgICAKKyAgICBTdHJpbmdGaXJlRGV0YWlsIHN0cmluZ0RldGFpbChvdXQudG9DU3RyaW5n
KCkuZGF0YSgpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oCisgICAgICAgIFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVW5wcm9maWxlZFdhdGNocG9pbnQsIENvdW50UmVvcHRpbWl6
YXRpb24sICZzdHJpbmdEZXRhaWwpOworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKAorICAg
IGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBwdHJkaWZmX3QgbXlPZmZzZXQgPSBP
QkpFQ1RfT0ZGU0VUT0YoCisgICAgICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCwgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2Fz
dDxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAg
IGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50
LT5maXJlKGRldGFpbCk7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBG
aXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09G
RlNFVE9GKAorICAgICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQs
IG1fcHJvcGVydHlXYXRjaHBvaW50KTsKKyAgICAKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQqIHBhcmVudCA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqPigKKyAgICAgICAgICAgIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgLSBteU9mZnNldCk7CisgICAgCisgICAgcGFyZW50LT5maXJlKGRl
dGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAor
I2RlZmluZSBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAg
IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYsIENvZGVCbG9jayopOworICAgIAorICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAgIAorICAgIHZv
aWQgaW5zdGFsbCgpOworCitwcml2YXRlOgorICAgIGNsYXNzIFN0cnVjdHVyZVdhdGNocG9pbnQg
OiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBTdHJ1Y3R1cmVXYXRj
aHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmlyZUlu
dGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9OworICAgIGNsYXNzIFBy
b3BlcnR5V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFByb3BlcnR5V2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmly
dHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAg
fTsKKyAgICAKKyAgICB2b2lkIGZpcmUoY29uc3QgRmlyZURldGFpbCYpOworICAgIAorICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CisgICAgU3RydWN0dXJlV2F0Y2hwb2ludCBtX3N0cnVjdHVyZVdhdGNocG9pbnQ7CisgICAgUHJv
cGVydHlXYXRjaHBvaW50IG1fcHJvcGVydHlXYXRjaHBvaW50OworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxh
Y2VtZW50V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkp
OworICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQodGhpcyk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIGlmIChtX2tleS5p
c1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAg
ICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKERG
Rzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiICgiLCBtX2tleSwg
Iikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nUHJp
bnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRhdGlvbiBvZiAiLCBtX2tleSwgIiBm
YWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5nRmlyZURldGFpbCBzdHJpbmdEZXRh
aWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmpldHRp
c29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1VucHJvZmlsZWRXYXRjaHBvaW50
LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWlsKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisjZGVmaW5lIERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb2Rl
QmxvY2sqKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkg
Y29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYp
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIG1fa2V5
OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAzLDcgKzIwMywyNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
ZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50
IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29u
c3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9m
ZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9k
ZSogdmFsdWUpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBO
b2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSog
aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsK
KyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
Y29uc3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zm
c2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3Bl
cnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKworICAgIC8vIENyZWF0ZSBhIHBy
ZXNlbmNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2VkIG9uIHNvbWUga25vd24gb2Zmc2V0
IGFuZCBzdHJ1Y3R1cmUgc2V0LiBEb2VzIG5vdAorICAgIC8vIGNoZWNrIHRoZSB2YWxpZGl0eSBv
ZiB0aGUgY29uZGl0aW9uLCBidXQgaXQgbWF5IHJldHVybiBhIG51bGwgb25lIGlmIGl0IGVuY291
bnRlcnMgYSBjb250cmFkaWN0aW9uLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHByZXNl
bmNlTGlrZSgKKyAgICAgICAgSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwq
LCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgCisgICAgLy8gQXR0
ZW1wdCB0byB3YXRjaCB0aGUgcHJlc2VuY2Ugb2YgYSBwcm9wZXJ0eS4gSXQgd2lsbCB3YXRjaCB0
aGF0IHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50IGluIHRoZSBzYW1lCisgICAgLy8gd2F5IGFzIGlu
IGFsbCBvZiB0aGUgc3RydWN0dXJlcyBpbiB0aGUgc2V0LiBJdCBtYXkgZW1pdCBjb2RlIGluc3Rl
YWQgb2YganVzdCBzZXR0aW5nIGEgd2F0Y2hwb2ludC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhpcyBhbGwgd29ya3Mgb3V0LgorICAgIGJvb2wgY2hlY2tQcmVzZW5jZUxpa2UoSlNPYmplY3Qq
IGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3Ry
dWN0dXJlU2V0Jik7CisgICAgdm9pZCBjaGVja1ByZXNlbmNlTGlrZShOb2RlKiBiYXNlLCBVbmlx
dWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAg
ICAKKyAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlJZFZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIg
Zm9ybSBvZiBQdXRCeUlkVmFyaWFudC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlw
ZT4KKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYpOworCisgICAgTm9kZSogc3RvcmUo
Tm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmLCBO
b2RlKiB2YWx1ZSk7CisgICAgICAgIAogICAgIHZvaWQgaGFuZGxlR2V0QnlJZCgKICAgICAgICAg
aW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsKQEAg
LTIxMiw3ICsyMzIsMzIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAg
ICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBj
b25zdCBQdXRCeUlkU3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCk7Ci0gICAgdm9pZCBl
bWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsKKyAgICAKKyAg
ICAvLyBFaXRoZXIgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9yIGVtaXQgYSBjaGVjayBmb3IgdGhp
cyBjb25kaXRpb24uIFJldHVybnMgZmFsc2UgaWYgdGhlCisgICAgLy8gY29uZGl0aW9uIG5vIGxv
bmdlciBob2xkcywgYW5kIHRoZXJlZm9yZSBubyByZWFzb25hYmxlIGNoZWNrIGNhbiBiZSBlbWl0
dGVkLgorICAgIGJvb2wgY2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAg
ICAKKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1l
dGhvZCk7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCBvciBlbWl0
IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBJdCBtdXN0IGJlIGEgUHJlc2VuY2UKKyAgICAv
LyBjb25kaXRpb24uIEl0IHdpbGwgYXR0ZW1wdCB0byBwcm9tb3RlIGEgUHJlc2VuY2UgY29uZGl0
aW9uIHRvIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbi4KKyAgICAvLyBFbWl0cyBjb2RlIGZvciB0
aGUgbG9hZGVkIHZhbHVlIHRoYXQgdGhlIGNvbmRpdGlvbiBndWFyZHMsIGFuZCByZXR1cm5zIGEg
bm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0dXJucyBudWxsIGlm
IHRoZSBjb25kaXRpb24gbm8gbG9uZ2VyIGhvbGRzLgorICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHBs
YW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgTm9kZSogbG9hZChT
cGVjdWxhdGVkVHlwZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgR2V0QnlPZmZz
ZXRNZXRob2QmLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1
bGF0ZWRUeXBlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIE5vZGVUeXBlID0gR2V0
QnlPZmZzZXQpOworICAgIAorICAgIC8vIENhbGxzIGNoZWNrKCkgZm9yIGVhY2ggY29uZGl0aW9u
IGluIHRoZSBzZXQ6IHRoYXQgaXMsIGl0IGVpdGhlciBlbWl0cyBjaGVja3Mgb3IgcmVnaXN0ZXJz
CisgICAgLy8gd2F0Y2hwb2ludHMgKG9yIGEgY29tYmluYXRpb24gb2YgdGhlIHR3bykgdG8gbWFr
ZSB0aGUgY29uZGl0aW9ucyBob2xkLiBJZiBhbnkgb2YgdGhvc2UKKyAgICAvLyBjb25kaXRpb25z
IGFyZSBubyBsb25nZXIgY2hlY2thYmxlLCByZXR1cm5zIGZhbHNlLgorICAgIGJvb2wgY2hlY2so
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICAKKyAgICAvLyBDYWxscyBj
aGVjaygpIGZvciB0aG9zZSBjb25kaXRpb25zIHRoYXQgYXJlbid0IHRoZSBzbG90IGJhc2UsIGFu
ZCBjYWxscyBsb2FkKCkgZm9yIHRoZSBzbG90CisgICAgLy8gYmFzZS4gRG9lcyBhIGNvbWJpbmF0
aW9uIG9mIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBjaGVjayBlbWlzc2lvbiB0byBndWFy
ZCB0aGUKKyAgICAvLyBjb25kaXRpb25zLCBhbmQgZW1pdHMgY29kZSB0byBsb2FkIHRoZSB2YWx1
ZSBmcm9tIHRoZSBzbG90IGJhc2UuIFJldHVybnMgYSBub2RlIGNvbnRhaW5pbmcKKyAgICAvLyB0
aGUgbG9hZGVkIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgYW55IG9mIHRoZSBjb25kaXRpb25zIHdl
cmUgbm8gbG9uZ2VyIGNoZWNrYWJsZS4KKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwbGFuTG9hZChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOworICAgIE5vZGUqIGxvYWQoU3BlY3Vs
YXRlZFR5cGUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgTm9kZVR5cGUgPSBH
ZXRCeU9mZnNldCk7CiAKICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICB2b2lk
IGNsZWFyQ2FjaGVzKCk7CkBAIC03MDYsNiArNzUxLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBO
b2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJv
dXRlIHRvIGVtaXRQcm9wZXJ0eUNoZWNrLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIEJ1dCBj
dXJyZW50bHksCisgICAgICAgIC8vIHRoaXMgZ2V0cyBubyBwcm9maXQgZnJvbSB1c2luZyBlbWl0
UHJvcGVydHlDaGVjaygpIHNpbmNlIHdlJ2xsIG5vbi1hZGFwdGl2ZWx5IHdhdGNoIHRoZQorICAg
ICAgICAvLyBvYmplY3QncyBzdHJ1Y3R1cmUgYXMgc29vbiBhcyB3ZSBtYWtlIGl0IGEgd2Vha0pT
Q29zbnRhbnQuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25zdGFudChvYmpl
Y3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAgICByZXR1cm4g
b2JqZWN0Tm9kZTsKQEAgLTIyMjEsMTUgKzIyNjksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9k
ZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCitOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKLSAgICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgewot
ICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQpKSB7Ci0gICAgICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOwotICAgICAgICAgICAgcmV0dXJuIHdlYWtK
U0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBOb2RlKiBw
cm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0yMjQ1LDYgKzIyODYsMTggQEAgTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIHJldHVybiBnZXRCeU9mZnNldDsK
IH0KIAorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJl
U2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5v
ZGVUeXBlIG9wKQoreworICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlm
IChKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2Ut
PmFzSlNWYWx1ZSgpLCBzdHJ1Y3R1cmVTZXQsIG9mZnNldCkpIHsKKyAgICAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQo
Y29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBoYW5kbGVHZXRC
eU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQsIG9wKTsK
K30KKwogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUp
CiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMjI2MiwxMCArMjMxNSwyOTcgQEAg
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRDaGVja3MoY29uc3QgQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVja1ZlY3RvciYgdmVjdG9yKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2so
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sKKyAgICBpZiAobV9n
cmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0
dXJlKCk7CisgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVj
dHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhZGRUb0dyYXBoKAorICAg
ICAgICBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHN0cnVjdHVyZSkpLAorICAgICAgICB3ZWFrSlNDb25zdGFudChjb25kaXRpb24ub2JqZWN0
KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRob2QgQnl0ZUNvZGVQ
YXJzZXI6OnByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCkKK3sKKyAg
ICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5
cGUKKyAgICAgICAgJiYgbWV0aG9kLnByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxk
V2F0Y2goKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCksIG1ldGhvZC5wcm90
b3R5cGUoKS0+c3RydWN0dXJlKCksIG1ldGhvZC5vZmZzZXQoKSkpCisgICAgICAgICAgICByZXR1
cm4gR2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKGNvbnN0YW50KSk7
CisgICAgfQorICAgIAorICAgIHJldHVybiBtZXRob2Q7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9k
IEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJQbGFubmlu
ZyBhIGxvYWQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CisgICAgCisgICAgLy8gV2UgbWlnaHQgcHJv
bW90ZSB0aGlzIHRvIEVxdWl2YWxlbmNlLCBhbmQgYSBsYXRlciBERkcgcGFzcyBtaWdodCBhbHNv
IGRvIHN1Y2ggcHJvbW90aW9uCisgICAgLy8gZXZlbiBpZiB3ZSBmYWlsLCBidXQgZm9yIHNpbXBs
aWNpdHkgdGhpcyBjYW5ub3QgYmUgYXNrZWQgdG8gbG9hZCBhbiBlcXVpdmFsZW5jZSBjb25kaXRp
b24uCisgICAgLy8gTm9uZSBvZiB0aGUgY2xpZW50cyBvZiB0aGlzIG1ldGhvZCB3aWxsIHJlcXVl
c3QgYSBsb2FkIG9mIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbnl3YXksCisgICAgLy8gYW5k
IHN1cHBvcnRpbmcgaXQgd291bGQgY29tcGxpY2F0ZSB0aGUgaGV1cmlzdGljcyBiZWxvdy4KKyAg
ICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQ
cmVzZW5jZSk7CisgICAgCisgICAgLy8gSGVyZSdzIHRoZSByYW5raW5nIG9mIGhvdyB0byBoYW5k
bGUgdGhpcywgZnJvbSBtb3N0IHByZWZlcnJlZCB0byBsZWFzdCBwcmVmZXJyZWQ6CisgICAgLy8K
KyAgICAvLyAxKSBXYXRjaHBvaW50IG9uIGFuIGVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbmQgcmV0
dXJuIGEgY29uc3RhbnQgbm9kZSBmb3IgdGhlIGxvYWRlZCB2YWx1ZS4KKyAgICAvLyAgICBObyBv
dGhlciBjb2RlIGlzIGVtaXR0ZWQsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBiYXNlIG9iamVj
dCBpcyBuZXZlciByZWdpc3RlcmVkLgorICAgIC8vICAgIEhlbmNlIHRoaXMgcmVzdWx0cyBpbiB6
ZXJvIGNvZGUgYW5kIHdlIHdvbid0IGpldHRpc29uIHRoaXMgY29tcGlsYXRpb24gaWYgdGhlIG9i
amVjdAorICAgIC8vICAgIHRyYW5zaXRpb25zLCBldmVuIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgd2F0
Y2hhYmxlIHJpZ2h0IG5vdy4KKyAgICAvLworICAgIC8vIDIpIE5lZWQgdG8gZW1pdCBhIGxvYWQs
IGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgaXMgZ29pbmcgdG8gYmUgd2F0
Y2hlZCBieSB0aGUKKyAgICAvLyAgICBERkcgYW55d2F5IChpLmUuIGRmZ1Nob3VsZFdhdGNoKS4g
V2F0Y2ggdGhlIHN0cnVjdHVyZSBhbmQgZW1pdCB0aGUgbG9hZC4gRG9uJ3Qgd2F0Y2ggdGhlCisg
ICAgLy8gICAgY29uZGl0aW9uLCBzaW5jZSB0aGUgYWN0IG9mIHR1cm5pbmcgdGhlIGJhc2UgaW50
byBhIGNvbnN0YW50IGluIElSIHdpbGwgY2F1c2UgdGhlIERGRyB0bworICAgIC8vICAgIHdhdGNo
IHRoZSBzdHJ1Y3R1cmUgYW55d2F5IGFuZCBkb2luZyBzbyB3b3VsZCBzdWJzdW1lIHdhdGNoaW5n
IHRoZSBjb25kaXRpb24uCisgICAgLy8KKyAgICAvLyAzKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBh
bmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIHdhdGNoYWJsZSBidXQgbm90
IGJ5IHRoZQorICAgIC8vICAgIERGRyAoaS5lLiB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3Rp
bGxWYWxpZCgpIGFuZCAhZGZnU2hvdWxkV2F0Y2hJZlBvc3NpYmxlKCkpLiBXYXRjaAorICAgIC8v
ICAgIHRoZSBjb25kaXRpb24sIGFuZCBlbWl0IGEgbG9hZC4KKyAgICAvLworICAgIC8vIDQpIE5l
ZWQgdG8gZW1pdCBhIGxvYWQsIGFuZCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2Ug
aXMgbm90IHdhdGNoYWJsZS4gRW1pdCBhCisgICAgLy8gICAgc3RydWN0dXJlIGNoZWNrLCBhbmQg
ZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA1KSBUaGUgY29uZGl0aW9uIGRvZXMgbm90IGhv
bGQuIEdpdmUgdXAgYW5kIHJldHVybiBudWxsLgorICAgIAorICAgIC8vIEZpcnN0LCB0cnkgdG8g
cHJvbW90ZSBQcmVzZW5jZSB0byBFcXVpdmFsZW5jZS4gV2UgZG8gdGhpcyBiZWZvcmUgZG9pbmcg
YW55dGhpbmcgZWxzZQorICAgIC8vIGJlY2F1c2UgaXQncyB0aGUgbW9zdCBwcm9maXRhYmxlLiBB
bHNvLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIHByZXNlbmNlIGlzIHdhdGNoYWJsZSBidXQK
KyAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHdhdGNoIGl0IHVubGVzcyBpdCBiZWNhbWUgYW4gZXF1
aXZhbGVuY2UgKHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4KKyAgICAvLyAoMSksICgyKSwg
YW5kICgzKSBhYm92ZSkuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VD
b25kaXRpb24gPSBjb25kaXRpb24uYXR0ZW1wdFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJp
ZXIoKTsKKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihlcXVpdmFsZW5jZUNvbmRpdGlv
bikpCisgICAgICAgIHJldHVybiBHZXRCeU9mZnNldE1ldGhvZDo6Y29uc3RhbnQobV9ncmFwaC5m
cmVlemUoZXF1aXZhbGVuY2VDb25kaXRpb24ucmVxdWlyZWRWYWx1ZSgpKSk7CisgICAgCisgICAg
Ly8gQXQgdGhpcyBwb2ludCwgd2UnbGwgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgY29uZGl0aW9u
J3MgYmFzZSBhcyBhIGNvbnN0YW50IGluIERGRyBJUi4gT25jZQorICAgIC8vIHdlIGRvIHRoaXMs
IHRoZSBmcm96ZW4gdmFsdWUgd2lsbCBoYXZlIGl0cyBvd24gaWRlYSBvZiB3aGF0IHRoZSBzdHJ1
Y3R1cmUgaXMuIFVzZSB0aGF0IGZyb20KKyAgICAvLyBub3cgb24ganVzdCBiZWNhdXNlIGl0J3Mg
bGVzcyBjb25mdXNpbmcuCisgICAgRnJvemVuVmFsdWUqIGJhc2UgPSBtX2dyYXBoLmZyZWV6ZShj
b25kaXRpb24ub2JqZWN0KCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3Ry
dWN0dXJlKCk7CisgICAgCisgICAgLy8gQ2hlY2sgaWYgdGhlIHN0cnVjdHVyZSB0aGF0IHdlJ3Zl
IHJlZ2lzdGVyZWQgbWFrZXMgdGhlIGNvbmRpdGlvbiBob2xkLiBJZiBub3QsIGp1c3QgZ2l2ZQor
ICAgIC8vIHVwLiBUaGlzIGlzIGNhc2UgKDUpIGFib3ZlLgorICAgIGlmICghY29uZGl0aW9uLnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gR2V0QnlP
ZmZzZXRNZXRob2QoKTsKKyAgICAKKyAgICAvLyBJZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoZWQg
YnkgdGhlIERGRyBhbHJlYWR5LCB0aGVuIGp1c3QgdXNlIHRoaXMgZmFjdCB0byBlbWl0IHRoZSBs
b2FkLgorICAgIC8vIFRoaXMgaXMgY2FzZSAoMikgYWJvdmUuCisgICAgaWYgKHN0cnVjdHVyZS0+
ZGZnU2hvdWxkV2F0Y2goKSkKKyAgICAgICAgcmV0dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5
T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkp
KTsKKyAgICAKKyAgICAvLyBJZiB3ZSBjYW4gd2F0Y2ggdGhlIGNvbmRpdGlvbiByaWdodCBub3cs
IHRoZW4gd2UgY2FuIGVtaXQgdGhlIGxvYWQgYWZ0ZXIgd2F0Y2hpbmcgaXQuIFRoaXMKKyAgICAv
LyBpcyBjYXNlICgzKSBhYm92ZS4KKyAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25k
aXRpb24pKQorICAgICAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRo
b2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZzZXQoKSkpOworICAgIAor
ICAgIC8vIFdlIGNhbid0IHdhdGNoIGFueXRoaW5nIGJ1dCB3ZSBrbm93IHRoYXQgdGhlIGN1cnJl
bnQgc3RydWN0dXJlIHNhdGlzZmllcyB0aGUgY29uZGl0aW9uLiBTbywKKyAgICAvLyBjaGVjayBm
b3IgdGhhdCBzdHJ1Y3R1cmUgYW5kIHRoZW4gZW1pdCB0aGUgbG9hZC4KKyAgICBhZGRUb0dyYXBo
KAorICAgICAgICBDaGVja1N0cnVjdHVyZSwgCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAgICAgICAgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8oYmFzZSkpKTsKKyAgICByZXR1cm4gcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRN
ZXRob2Q6OmxvYWRGcm9tUHJvdG90eXBlKGJhc2UsIGNvbmRpdGlvbi5vZmZzZXQoKSkpOworfQor
CitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYg
bWV0aG9kLAorICAgIE5vZGVUeXBlIG9wKQoreworICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkg
eworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICBy
ZXR1cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLmNvbnN0YW50KCkpKTsK
KyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAg
ICBOb2RlKiBiYXNlTm9kZSA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5w
cm90b3R5cGUoKSkpOworICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlv
biwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOworICAg
IH0KKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgorICAgICAgICAvLyBXaWxsIG5l
dmVyIHNlZSB0aGlzIGZyb20gcGxhbkxvYWQoKS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05v
ZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24s
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIE5vZGVUeXBlIG9wKQor
eworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2FkKGNvbmRpdGlvbik7Cisg
ICAgcmV0dXJuIGxvYWQocHJlZGljdGlvbiwgbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShj
b25kaXRpb24udWlkKCkpLCBtZXRob2QsIG9wKTsKK30KKworYm9vbCBCeXRlQ29kZVBhcnNlcjo6
Y2hlY2soY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sK
KyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRp
dGlvblNldCkgeworICAgICAgICBpZiAoIWNoZWNrKGNvbmRpdGlvbikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitHZXRCeU9mZnNldE1l
dGhvZCBCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiY29uZGl0aW9uU2V0ID0gIiwgY29uZGl0aW9uU2V0LCAiXG4iKTsKKyAgICAKKyAgICBHZXRC
eU9mZnNldE1ldGhvZCByZXN1bHQ7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRp
b24ua2luZCgpKSB7CisgICAgICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlOgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7IC8vIFNob3VsZCBvbmx5IHNlZSBl
eGFjdGx5IG9uZSBvZiB0aGVzZS4KKyAgICAgICAgICAgIHJlc3VsdCA9IHBsYW5Mb2FkKGNvbmRp
dGlvbik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2V0QnlPZmZzZXRNZXRob2QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgaWYgKCFjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHZXRCeU9mZnNldE1ldGhvZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoISFyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
IE5vZGVUeXBlIG9wKQoreworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IHBsYW5Mb2Fk
KGNvbmRpdGlvblNldCk7CisgICAgcmV0dXJuIGxvYWQoCisgICAgICAgIHByZWRpY3Rpb24sCisg
ICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkudWlkKCkpLAorICAgICAgICBtZXRob2QsIG9wKTsKK30KKworT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gQnl0ZUNvZGVQYXJzZXI6OnByZXNlbmNlTGlrZSgKKyAgICBKU09iamVj
dCoga25vd25CYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIGlmIChzZXQuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzOworICAgIFByb3BlcnR5T2Zmc2V0IGZpcnN0T2Zmc2V0ID0gc2V0WzBdLT5nZXRD
b25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICBpZiAoZmlyc3RPZmZzZXQgIT0gb2Zm
c2V0KQorICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVk
IG90aGVyQXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb3RoZXJPZmZzZXQgPSBz
ZXRbaV0tPmdldENvbmN1cnJlbnRseSh1aWQsIG90aGVyQXR0cmlidXRlcyk7CisgICAgICAgIGlm
IChvdGhlck9mZnNldCAhPSBvZmZzZXQgfHwgb3RoZXJBdHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMp
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICB9Cisg
ICAgcmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVy
KGtub3duQmFzZSwgdWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworfQorCitib29sIEJ5dGVDb2Rl
UGFyc2VyOjpjaGVja1ByZXNlbmNlTGlrZSgKKyAgICBKU09iamVjdCoga25vd25CYXNlLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc2V0KQoreworICAgIHJldHVybiBjaGVjayhwcmVzZW5jZUxpa2Uoa25vd25CYXNlLCB1
aWQsIG9mZnNldCwgc2V0KSk7Cit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrUHJlc2Vu
Y2VMaWtlKAorICAgIE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgaWYgKEpTT2Jq
ZWN0KiBrbm93bkJhc2UgPSBiYXNlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkg
eworICAgICAgICBpZiAoY2hlY2tQcmVzZW5jZUxpa2Uoa25vd25CYXNlLCB1aWQsIG9mZnNldCwg
c2V0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhZGRUb0dyYXBoKENoZWNr
U3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc2V0KSksIGJhc2UpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KK05vZGUqIEJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJiB2YXJpYW50KQoreworICAg
IC8vIE1ha2Ugc3VyZSBiYWNrd2FyZHMgcHJvcGFnYXRpb24ga25vd3MgdGhhdCB3ZSd2ZSB1c2Vk
IGJhc2UuCisgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAKKyAgICBib29sIG5l
ZWRTdHJ1Y3R1cmVDaGVjayA9IHRydWU7CisgICAgCisgICAgaWYgKEpTT2JqZWN0KiBrbm93bkJh
c2UgPSBiYXNlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oKSkgeworICAgICAgICAv
LyBUcnkgdG8gb3B0aW1pemUgYXdheSB0aGUgc3RydWN0dXJlIGNoZWNrLiBOb3RlIHRoYXQgaXQn
cyBub3Qgd29ydGggZG9pbmcgYW55dGhpbmcgYWJvdXQgdGhpcworICAgICAgICAvLyBpZiB0aGUg
YmFzZSdzIHN0cnVjdHVyZSBpcyB3YXRjaGVkLgorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2UtPmNvbnN0YW50KCktPnN0cnVjdHVyZSgpOworICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCF2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSdyZSBsb2FkaW5nIGZyb20gYSBw
cm90b3R5cGUuIFdlIGV4cGVjdCB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0aGUKKyAgICAgICAgICAg
ICAgICAvLyBwcm9wZXJ0eS4gV2UgY2FuIG9ubHkgdXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IGlmIGFsbCBvZiB0aGUgc3RydWN0dXJlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyB2YXJp
YW50LnN0cnVjdHVyZVNldCgpIGFncmVlIG9uIHRoZSBwcm90b3R5cGUgKGl0IHdvdWxkIGJlIGhp
bGFyaW91c2x5IHJhcmUgaWYgdGhleQorICAgICAgICAgICAgICAgIC8vIGRpZG4ndCkuIE5vdGUg
dGhhdCB3ZSBhcmUgcmVseWluZyBvbiBzdHJ1Y3R1cmVTZXQoKSBoYXZpbmcgYXQgbGVhc3Qgb25l
IGVsZW1lbnQuIFRoYXQKKyAgICAgICAgICAgICAgICAvLyB3aWxsIGFsd2F5cyBiZSB0cnVlIGhl
cmUgYmVjYXVzZSBvZiBob3cgR2V0QnlJZFN0YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAg
ICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KClb
MF0tPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpOworICAgICAgICAgICAgICAgIGJvb2wgYWxsQWdy
ZWUgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2YXJp
YW50LnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJpYW50LnN0cnVjdHVyZVNldCgpW2ldLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSAhPSBw
cm90b3R5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbEFncmVlID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYWxsQWdyZWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gT2JqZWN0UHJv
cGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGtub3duQmFzZSwgdWlkLCBwcm90b3R5cGUpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hlY2soY29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRTdHJ1Y3R1
cmVDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSdyZSBsb2FkaW5nIGRpcmVjdGx5IGZy
b20gYmFzZS4gV2UgY2FuIGF2b2lkIGFsbCBvZiB0aGUgY29kZSB0aGF0IGZvbGxvd3MKKyAgICAg
ICAgICAgICAgICAvLyBpZiB3ZSBjYW4gcHJvdmUgdGhhdCB0aGUgcHJvcGVydHkgaXMgYSBjb25z
dGFudC4gT3RoZXJ3aXNlLCB3ZSB0cnkgdG8gcHJvdmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAg
ICAvLyBwcm9wZXJ0eSBpcyB3YXRjaGFibHkgcHJlc2VudCwgaW4gd2hpY2ggY2FzZSB3ZSBnZXQg
cmlkIG9mIHRoZSBzdHJ1Y3R1cmUgY2hlY2suCisKKyAgICAgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIHBy
ZXNlbmNlTGlrZShrbm93bkJhc2UsIHVpZCwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1
Y3R1cmVTZXQoKSk7CisKKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBl
cXVpdmFsZW5jZUNvbmRpdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIHByZXNlbmNlQ29uZGl0
aW9uLmF0dGVtcHRUb01ha2VFcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKCk7CisgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oZXF1aXZhbGVuY2VDb25kaXRpb24pKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoZXF1aXZhbGVuY2VDb25k
aXRpb24ucmVxdWlyZWRWYWx1ZSgpKTsKKworICAgICAgICAgICAgICAgIGlmIChjaGVjayhwcmVz
ZW5jZUNvbmRpdGlvbikpCisgICAgICAgICAgICAgICAgICAgIG5lZWRTdHJ1Y3R1cmVDaGVjayA9
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5lZWRT
dHJ1Y3R1cmVDaGVjaykKKyAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7
CisgICAgCisgICAgU3BlY3VsYXRlZFR5cGUgbG9hZFByZWRpY3Rpb247CisgICAgTm9kZVR5cGUg
bG9hZE9wOworICAgIGlmICh2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgbG9h
ZFByZWRpY3Rpb24gPSBTcGVjQ2VsbE90aGVyOworICAgICAgICBsb2FkT3AgPSBHZXRHZXR0ZXJT
ZXR0ZXJCeU9mZnNldDsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkUHJlZGljdGlvbiA9IHBy
ZWRpY3Rpb247CisgICAgICAgIGxvYWRPcCA9IEdldEJ5T2Zmc2V0OworICAgIH0KKyAgICAKKyAg
ICBOb2RlKiBsb2FkZWRWYWx1ZTsKKyAgICBpZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNF
bXB0eSgpKQorICAgICAgICBsb2FkZWRWYWx1ZSA9IGxvYWQobG9hZFByZWRpY3Rpb24sIHZhcmlh
bnQuY29uZGl0aW9uU2V0KCksIGxvYWRPcCk7CisgICAgZWxzZSB7CisgICAgICAgIGxvYWRlZFZh
bHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFz
ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZz
ZXQoKSwKKyAgICAgICAgICAgIGxvYWRPcCk7CisgICAgfQorCisgICAgcmV0dXJuIGxvYWRlZFZh
bHVlOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVl
KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayh2ZWN0b3JbaV0uY29uc3RhbnQo
KSwgdmVjdG9yW2ldLnN0cnVjdHVyZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisKKyAgICBjaGVja1ByZXNlbmNlTGlr
ZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0
KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOworICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChi
YXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCkBAIC0yMjg4LDE4ICsyNjI4LDM2IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAg
ICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7Ci0g
ICAgCisgICAgICAgIFZlY3RvcjxNdWx0aUdldEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7CisgICAg
ICAgIAogICAgICAgICAvLyAxKSBFbWl0IHByb3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBh
bGwgY2hhaW5zLiBUaGlzIGNvdWxkIHNvcnQgb2YgbWF5YmUgbm90IGJlCiAgICAgICAgIC8vICAg
IG9wdGltYWwsIGlmIHRoZXJlIGlzIHNvbWUgcmFyZWx5IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNo
YWluIHRoYXQgcmVxdWlyZXMgYSBsb3QKICAgICAgICAgLy8gICAgb2YgY2hlY2tzIGFuZCB0aG9z
ZSBjaGVja3MgYXJlIG5vdCB3YXRjaHBvaW50YWJsZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCB2
YXJpYW50SW5kZXggPSBnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0t
OykKLSAgICAgICAgICAgIGVtaXRDaGVja3MoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNv
bnN0YW50Q2hlY2tzKCkpOwotICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCA6IGdldEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAg
aWYgKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZDo6bG9hZCh2YXJpYW50Lm9mZnNldCgp
KSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZCh2YXJp
YW50LmNvbmRpdGlvblNldCgpKTsKKyAgICAgICAgICAgIGlmICghbWV0aG9kKSB7CisgICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAorICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVy
KSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoTXVs
dGlHZXRCeU9mZnNldENhc2UodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgbWV0aG9kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAg
bV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOworICAgIAogICAg
ICAgICAvLyAyKSBFbWl0IGEgTXVsdGlHZXRCeU9mZnNldAogICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAg
ICAgICAgZGF0YS0+dmFyaWFudHMgPSBnZXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAg
IGRhdGEtPmNhc2VzID0gY2FzZXM7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBp
ZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9u
T3BlcmFuZCksCiAgICAgICAgICAgICBhZGRUb0dyYXBoKE11bHRpR2V0QnlPZmZzZXQsIE9wSW5m
byhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CkBAIC0yMzA5LDMwICsyNjY3LDE2
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgQVNTRVJUKGdldEJ5
SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50
ID0gZ2V0QnlJZFN0YXR1c1swXTsKICAgICAgICAgICAgICAgICAKKyAgICBOb2RlKiBsb2FkZWRW
YWx1ZSA9IGxvYWQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7
CisgICAgaWYgKCFsb2FkZWRWYWx1ZSkgeworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRl
c3RpbmF0aW9uT3BlcmFuZCksCisgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAg
ICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7CiAgICAgCi0g
ICAgTm9kZSogb3JpZ2luYWxCYXNlID0gYmFzZTsKLSAgICAgICAgICAgICAgICAKLSAgICBhZGRU
b0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKLSAgICAKLSAgICBlbWl0Q2hlY2tzKHZhcmlh
bnQuY29uc3RhbnRDaGVja3MoKSk7Ci0KLSAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
Ci0gICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7
Ci0gICAgCi0gICAgLy8gVW5sZXNzIHdlIHdhbnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4Mywgd2UgbmVlZCB0bwotICAgIC8vIGVuc3VyZSB0
aGF0IHRoZSBiYXNlIG9mIHRoZSBvcmlnaW5hbCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRp
bCB3ZSdyZSBkb25lIHdpdGgKLSAgICAvLyBhbGwgb2YgdGhlIHNwZWN1bGF0aW9ucy4gV2Ugb25s
eSBpbnNlcnQgdGhlIFBoYW50b20gaWYgdGhlcmUgaGFkIGJlZW4gYSBDaGVja1N0cnVjdHVyZQot
ICAgIC8vIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hl
Y2tTdHJ1Y3R1cmUgb24gYmFzZS4KLSAgICBpZiAob3JpZ2luYWxCYXNlICE9IGJhc2UpCi0gICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgb3JpZ2luYWxCYXNlKTsKLSAgICAKLSAgICBOb2RlKiBs
b2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICB2YXJpYW50LmNhbGxMaW5r
U3RhdHVzKCkgPyBTcGVjQ2VsbE90aGVyIDogcHJlZGljdGlvbiwKLSAgICAgICAgYmFzZSwgdmFy
aWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCks
Ci0gICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zm
c2V0IDogR2V0QnlPZmZzZXQpOwotICAgIAogICAgIGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1
cygpKSB7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwg
bG9hZGVkVmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC0yMzY5LDcgKzI3MTMsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIC8vICAgIHNpbmNlIHdlIG9ubHkg
cmVhbGx5IGNhcmUgYWJvdXQgJ3RoaXMnIGluIHRoaXMgY2FzZS4gQnV0IHdlJ3JlIG5vdCBnb2lu
ZyB0byB0YWtlIHRoYXQKICAgICAvLyAgICBzaG9ydGN1dC4KICAgICBpbnQgbmV4dFJlZ2lzdGVy
ID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIEltbWVkaWF0
ZU5ha2VkU2V0KTsKKyAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFz
ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgIAogICAgIGhhbmRsZUNhbGwoCiAgICAgICAgIGRl
c3RpbmF0aW9uT3BlcmFuZCwgQ2FsbCwgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsLCBPUENP
REVfTEVOR1RIKG9wX2dldF9ieV9pZCksCkBAIC0yNDAzLDE3ICsyNzQ3LDIwIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAg
ICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Ci0gICAg
ICAgIAogICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4
LS07KSB7CiAgICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5r
aW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGVtaXRDaGVja3MocHV0QnlJZFN0YXR1c1t2YXJp
YW50SW5kZXhdLmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICAgICAgICAgIGlmICghY2hlY2so
cHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAg
ICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAorICAgICAg
ICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworICAgICAgICAKICAgICAgICAgTXVsdGlQ
dXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRk
KCk7CiAgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOwog
ICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKQEAgLTI0
MjYsOCArMjc3Myw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAg
CiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6
OlJlcGxhY2U6IHsKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAg
ICAgIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zm
c2V0KCksIHZhbHVlKTsKKyAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFy
aWFudCwgdmFsdWUpOwogICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogICAg
ICAgICByZXR1cm47CkBAIC0yNDM1LDcgKzI3ODEsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlJZCgKICAgICAKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
OiB7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBl
bWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIGlmICghY2hlY2so
dmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2Us
IGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRT
dHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbklu
dmFsaWRhdGVkKCkpOwogICAgIApAQCAtMjQ4NiwxOSArMjgzNSwxMSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlk
VmFyaWFudDo6U2V0dGVyOiB7Ci0gICAgICAgIE5vZGUqIG9yaWdpbmFsQmFzZSA9IGJhc2U7Ci0g
ICAgICAgIAotICAgICAgICBhZGRUb0dyYXBoKAotICAgICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUs
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJh
c2UpOwotICAgICAgICAKLSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tz
KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAg
ICAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsK
LSAgICAgICAgCi0gICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQo
Ci0gICAgICAgICAgICBTcGVjQ2VsbE90aGVyLCBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUo
KSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIEdldEdl
dHRlclNldHRlckJ5T2Zmc2V0KTsKKyAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNw
ZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgICAgICBp
ZiAoIWxvYWRlZFZhbHVlKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlm
aWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRU
b0dyYXBoKEdldFNldHRlciwgbG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI1MjYsNyArMjg2
Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKICAgICAKICAg
ICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIG9yaWdpbmFsQmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgdmFsdWUsIEltbWVkaWF0
ZU5ha2VkU2V0KTsKICAgICAKICAgICAgICAgaGFuZGxlQ2FsbCgKQEAgLTM0NjYsNiArMzgwNyw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CisKICAgICAgICAgICAgICAgICBHZXRCeUlkU3Rh
dHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Ioc3RydWN0dXJlLCB1aWQpOwog
ICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuc3RhdGUoKSAhPSBHZXRCeUlkU3RhdHVzOjpTaW1w
bGUKICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMQpAQCAt
MzQ3Myw5ICszODE1LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dy
YXBoKEdldEJ5SWRGbHVzaCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSkpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9
IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1c1swXS5z
dHJ1Y3R1cmVTZXQoKS5vbmx5U3RydWN0dXJlKCkpOworCisgICAgICAgICAgICAgICAgTm9kZSog
YmFzZSA9IHdlYWtKU0NvbnN0YW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICAgICAgTm9k
ZSogcmVzdWx0ID0gbG9hZChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0
dXNbMF0pOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIHN0YXR1c1swXS5zdHJ1Y3R1
cmVTZXQoKSwgaWRlbnRpZmllck51bWJlciwgb3BlcmFuZCkpOworICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgcmVzdWx0KTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMzYxOSwxMCAr
Mzk2Myw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJl
ciksIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIEFTU0VSVChzdGF0dXNbMF0uc3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgp
ID09IHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25zdGFu
dFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwot
ICAgICAgICAgICAgICAgIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIs
IHN0YXRpY19jYXN0PFByb3BlcnR5T2Zmc2V0PihvcGVyYW5kKSwgZ2V0KFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gd2Vha0pTQ29uc3RhbnQo
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCBzdGF0dXNbMF0sIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAg
ICAgICAgLy8gS2VlcCBzY29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCiAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw5IEBA
IHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAg
ICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5
LmNvbnN0YW50KCkpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZvciAoQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRjaHBvaW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50cykKKyAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNr
ZWRSZWZlcmVuY2VzKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4NzYwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNp
bmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk4
LDYgKzEwMCw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdl
YWtSZWZlcmVuY2VzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8U3RydWN0dXJlPj4gd2Vha1N0
cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgQmFnPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dD4gd2F0Y2hwb2ludHM7CisgICAgQmFnPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gYWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsKKyAgICBCYWc8QWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50PiBhZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7CiAgICAg
CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCwyMSArMjk0
LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGlu
ZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUg
c3RhdGUgYmVmb3JlLgogICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8g
RG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0
aGlzLgogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRz
Lmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudmFyaWFudHMucmVtb3ZlTGFz
dCgpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2Vz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNl
JiBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0Q2FzZS5z
ZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdldENhc2Uu
c2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzW2kt
LV0gPSBkYXRhLmNhc2VzLmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2Fz
ZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKGRhdGEudmFyaWFudHMuc2l6ZSgpICE9IDEpCisgICAg
ICAgICAgICAgICAgaWYgKGRhdGEuY2FzZXMuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9m
ZnNldCgKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUs
IGRhdGEudmFyaWFudHNbMF0sIGRhdGEuaWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICAg
ICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBkYXRhLmNh
c2VzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzc0LDgg
KzM3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJp
YW50cygpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzW2ldLmNvbnN0
YW50Q2hlY2tzKCkuaXNFbXB0eSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNb
aV0uYWx0ZXJuYXRlQmFzZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzW2ld
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGNvdWxkIGhhbmRsZSBwcm90b3R5cGUgY2FzZXMuCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzg2
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM5Miw3ICszOTAsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlH
ZXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBz
dGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YS0+Y2FzZXMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9m
ZnNldENhc2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRCeU9mZnNldE1ldGhvZDo6bG9h
ZCh2YXJpYW50Lm9mZnNldCgpKSkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9NdWx0aUdldEJ5T2Zmc2V0KGRhdGEpOwogICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwpAQCAtNDMyLDkgKzQzNSwzMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAg
ICAgYWRkQ2hlY2tzKG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBzdGF0dXNbaV0uY29uc3RhbnRDaGVj
a3MoKSk7CisKKyAgICAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFu
dHMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0
aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCkt
PnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb24uc3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5KHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxHb29kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUtPm9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
c3RydWN0dXJlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Q29uc3RhbnRGb3JVc2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgbm9kZS0+b3JpZ2luLCBjb25kaXRpb24ub2JqZWN0KCksIEtub3duQ2VsbFVz
ZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0g
MSkgewogICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBu
b2RlLCBiYXNlVmFsdWUsIHN0YXR1c1swXSwgaWRlbnRpZmllck51bWJlcik7CkBAIC01MjksNDEg
KzU1NCw3MiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAg
ICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBNdWx0
aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAg
ICB7CisgICAgICAgIC8vIFdoZW4gd2UgZ2V0IHRvIGhlcmUgd2UgaGF2ZSBhbHJlYWR5IGVtaXR0
ZWQgYWxsIG9mIHRoZSByZXF1aXNpdGUgY2hlY2tzIGZvciBldmVyeXRoaW5nLgorICAgICAgICAv
LyBTbywgd2UganVzdCBuZWVkIHRvIGVtaXQgd2hhdCB0aGUgbWV0aG9kIG9iamVjdCB0ZWxscyB1
cyB0byBlbWl0LgogICAgICAgICAKKyAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywg
bm9kZSwgYmFzZVZhbHVlLCBnZXRDYXNlLnNldCgpKTsKKworICAgICAgICBHZXRCeU9mZnNldE1l
dGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhvZCgpOworICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChtZXRob2Qua2luZCgpKSB7CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFs
aWQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkNvbnN0YW50OgorICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBt
ZXRob2QuY29uc3RhbnQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgICAgIGVtaXRHZXRC
eU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIG5vZGUtPmNoaWxkMSgpLCBpZGVudGlmaWVyTnVt
YmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7Cisg
ICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAor
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZS0+b3JpZ2luLCBtZXRob2QucHJvdG90
eXBlKCkpOworICAgICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgbm9kZSwgRWRnZShjaGlsZCwgS25vd25DZWxsVXNlKSwgaWRlbnRpZmllck51
bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSB9
CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICAKICAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5v
ZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgR2V0QnlJZFZh
cmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCiAgICAgewotICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBjaGlsZEVk
Z2UgPSBub2RlLT5jaGlsZDEoKTsKIAogICAgICAgICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2Nr
LCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAKLSAg
ICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKQotICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlVmFsdWUubV92
YWx1ZTsKLSAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50
UHJvcGVydHkoYmFzZUZvckxvYWQsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9m
ZnNldCgpKSkgeworICAgICAgICAvLyBXZSBhcmVuJ3Qgc2V0IHVwIHRvIGhhbmRsZSBwcm90b3R5
cGUgc3R1ZmYuCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyaWFudC5jb25k
aXRpb25TZXQoKS5pc0VtcHR5KCkpOworCisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9n
cmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VWYWx1ZS5tX3ZhbHVlLCB2YXJpYW50LnN0
cnVjdHVyZVNldCgpLCB2YXJpYW50Lm9mZnNldCgpKSkgewogICAgICAgICAgICAgbV9ncmFwaC5j
b252ZXJ0VG9Db25zdGFudChub2RlLCBtX2dyYXBoLmZyZWV6ZSh2YWx1ZSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAodmFyaWFudC5hbHRl
cm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Q29uc3RhbnQoaW5kZXhJbkJsb2NrLCBvcmlnaW4sIHZhcmlhbnQuYWx0ZXJuYXRlQmFz
ZSgpKTsKLSAgICAgICAgICAgIGNoaWxkRWRnZSA9IEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVzZSk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgY2hp
bGRFZGdlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBu
b2RlLCBFZGdlIGNoaWxkRWRnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKICAgICAgICAgCiAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAg
ICAKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGNoaWxkRWRnZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBvcmlnaW4sIGNoaWxkRWRnZSkpOwor
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgbm9k
ZS0+b3JpZ2luLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgp
OwotICAgICAgICBkYXRhLm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CisgICAgICAgIGRhdGEu
b2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlm
aWVyTnVtYmVyOwogICAgICAgICAKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQo
ZGF0YSwgcHJvcGVydHlTdG9yYWdlKTsKQEAgLTY0MywxNSArNjk5LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENoZWNrKGluZGV4SW5CbG9jaywgbm9kZS0+
b3JpZ2luLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYWRkQ2hlY2tz
KAotICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBjb25z
dCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjaGVja3MpCi0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hlY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgb3JpZ2luLCBp
bmRleEluQmxvY2ssIGNoZWNrc1tpXS5jb25zdGFudCgpLCBjaGVja3NbaV0uc3RydWN0dXJlKCkp
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hl
Y2soTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgSlNDZWxsKiBjZWxs
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKGNlbGwtPnN0cnVjdHVyZSgpKSA9PSBTdHJ1Y3R1cmVSZWdpc3RlcmVkQW5k
V2F0Y2hlZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsOCArMzUsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEFy
cmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29tbW9u
RGF0YSYgY29tbW9uKQogeworICAgIFdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBjb21tb24ud2F0
Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7CiAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50KiBuZXV0ZXJpbmdXYXRjaHBvaW50ID0KICAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50OjpjcmVhdGUoKmNvZGVCbG9jay0+dm0oKSk7CiAgICAgbmV1dGVyaW5nV2F0Y2hw
b2ludC0+c2V0KCktPmFkZCh3YXRjaHBvaW50KTsKQEAgLTQ1LDEwICs0NiwyMyBAQCB2b2lkIEFy
cmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphCiB9CiAKIHZvaWQgSW5mZXJyZWRWYWx1
ZUFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSog
aW5mZXJyZWRWYWx1ZSwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgQ29tbW9uRGF0YSYgY29tbW9u
KQogewogICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBj
b21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90
LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBpbmZl
cnJlZFZhbHVlLT5hZGQod2F0Y2hwb2ludCk7CisgICAgaW5mZXJyZWRWYWx1ZS0+YWRkKGNvbW1v
bi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7Cisg
ICAgc3dpdGNoIChrZXkua2luZCgpKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1
aXZhbGVuY2U6CisgICAgICAgIGNvbW1vbi5hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgY29tbW9uLmFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dHMuYWRkKGtleSwgY29kZUJsb2NrKS0+aW5zdGFsbCgpOworICAgICAgICBicmVhazsKKyAgICB9
CiB9CiAKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CkBAIC03
NCw2ICs4OCwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJyCiAg
ICAgbV9idWZmZXJWaWV3cy5hZGRMYXppbHkodmlldyk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNo
cG9pbnRzOjphZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKK3sK
KyAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAg
IGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtODgsNiArMTA3LDcgQEAgdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5saW5lU2V0cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2luZmVycmVkVmFsdWVzLnJl
YWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5
QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMu
cmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNo
cG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTk1LDcgKzExNSwxOCBAQCBib29sIERl
c2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgcmV0dXJuIG1fc2V0cy5hcmVT
dGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAg
ICAgICAmJiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2J1
ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVT
dGlsbFZhbGlkKCkKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxW
YWxpZCgpOworfQorCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIkRlc2lyZWQgd2F0Y2hwb2ludHM6XG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBXYXRjaHBv
aW50IHNldHM6ICIsIGluQ29udGV4dChtX3NldHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQu
cHJpbnQoIiAgICBJbmxpbmUgd2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9pbmxpbmVT
ZXRzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdmFsdWVz
OiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFZhbHVlcywgY29udGV4dCksICJcbiIpOworICAgIG91
dC5wcmludCgiICAgIEJ1ZmZlciB2aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3MsIGNv
bnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29uZGl0
aW9uczogIiwgaW5Db250ZXh0KG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxu
Iik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbkRh
dGEuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
clZpZXcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgogI2luY2x1ZGUg
IldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNDAs
MzMgKzQyLDU2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEdyYXBo
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEdlbmVyaWNTZXRBZGFwdG9yIHsKLSAg
ICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgVCBzZXQsIFdhdGNocG9pbnQqIHdhdGNocG9p
bnQpCitzdHJ1Y3QgU2V0UG9pbnRlckFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgVCBzZXQsIENvbW1vbkRhdGEmIGNvbW1vbikKICAgICB7Ci0gICAg
ICAgIHJldHVybiBzZXQtPmFkZCh3YXRjaHBvaW50KTsKKyAgICAgICAgcmV0dXJuIHNldC0+YWRk
KGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7CiAgICAgfQogICAgIHN0YXRpYyBi
b29sIGhhc0JlZW5JbnZhbGlkYXRlZChUIHNldCkgeyByZXR1cm4gc2V0LT5oYXNCZWVuSW52YWxp
ZGF0ZWQoKTsgfQorICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgVCBzZXQsIER1bXBDb250ZXh0KikKKyAgICB7CisgICAgICAgIG91dC5wcmludChSYXdQb2lu
dGVyKHNldCkpOworICAgIH0KIH07CiAKIHN0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7Ci0g
ICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBXYXRjaHBvaW50
Kik7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBDb21t
b25EYXRhJik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEluZmVycmVkVmFs
dWUqIGluZmVycmVkVmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gaW5mZXJyZWRWYWx1ZS0+
aGFzQmVlbkludmFsaWRhdGVkKCk7CiAgICAgfQorICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgRHVtcENv
bnRleHQqKQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoaW5mZXJyZWRWYWx1
ZSkpOworICAgIH0KIH07CiAKIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRv
ciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3Kiwg
V2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVm
ZmVyVmlldyosIENvbW1vbkRhdGEmKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0
ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9
ICF2aWV3LT5sZW5ndGgoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiAhdmlldy0+bGVuZ3RoKCk7CisgICAgfQor
ICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgSlNBcnJheUJ1
ZmZlclZpZXcqIHZpZXcsIER1bXBDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgb3V0
LnByaW50KGluQ29udGV4dChKU1ZhbHVlKHZpZXcpLCBjb250ZXh0KSk7CisgICAgfQorfTsKKwor
c3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3IgeworICAgIHN0YXRpYyB2
b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvbW1v
bkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAha2V5LmlzV2F0
Y2hhYmxlKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoCisgICAgICAg
IFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIER1
bXBDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChr
ZXksIGNvbnRleHQpKTsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50
U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IEdlbmVyaWNTZXRBZGFwdG9yPFdhdGNocG9pbnRT
ZXRUeXBlPj4KK3RlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBlLCB0eXBlbmFtZSBB
ZGFwdG9yID0gU2V0UG9pbnRlckFkYXB0b3I8V2F0Y2hwb2ludFNldFR5cGU+PgogY2xhc3MgR2Vu
ZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHR5cGVk
ZWYgSGFzaE1hcDxXYXRjaHBvaW50U2V0VHlwZSwgYm9vbD4gU3RhdGVNYXA7CkBAIC04Nyw3ICsx
MTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQotICAgICAgICAgICAg
QWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVC
bG9jaykpOworICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24p
OwogICAgICAgICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQpAQCAtMTA3
LDYgKzEzMiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3NldHMuY29udGFpbnMoc2V0
KTsKICAgICB9CiAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgICAgIGZvciAoY29uc3QgV2F0Y2hwb2ludFNldFR5cGUmIGVudHJ5IDogbV9zZXRz
KSB7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgQWRhcHRvcjo6
ZHVtcEluQ29udGV4dChvdXQsIGVudHJ5LCBjb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKwog
cHJpdmF0ZToKICAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlPiBtX3NldHM7CiAgICAgYm9v
bCBtX3JlYWxseUFkZGVkOwpAQCAtMTIyLDYgKzE1NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJyYXlCdWZm
ZXJWaWV3Kik7CiAgICAgCisgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBj
YWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9l
cworICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9v
a2tlZXBpbmcuCisgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mKTsKKyAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIAogICAgIHZv
aWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEmKTsKQEAgLTE0NCwxMiArMTgyLDIw
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hl
ZCh2aWV3KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJl
U2V0cy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
PFdhdGNocG9pbnRTZXQqPiBtX3NldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJ
bmxpbmVXYXRjaHBvaW50U2V0Kj4gbV9pbmxpbmVTZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVk
VmFsdWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcq
LCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKKyAgICBH
ZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlzaW9u
IDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZl
cmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCwxNCBAQCBEZXNpcmVkV2Vh
a1JlZmVyZW5jZXM6On5EZXNpcmVkV2Vha1JlZmVyCiAKIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVu
Y2VzOjphZGRMYXppbHkoSlNDZWxsKiBjZWxsKQogewotICAgIG1fcmVmZXJlbmNlcy5hZGQoY2Vs
bCk7CisgICAgaWYgKGNlbGwpCisgICAgICAgIG1fcmVmZXJlbmNlcy5hZGQoY2VsbCk7Cit9CisK
K3ZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjphZGRMYXppbHkoSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFkZExhemlseSh2YWx1ZS5hc0NlbGwo
KSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpjb250YWlucyhKU0NlbGwqIGNl
bGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJl
bmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgCiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNz
IEpTQ2VsbDsKK2NsYXNzIEpTVmFsdWU7CiBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwog
CkBAIC00OCw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICB+RGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7
CiAKICAgICB2b2lkIGFkZExhemlseShKU0NlbGwqKTsKKyAgICB2b2lkIGFkZExhemlseShKU1Zh
bHVlKTsKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5
QWRkKFZNJiwgQ29tbW9uRGF0YSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsOCArMjU3LDggQEAgdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChub2RlLT5oYXNNdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0g
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
aWQiLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50
aWZpZXJOdW1iZXJdLCAifSIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0
YS52YXJpYW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5D
b250ZXh0KGRhdGEudmFyaWFudHNbaV0sIGNvbnRleHQpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsIGluQ29udGV4dChkYXRhLmNhc2VzW2ldLCBjb250ZXh0KSk7CiAgICAgfQogICAg
IGlmIChub2RlLT5oYXNNdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpUHV0
QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKQEAgLTUz
MCw2ICs1MzAsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAg
ICAgICAgIGlmICh2YWx1ZS0+cG9pbnRzVG9IZWFwKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQo
IiAgICAiLCBpbkNvbnRleHQoKnZhbHVlLCAmbXlDb250ZXh0KSwgIlxuIik7CiAgICAgfQorCisg
ICAgb3V0LnByaW50KGluQ29udGV4dCh3YXRjaHBvaW50cygpLCAmbXlDb250ZXh0KSk7CiAgICAg
CiAgICAgaWYgKCFteUNvbnRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIG15Q29udGV4dC5kdW1w
KG91dCk7CkBAIC04NDgsNiArODUwLDMwIEBAIHZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5v
ZGVzKE5vZGVGbGEKICAgICB9CiB9CiAKK2Jvb2wgR3JhcGg6OndhdGNoQ29uZGl0aW9uKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNXYXRjaGFi
bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcGxhbi53ZWFrUmVmZXJl
bmNlcy5hZGRMYXppbHkoa2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoa2V5Lmhhc1Byb3RvdHlwZSgp
KQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5wcm90b3R5cGUo
KSk7CisgICAgaWYgKGtleS5oYXNSZXF1aXJlZFZhbHVlKCkpCisgICAgICAgIG1fcGxhbi53ZWFr
UmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5LnJlcXVpcmVkVmFsdWUoKSk7CisgICAgCisgICAgbV9w
bGFuLndhdGNocG9pbnRzLmFkZExhemlseShrZXkpOworCisgICAgaWYgKGtleS5raW5kKCkgPT0g
UHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKQorICAgICAgICBtX3NhZmVUb0xvYWQuYWRkKHN0
ZDo6bWFrZV9wYWlyKGtleS5vYmplY3QoKSwga2V5Lm9mZnNldCgpKSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGg6OmlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFp
bnMoc3RkOjptYWtlX3BhaXIoYmFzZSwgb2Zmc2V0KSk7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVu
ZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFz
aE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6
aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkBAIC0x
MDIwLDggKzEwNDYsMTIgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShK
UwogSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJh
c2UsIGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewotICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXND
bG9iYmVyZWQoKSkKKyAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xv
YmJlcmVkKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IElmIHdlIGp1c3QgY29udmVydGVkIHRoZSBv
ZmZzZXQgdG8gYSB1aWQsIHdlIGNvdWxkIGRvIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uCisgICAg
ICAgIC8vIHdhdGNoaW5nIHRvIGNvbnN0YW50LWZvbGQgdGhlIHByb3BlcnR5LgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MjcxCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAgIAogICAgIHJldHVybiB0cnlHZXRDb25zdGFu
dFByb3BlcnR5KGJhc2UsIHN0cnVjdHVyZS5zZXQoKSwgb2Zmc2V0KTsKIH0KQEAgLTExNjcsMTcg
KzExOTcsOSBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIE11
bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+
bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IHNldC5zaXplKCk7IGotLTspCi0gICAgICAgICAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHNldFtqXSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBtYXJrIGFueXRoaW5nIGluIHRo
ZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxkCi0gICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVl
ZCB0byBtYXJrIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNh
dXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCi0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRDYXNlIDogbm9kZS0+bXVsdGlHZXRCeU9m
ZnNldERhdGEoKS5jYXNlcykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSog
c3RydWN0dXJlIDogZ2V0Q2FzZS5zZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc3RydWN0dXJlKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg3NjA1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NjUsNiArNjY1LDE1IEBAIHB1YmxpYzoKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50
aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CiAgICAgRGVzaXJlZFdhdGNo
cG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQogICAg
IAorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGludmFsaWQgb3Ig
dW53YXRjaGFibGUuIElmIHRoaXMgaXMgYSBQcmVzZW5jZSBjb25kaXRpb24sCisgICAgLy8gdGhp
cyBhbHNvIG1ha2VzIGl0IGNoZWFwIHRvIHF1ZXJ5IGlmIHRoZSBjb25kaXRpb24gaG9sZHMuIEFs
c28gbWFrZXMgc3VyZSB0aGF0IHRoZSBHQyBrbm93cworICAgIC8vIHdoYXQncyBnb2luZyBvbi4K
KyAgICBib29sIHdhdGNoQ29uZGl0aW9uKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7
CisKKyAgICAvLyBDaGVja3MgaWYgaXQncyBrbm93biB0aGF0IGxvYWRpbmcgZnJvbSB0aGUgZ2l2
ZW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgZmluZS4gVGhpcyBpcworICAgIC8vIGNv
bXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENv
bmRpdGlvbigpLgorICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0
eU9mZnNldCk7CisgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENv
ZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVD
YWxsRnJhbWUqKTsKICAgICAKQEAgLTg0NCw2ICs4NTMsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9y
PElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1h
cDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5
dGVjb2RlTGl2ZW5lc3M7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVLaWxscz4+IG1fYnl0ZWNvZGVLaWxsczsKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxK
U09iamVjdCosIFByb3BlcnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOwogICAgIERvbWluYXRvcnMg
bV9kb21pbmF0b3JzOwogICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQb3N0TnVtYmVyaW5nOwog
ICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHRnJvemVuVmFsdWUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBHZXRCeU9mZnNldE1ldGhvZDo6
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kLCAiOiIpOworICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJE
dW1wSW5Db250ZXh0KGNvbnN0YW50KCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgTG9hZDoKKyAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTG9hZEZyb21Qcm90b3R5cGU6CisgICAgICAgIG91dC5wcmludChvZmZzZXQo
KSwgIkAiLCBwb2ludGVyRHVtcEluQ29udGV4dChwcm90b3R5cGUoKSwgY29udGV4dCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIEdldEJ5T2Zmc2V0TWV0aG9kOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIp
OworfQorCit2b2lkIE11bHRpR2V0QnlPZmZzZXRDYXNlOjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludChp
bkNvbnRleHQobV9zZXQsIGNvbnRleHQpLCAiOiIsIGluQ29udGV4dChtX21ldGhvZCwgY29udGV4
dCkpOworfQorCit2b2lkIE11bHRpR2V0QnlPZmZzZXRDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBHZXRC
eU9mZnNldE1ldGhvZDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkludmFsaWQ6CisgICAgICAgIG91dC5wcmludCgiSW52YWxp
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3Rh
bnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Q
cm90b3R5cGU6CisgICAgICAgIG91dC5wcmludCgiTG9hZEZyb21Qcm90b3R5cGUiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorI2RlZmluZSBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0
YV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCisj
aW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBGcm96ZW5WYWx1ZTsKKworY2xhc3Mg
R2V0QnlPZmZzZXRNZXRob2QgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIElu
dmFsaWQsCisgICAgICAgIENvbnN0YW50LAorICAgICAgICBMb2FkLAorICAgICAgICBMb2FkRnJv
bVByb3RvdHlwZQorICAgIH07CisgICAgCisgICAgR2V0QnlPZmZzZXRNZXRob2QoKQorICAgICAg
ICA6IG1fa2luZChJbnZhbGlkKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEdldEJ5
T2Zmc2V0TWV0aG9kIGNvbnN0YW50KEZyb3plblZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0
YW50OworICAgICAgICByZXN1bHQudS5jb25zdGFudCA9IHZhbHVlOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0QnlPZmZzZXRNZXRob2QgbG9hZChQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBMb2FkOworICAgICAgICByZXN1bHQudS5s
b2FkLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWRGcm9tUHJvdG90eXBlKEZyb3plblZh
bHVlKiBwcm90b3R5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEdl
dEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IExvYWRGcm9t
UHJvdG90eXBlOworICAgICAgICByZXN1bHQudS5sb2FkLnByb3RvdHlwZSA9IHByb3RvdHlwZTsK
KyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kID09IEludmFsaWQ7IH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZSogY29uc3RhbnQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiB1
LmNvbnN0YW50OworICAgIH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZSogcHJvdG90eXBlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gTG9hZEZyb21Qcm90b3R5cGUpOwor
ICAgICAgICByZXR1cm4gdS5sb2FkLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
TG9hZCB8fCBraW5kKCkgPT0gTG9hZEZyb21Qcm90b3R5cGUpOworICAgICAgICByZXR1cm4gdS5s
b2FkLm9mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgdW5pb24geworICAgICAgICBGcm96ZW5WYWx1ZSog
Y29uc3RhbnQ7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogcHJv
dG90eXBlOworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICB9IGxv
YWQ7CisgICAgfSB1OworICAgIEtpbmQgbV9raW5kOworfTsKKworY2xhc3MgTXVsdGlHZXRCeU9m
ZnNldENhc2UgeworcHVibGljOgorICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKGNvbnN0IFN0cnVjdHVyZVNldCYg
c2V0LCBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kKQorICAgICAgICA6IG1fc2V0KHNl
dCkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgeworICAgIH0KKyAgICAKKyAgICBT
dHJ1Y3R1cmVTZXQmIHNldCgpIHsgcmV0dXJuIG1fc2V0OyB9CisgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzZXQoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorICAgIGNvbnN0IEdldEJ5T2Zmc2V0
TWV0aG9kJiBtZXRob2QoKSBjb25zdCB7IHJldHVybiBtX21ldGhvZDsgfQorICAgIAorICAgIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RydWN0dXJl
U2V0IG1fc2V0OworICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1fbWV0aG9kOworfTsKKworc3RydWN0
IE11bHRpR2V0QnlPZmZzZXREYXRhIHsKKyAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwor
ICAgIFZlY3RvcjxNdWx0aUdldEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OktpbmQpOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJE
RkdDb21tb24uaCIKICNpbmNsdWRlICJERkdFcG9jaC5oIgogI2luY2x1ZGUgIkRGR0xhenlKU1Zh
bHVlLmgiCisjaW5jbHVkZSAiREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCIKICNpbmNsdWRlICJE
RkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZH
Tm9kZVR5cGUuaCIKQEAgLTY1LDExICs2Niw2IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7
CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKIH07CiAKLXN0cnVjdCBNdWx0aUdldEJ5
T2Zmc2V0RGF0YSB7Ci0gICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKLSAgICBWZWN0b3I8
R2V0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwotfTsKLQogc3RydWN0IE11bHRpUHV0QnlPZmZz
ZXREYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwogICAgIFZlY3RvcjxQdXRC
eUlkVmFyaWFudCwgMj4gdmFyaWFudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwx
MCArMzI0LDE4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CiAg
ICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBu
b2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpLm9mZnNldDsKKworICAgICAgICBpZiAoc3RhdGUuc3Ry
dWN0dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQpIHsKKyAgICAgICAg
ICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gbm9kZS0+Y2hpbGQxKCktPmR5bmFtaWNDYXN0
Q29uc3RhbnQ8SlNPYmplY3QqPigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdyYXBoLmlzU2Fm
ZVRvTG9hZChrbm93bkJhc2UsIG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
c3RydWN0dXJlOwogICAgICAgICBpZiAodmFsdWUuaXNJbmZpbml0ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YSgpLm9mZnNldDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUu
c2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBpZiAoIXZhbHVlW2ldLT5pc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM3LDQyICszNDUs
MjggQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICAK
ICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgLy8gV2UgY2FuJ3QgYWx3YXlz
IGd1YXJhbnRlZSB0aGF0IHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGlzIHNhZmUgdG8gZXhlY3V0ZSBp
ZiBpdAotICAgICAgICAvLyBjb250YWlucyBsb2FkcyBmcm9tIHByb3RvdHlwZXMuIFdlIGtub3cg
dGhhdCBpdCB3b24ndCBsb2FkIGZyb20gdGhvc2UgcHJvdG90eXBlcyBpZgotICAgICAgICAvLyB3
ZSB3YXRjaCB0aGUgbXV0YWJpbGl0eSBvZiB0aGUgcHJvcGVydGllcyBiZWluZyBsb2FkZWQuIFNv
LCBoZXJlIHdlIHRyeSB0bwotICAgICAgICAvLyBjb25zdGFudC1mb2xkIHByb3RvdHlwZSBsb2Fk
cywgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIGNsYWltIHRoYXQgd2UgY2Fubm90IGhvaXN0LiBXZQot
ICAgICAgICAvLyBhbHNvIGtub3cgdGhhdCBhIGxvYWQgaXMgc2FmZSB0byBleGVjdXRlIGlmIHdl
IGFyZSB3YXRjaGluZyB0aGUgcHJvdG90eXBlJ3MKLSAgICAgICAgLy8gc3RydWN0dXJlLgotICAg
ICAgICBmb3IgKGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKS52YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCF2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSkgewotICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgcHJvdG90eXBlIGxv
YWQuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEpTVmFsdWUgYmFzZSA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwot
ICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IGdyYXBoLmZyZWV6ZShiYXNlKTsKLSAg
ICAgICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSA9PSBTdHJ1Y3R1cmVz
QXJlV2F0Y2hlZAotICAgICAgICAgICAgICAgICYmIGZyb3plbi0+c3RydWN0dXJlKCktPmRmZ1No
b3VsZFdhdGNoKCkKLSAgICAgICAgICAgICAgICAmJiBmcm96ZW4tPnN0cnVjdHVyZSgpLT5pc1Zh
bGlkT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUg
YWxyZWFkeSB3YXRjaGluZyB0aGF0IGl0J3Mgc2FmZSB0byBsb2FkIGZyb20gdGhpcy4KLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9IGdyYXBoLnRyeUdldENvbnN0YW50UHJvcGVy
dHkoCi0gICAgICAgICAgICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFz
ZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIGlmICghY29uc3Rh
bnRSZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvLyBDb3VsZG4ndCBjb25zdGFudC1mb2xkIGEg
cHJvdG90eXBlIGxvYWQuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkbid0IGhvaXN0Ci0gICAgICAgICAg
ICAgICAgLy8gYmVjYXVzZSB0aGUgc2FmZXR5IG9mIHRoZSBsb2FkIGRlcGVuZHMgb24gc3RydWN0
dXJlIGNoZWNrcyBvbiB0aGUgcHJvdG90eXBlLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSdy
ZSB0b28gY2hlYXAgdG8gdmVyaWZ5IHRoYXQgaGVyZS4KLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIC8vIGNvbnRhaW5zIGxvYWRzIGZyb20gcHJvdG90eXBlcy4gSWYgdGhl
IGxvYWQgcmVxdWlyZXMgYSBjaGVjayBpbiBJUiwgd2hpY2ggaXMgcmFyZSwgdGhlbgorICAgICAg
ICAvLyB3ZSBjdXJyZW50bHkgY2xhaW0gdGhhdCB3ZSBkb24ndCBrbm93IGlmIGl0J3Mgc2FmZSB0
byBleGVjdXRlIGJlY2F1c2UgZmluZGluZyB0aGF0CisgICAgICAgIC8vIGNoZWNrIGluIHRoZSBh
YnN0cmFjdCBzdGF0ZSB3b3VsZCBiZSBoYXJkLiBJZiB0aGUgbG9hZCByZXF1aXJlcyB3YXRjaHBv
aW50cywgd2UganVzdAorICAgICAgICAvLyBjaGVjayBpZiB3ZSdyZSBub3QgaW4gYSBjbG9iYmVy
ZWQgc3RhdGUgKGkuZS4gaW4gYmV0d2VlbiBhIHNpZGUgZWZmZWN0IGFuZCBhbgorICAgICAgICAv
LyBpbnZhbGlkYXRpb24gcG9pbnQpLgorICAgICAgICBmb3IgKGNvbnN0IE11bHRpR2V0QnlPZmZz
ZXRDYXNlJiBnZXRDYXNlIDogbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5jYXNlcykgewor
ICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsK
KyAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBH
ZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6IC8vIE9LIGJlY2F1c2UgY29uc3RhbnRzIGFy
ZSBhbHdheXMgc2FmZSB0byBleGVjdXRlLgorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1l
dGhvZDo6TG9hZDogLy8gT0sgYmVjYXVzZSB0aGUgTXVsdGlHZXRCeU9mZnNldCBoYXMgaXRzIG93
biBjaGVja3MgZm9yIGxvYWRpbmcgZnJvbSBzZWxmLgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6Cisg
ICAgICAgICAgICAgICAgLy8gT25seSBPSyBpZiB0aGUgc3RhdGUgaXNuJ3QgY2xvYmJlcmVkLiBU
aGF0J3MgYWxtb3N0IGFsd2F5cyB0aGUgY2FzZS4KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUu
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkgIT0gU3RydWN0dXJlc0FyZVdhdGNoZWQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIWdyYXBoLmlz
U2FmZVRvTG9hZChtZXRob2QucHJvdG90eXBlKCktPmNhc3Q8SlNPYmplY3QqPigpLCBtZXRob2Qu
b2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IE90aGVyd2lzZSwgd2Ugd2lsbCBlaXRoZXI6Ci0gICAgICAgICAgICAvLyAtIE5vdCBsb2FkIGZy
b20gdGhlIHByb3RvdHlwZSBiZWNhdXNlIGNvbnN0YW50IGZvbGRpbmcgd2lsbCBzdWNjZWVkIGlu
IHRoZQotICAgICAgICAgICAgLy8gICBiYWNrZW5kLCBvcgotICAgICAgICAgICAgLy8gLSBFbWl0
IGludmFsaWQgY29kZSB0aGF0IGZhaWxzIHdhdGNocG9pbnQgY2hlY2tzLiBUaGlzIGNvdWxkIGhh
cHBlbiBpZiB0aGUKLSAgICAgICAgICAgIC8vICAgcHJvcGVydHkgYmVjb21lcyBtdXRhYmxlIGFm
dGVyIHRoaXMgcG9pbnQsIHNpbmNlIHdlIGFscmVhZHkgc2V0IHRoZSB3YXRjaHBvaW50Ci0gICAg
ICAgICAgICAvLyAgIGFib3ZlLiBUaGlzIGNhc2UgaXMgT0sgc2luY2UgdGhlIGNvZGUgd2lsbCBm
YWlsIHdhdGNocG9pbnQgY2hlY2tzIGFuZCBuZXZlcgotICAgICAgICAgICAgLy8gICBnZXQgaW5z
dGFsbGVkLgogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODYsMTUgKzg2LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zm
c2V0OgotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1
Y3R1cmVzKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRG9uJ3QgbmVlZCB0byB3YXRjaCBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJl
Y2F1c2UgdGhhdCB3b3VsZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRl
Y29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3Vs
ZG4ndCB1c2UgTXVsdGlHZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyB2YXJpYW50cyBkaWQgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE11bHRpR2V0QnlPZmZzZXRDYXNlJiBnZXRD
YXNlIDogbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5jYXNlcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlcyhnZXRDYXNlLnNldCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNh
c2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgzNywyNCArMzgzNywyNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTXVsdGlHZXRC
eU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAKLSAg
ICAgICAgaWYgKGRhdGEudmFyaWFudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChkYXRhLmNh
c2VzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGNyZWF0aW5n
IGEgUGhpIGZ1bmN0aW9uIHdpdGggemVybyBpbnB1dHMuIExMVk0gZG9lc24ndCBsaWtlIHRoYXQu
CiAgICAgICAgICAgICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2Nr
cyhkYXRhLnZhcmlhbnRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEu
dmFyaWFudHMuc2l6ZSgpOyBpLS07KQorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJs
b2NrcyhkYXRhLmNhc2VzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEu
Y2FzZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOwogICAgICAgICBMQmFzaWNC
bG9jayBleGl0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGZhaWwi
KSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTXVsdGlHZXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7CiAgICAgICAgIAogICAgICAg
ICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNl
U2V0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNb
aV07Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50LnN0cnVjdHVyZVNldCgp
LnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKVtqXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0
YS5jYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNl
IGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
Z2V0Q2FzZS5zZXQoKS5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGdldENhc2Uuc2V0KClbal07CiAgICAgICAgICAgICAgICAgYmFzZVNldC5h
ZGQoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3
ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAg
ICAgICAgIH0KQEAgLTM4NjUsMjkgKzM4NjUsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIFZl
Y3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsg
MV0gOiBleGl0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRh
LmNhc2VzW2ldOworICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2Fz
ZS5tZXRob2QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxv
Y2tzW2ldLCBpICsgMSA8IGRhdGEuY2FzZXMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0
YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgIGJhc2VTZXQubWVyZ2UodmFyaWFudC5zdHJ1Y3R1
cmVTZXQoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgSlNWYWx1
ZSBjb25zdGFudFJlc3VsdDsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KSkgewotICAgICAgICAgICAgICAgIGNvbnN0YW50UmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25z
dGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGNvbnN0YW50UmVzdWx0KQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50UmVzdWx0KSk7
Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoICht
ZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZh
bGlkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291
dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShtZXRob2QuY29uc3RhbnQoKS0+dmFsdWUoKSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHBy
b3BlcnR5QmFzZTsKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2ludGVyKHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aWYgKG1ldGhvZC5raW5kKCkgPT0gR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQpCiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5QmFzZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0lu
bGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2ludGVyKG1ldGhvZC5wcm90b3R5
cGUoKS0+dmFsdWUoKS5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc0lubGluZU9m
ZnNldChtZXRob2Qub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2Ug
PSBtX291dC5sb2FkUHRyKHByb3BlcnR5QmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkp
OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQcm9wZXJ0eShwcm9wZXJ0eUJhc2UsIGRh
dGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5KAorICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eUJhc2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IocmVzdWx0KSk7CiAgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0
aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93
UGF0aEZ1bmN0aW9uLAogICAgIGJvb2wgY29tcGFjdCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT50
eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgIGlmIChz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0ucmVn
aXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwpAQCAtMTMyLDQ3ICsxMzIsMzMgQEAgc3RhdGljIHZvaWQgcmVw
YXRjaEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCitz
dGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCiAgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewot
ICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJl
LT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9j
aykpOwotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgLy8gSWYg
d2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUg
d2UgZXhwZWN0LiBBc3NlcnQKLSAgICAgICAgICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0g
ICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3Qp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gYnJh
bmNoU3RydWN0dXJlKAotICAgICAgICAgICAgICAgIGppdCwKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNo
SW5lZmZlY3RpdmVXYXRjaHBvaW50KTsKLSAgICAgICAgICAgIG9rLmxpbmsoJmppdCk7Ci0gICAg
ICAgIH0KKyAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSkgeworICAgICAgICBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgp
LT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgKKyAgICAgICAgICAgIHN0dWJJbmZvLmFkZFdhdGNo
cG9pbnQoY29kZUJsb2NrLCBjb25kaXRpb24pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICAKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBz
Y3JhdGNoR1BSKTsKKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24uc3RydWN0dXJl
RW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJl
KSk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9u
Lm9iamVjdCgpKSwgc2NyYXRjaEdQUik7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKLSAgICAg
ICAgYnJhbmNoU3RydWN0dXJlKGppdCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKKyAg
ICAgICAgYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgaml0LCBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmUpKTsKIH0KIAotc3RhdGlj
IHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgIEpTVmFsdWUgcHJvdG90eXBl
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorc3Rh
dGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywKICAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
aWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VS
VChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKLSAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0
cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNl
cywgc2NyYXRjaEdQUik7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uIDogc2V0KSB7CisgICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb24o
CisgICAgICAgICAgICBjb25kaXRpb24sIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwgZmFpbHVy
ZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRo
SnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCkBAIC0yOTYsMTEgKzI4
MiwxMyBAQCBzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1dFByCiAKIHN0YXRp
YyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBCeUlkU3R1Yktp
bmQga2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLAotICAgIEZ1bmN0aW9uUHRy
IGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4sIHNpemVfdCBjb3VudCwKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBib29sIGxvYWRUYXJnZXRGcm9tUHJveHksIFdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRTZXQsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRp
b25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGlu
ZSkKKyAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBKU09i
amVjdCogYWx0ZXJuYXRlQmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgIFdhdGNocG9pbnRTZXQqIHdh
dGNocG9pbnRTZXQsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd0Nhc2VMYWJlbCwKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91
dGluZSkKIHsKLQorICAgIEFTU0VSVChjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlk
aXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CisgICAgCiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IEpT
VmFsdWVSZWdzKApAQCAtMzQ2LDM3ICszMzQsMzEgQEAgc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlk
U3R1YigKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJl
c1dhdGNocG9pbnRzKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpIHx8IGNvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CiAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0
eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKICAgICBpZiAod2F0
Y2hwb2ludFNldCkKICAgICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFkZFdhdGNo
cG9pbnQoY29kZUJsb2NrKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7IAotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgaWYgKGNoYWluKSB7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAg
ICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0g
cHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJl
LT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAg
ICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0
eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBh
ZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG9PYmplY3Qs
IHByb3RvU3RydWN0dXJlLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAg
ICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjdXJyU3RydWN0
dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCghcHJvdG9PYmplY3Qg
fHwgcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpID09IGN1cnJTdHJ1Y3R1cmUpOworICAgIGNoZWNr
T2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisKKyAgICBp
ZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVj
dHVyZTsKKyAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICBj
dXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjdXJy
U3RydWN0dXJlID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0
cnVjdHVyZSgpOworICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlG
b3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOwogICAgIH0KICAgICAKLSAgICBjdXJyU3RydWN0
dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOwog
ICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICBpZiAoa2lu
ZCAhPSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGNoYWluKSB7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBj
bG9iYmVyZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJh
c2VHUFIgdG8gZ2V0IHRoZSB0YXJnZXQuCiAgICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Q
cm94eSkKICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsK
LSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihw
cm90b09iamVjdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UpLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gRm9yIHByb3h5IG9iamVjdHMsIHdlIG5lZWQgdG8gZG8gYWxsIHRo
ZSBTdHJ1Y3R1cmUgY2hlY2tzIGJlZm9yZSBtb3ZpbmcgdGhlIGJhc2VHUFIgaW50bwpAQCAtNjI1
LDkgKzYwNyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFYKICAg
ICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9Ci0gICAgQVNTRVJUKCFzdHJ1Y3R1cmUt
PmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAgIGlmICh0eXBlSW5mby5oYXNJ
bXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlG
aXJlc1dhdGNocG9pbnRzKCkpCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICByZXR1
cm4gQXR0ZW1wdFRvQ2FjaGU7CkBAIC04MjUsMjEgKzgwNiwyMSBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQo
KTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgIHNpemVfdCBj
b3VudCA9IDA7CiAgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OwogICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZh
bHVlKSB7CiAgICAgICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8
fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAKICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgY291bnQg
PSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAg
Y29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKCp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNo
YWluRm9yQ2hhaW5BY2Nlc3MoCi0gICAgICAgICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBzbG90
LnNsb3RCYXNlKCksIGlkZW50LCBvZmZzZXQpOwotICAgICAgICBpZiAoY291bnQgPT0gSW52YWxp
ZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsK
KworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnBy
b3RvdHlwZUNoYWluKGV4ZWMpOworCisgICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8g
aW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgp
OwogICAgIH0KICAgICAKICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShzdHViSW5mbyk7CkBAIC04NTAsNyArODMxLDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIAogICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5
SWRTdHViKAotICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNs
b3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIAorICAgICAgICBl
eGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29u
ZGl0aW9uU2V0LCBzbG90LnNsb3RCYXNlKCksIG9mZnNldCwgCiAgICAgICAgIHN0cnVjdHVyZSwg
bG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAogICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xv
d1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwpAQCAtODY5LDcgKzg1MCw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBsaXN0
LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBhY2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0dXJlLAotICAgICAg
ICBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKKyAgICAgICAgY29uZGl0aW9uU2V0KSk7CiAgICAg
CiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91
dGluZS5nZXQoKSk7CiAgICAgCkBAIC05OTEsMjYgKzk3MiwyOCBAQCBzdGF0aWMgYm9vbCBlbWl0
UHV0UmVwbGFjZVN0dWIoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBTdHJ1Y3R1cmUq
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMs
IFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Ci0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgCisgICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1
Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQpCiB7CiAgICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7
CiAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zm
c2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwg
MCwgcHJvcGVydHlPZmZzZXQpOwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+
aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3
aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAgIC8vIGVub3VnaCBy
ZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCiAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzIDwgNgogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYmIG9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2Fz
ZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwpAQCAtMTAxOCwx
NCArMTAwMSwxNCBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CiAgICAgaWYg
KG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0
dXJlKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gZW1pdFB1dFRy
YW5zaXRpb25TdHViCisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAg
ICAgICAgICAgICp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBleGVj
LCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBDb2RlTG9j
YXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKICAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwpA
QCAtMTA4MSwxNyArMTA2NCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9u
U3R1YkEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG9sZFN0cnVjdHVyZSkpOwogICAgIAotICAg
IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgb2xkU3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWls
dXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIAotICAgIGlmIChw
dXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgewotICAgICAgICAg
ICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICgqaXQpLT5z
dG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBm
YWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICB9Ci0g
ICAgfQorICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAorICAgICAgICBjb25kaXRp
b25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2Vz
LCBzY3JhdGNoR1BSMSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAgICAgCkBAIC0xMjI2LDcgKzEyMDAsNyBAQCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJh
bnNpdGlvblN0dWJBCiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJK
aXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChw
YXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVy
cygpKQpAQCAtMTI1NCw4ICsxMjI4LDggQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5z
aXRpb25TdHViQQogICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJs
ZSgpLAogICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0K
LSAgICByZXR1cm4gb2xkU3RydWN0dXJlOworICAgIAorICAgIHJldHVybiB0cnVlOwogfQogCiBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTEyNzksMTIgKzEyNTMsMTEgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgIGlmIChzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAgICAgICAgIGlmIChzbG90
LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAKLSAgICAgICAgICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xk
U3RydWN0dXJlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0
S2luZCk7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZSkKKyAgICAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIo
ZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRT
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAK
ICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAg
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICAgICAgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTEyOTIsNyArMTI2NSw3IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwog
ICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBw
dXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlk
VHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVy
ZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0
S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0xMzEwLDIwICsxMjgzLDMxIEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2gu
c3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lOwogCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xv
dC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudCwgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVl
KSB7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgICAgICAgICAgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwg
c2xvdC5iYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5v
ZmZzZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hl
ZE9mZnNldCgpOworCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAg
ICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZv
KTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAg
ICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywg
cHJvdG90eXBlQ2hhaW4sIGNvdW50LAorICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwg
aWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNl
KCksCiAgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAg
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSksCkBAIC0xMzM0LDcgKzEzMTgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlECiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIo
CiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAg
ICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQ
dXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3Rv
dHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAg
ICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBz
dHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBAIC0xMzc4LDE3
ICsxMzYyLDE2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAg
ICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUgdG8gcmVjdXJzaW9uLgogCi0gICAgICAg
ICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdl
dE9sZFN0cnVjdHVyZShleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0
dWJJbmZvLCBwdXRLaW5kKTsKLQotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUpIAorICAg
ICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIWVtaXRQdXRU
cmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0
dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAg
ICAgICAgICBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwogICAgICAgICAgICAg
bGlzdC0+YWRkQWNjZXNzKAogICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRp
b24oCiAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlw
ZUNoYWluLAorICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LAogICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkpOwogCiAgICAgICAg
IH0gZWxzZSB7CkBAIC0xNDIxLDIxICsxNDA0LDMyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlCdWlsZFB1dEJ5SWQKICAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBz
bG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCiAgICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxs
TW9kZSA9PSBEb250U3BpbGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAg
ICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZSAhPSBzbG90LmJhc2Uo
KSkgewotICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWlu
QWNjZXNzKGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBwcm90b3R5cGVD
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgIH0KICAgICAg
ICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0g
YmFzZVZhbHVlKSB7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7
CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgICAgICAg
ICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0
cnVjdHVyZSwgc2xvdC5iYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWUuaW1wbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNDYWNoZWFi
bGVDdXN0b20oKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRp
b24oKS5vZmZzZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90
LmNhY2hlZE9mZnNldCgpOworCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7
CiAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0
dWJJbmZvKTsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAg
ICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90
KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgICAgIGV4ZWMsIGtp
bmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29u
ZGl0aW9uU2V0LCBzbG90LmJhc2UoKSwKICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBm
YWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCkBAIC0x
NDQ2LDcgKzE0NDAsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlk
CiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90
LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNj
ZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWlu
LCBjb3VudCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAg
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGlu
ZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwog
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkBAIC0xNDg1LDExICsxNDc5LDE3
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUo
KnZtKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgIEpTVmFs
dWUgZm91bmRTbG90QmFzZSA9IHdhc0ZvdW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgp
OwotICAgIHNpemVfdCBjb3VudCA9ICFmb3VuZFNsb3RCYXNlIHx8IGZvdW5kU2xvdEJhc2UgIT0g
YmFzZSA/IAotICAgICAgICBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4
ZWMsIHN0cnVjdHVyZSwgZm91bmRTbG90QmFzZSwgaWRlbnQsIG9mZnNldElnbm9yZWQpIDogMDsK
LSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAod2FzRm91bmQpIHsKKyAgICAg
ICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7CisgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAg
ICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlN
aXNzKAorICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVj
LCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgfQorICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CkBA
IC0xNTE0LDcgKzE1MTQsNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaElu
KAogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgfQogICAgIAotICAgIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAKICAgICB7CkBAIC0x
NTQ1LDE4ICsxNTQ0LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigK
ICAgICAgICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgpKQogICAgICAgICAgICAgc2xvdC53YXRj
aHBvaW50U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0g
ICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIEpTT2Jq
ZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29r
dXAoZXhlYykpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3Rv
dHlwZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b1N0cnVjdHVyZSwgZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNl
cywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAg
dm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0
LT5nZXQoKTsKLSAgICAgICAgfQorICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9u
cygKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAgICAgICAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKLSNpbmNsdWRlIDx3dGYvQ29t
bWFQcmludGVyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWlu
OjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAg
ICwgbV9wcm90b3R5cGUocHJvdG90eXBlKQotewotICAgIEFTU0VSVChtX3Byb3RvdHlwZS5pc051
bGwoKSB8fCBtX3Byb3RvdHlwZS5pc09iamVjdCgpKTsKLSAgICBpZiAocHJvdG90eXBlLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09i
amVjdChwcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
PnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpKQotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY3Vy
cmVudCk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hh
aW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBoZWFkKQotICAgIDog
bV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9wcm90b3R5cGUoaGVhZC0+cHJv
dG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBpZiAobV9wcm90b3R5cGUu
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9
IGFzT2JqZWN0KG1fcHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBw
ZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVy
ZSogcHJvdG90eXBlU3RydWN0dXJlKQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1
cChtX2dsb2JhbE9iamVjdCkpCi17Ci0gICAgbV92ZWN0b3IuYXBwZW5kKHByb3RvdHlwZVN0cnVj
dHVyZSk7Ci19Ci0KLUludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hh
aW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluKQotICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkK
LSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVj
dCkpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgY2hhaW4tPmhlYWQoKVtpXTsgKytpKQot
ICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUlu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25l
ZCBjb3VudCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
Ci0gICAgLCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmpl
Y3QpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAg
ICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Ci19Ci0KLUludGVuZGVk
U3RydWN0dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCkKLXsKLX0KLQotYm9vbCBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluOjppc1N0aWxsVmFsaWQoKSBjb25zdAotewotICAgIEpTVmFs
dWUgY3VycmVudFByb3RvdHlwZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoYXNPYmplY3QoY3Vy
cmVudFByb3RvdHlwZSktPnN0cnVjdHVyZSgpICE9IG1fdmVjdG9yW2ldKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50UHJvdG90eXBlID0gbV92ZWN0b3JbaV0tPnN0
b3JlZFByb3RvdHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjptYXRjaGVzKFN0cnVjdHVyZUNoYWluKiBjaGFpbikgY29uc3QK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fdmVjdG9yW2ldICE9IGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChjaGFpbi0+aGVhZCgpW21fdmVj
dG9yLnNpemUoKV0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJbnRlcmNlcHRTdG9yZVRvKFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVj
dG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodWlk
LCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBB
Y2Nlc3NvcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbjo6aXNOb3JtYWxpemVkKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3Zl
Y3RvcltpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJv
cGVydHkoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKGF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
SlNPYmplY3QqIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRlcm1pbmFsUHJvdG90eXBlKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoIW1fdmVjdG9yLmlzRW1wdHkoKSk7Ci0gICAgaWYgKG1fdmVjdG9y
LnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gYXNPYmplY3QobV9wcm90b3R5cGUpOwotICAg
IHJldHVybiBhc09iamVjdChtX3ZlY3RvclttX3ZlY3Rvci5zaXplKCkgLSAyXS0+c3RvcmVkUHJv
dG90eXBlKCkpOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om9wZXJhdG9yPT0o
Y29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fZ2xvYmFsT2JqZWN0ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0Ci0gICAgICAgICYmIG1fcHJv
dG90eXBlID09IG90aGVyLm1fcHJvdG90eXBlCi0gICAgICAgICYmIG1fdmVjdG9yID09IG90aGVy
Lm1fdmVjdG9yOwotfQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmdhdGhlckNoZWNr
cyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IpIGNvbnN0Ci17Ci0gICAgSlNW
YWx1ZSBjdXJyZW50UHJvdG90eXBlID0gbV9wcm90b3R5cGU7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0
ID0gYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSk7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VycmVu
dFN0cnVjdHVyZSA9IGF0KGkpOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKENvbnN0YW50U3RydWN0
dXJlQ2hlY2soY3VycmVudE9iamVjdCwgY3VycmVudFN0cnVjdHVyZSkpOwotICAgICAgICBjdXJy
ZW50UHJvdG90eXBlID0gY3VycmVudFN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xv
YmFsT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUG9pbnRlcigmbV9nbG9iYWxPYmplY3QpOwotICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWRWYWx1ZSgmbV9wcm90b3R5cGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmVj
dG9yLnNpemUoKTsgaS0tOykKLSAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50
ZXIoJm1fdmVjdG9yW2ldKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIDApOwot
fQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KAot
ICAgICAgICAiKGdsb2JhbCA9ICIsIFJhd1BvaW50ZXIobV9nbG9iYWxPYmplY3QpLCAiLCBoZWFk
ID0gIiwKLSAgICAgICAgaW5Db250ZXh0KG1fcHJvdG90eXBlLCBjb250ZXh0KSwgIiwgdmVjdG9y
ID0gWyIpOwotICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgcG9p
bnRlckR1bXBJbkNvbnRleHQobV92ZWN0b3JbaV0sIGNvbnRleHQpKTsKLSAgICBvdXQucHJpbnQo
Il0pIik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCShyZXZp
c2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW5faAotI2RlZmluZSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKLQot
I2luY2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xh
c3MgQ29kZUJsb2NrOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFp
bjsKLWNsYXNzIFZNOwotc3RydWN0IER1bXBDb250ZXh0OwotCi1jbGFzcyBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gewot
cHVibGljOgotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKik7Ci0gICAgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1
Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4pOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCk7Ci0g
ICAgfkludGVuZGVkU3RydWN0dXJlQ2hhaW4oKTsKLSAgICAKLSAgICBib29sIGlzU3RpbGxWYWxp
ZCgpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiopIGNvbnN0OwotICAg
IGJvb2wgbWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICBi
b29sIGlzTm9ybWFsaXplZCgpOwotICAgIAotICAgIGJvb2wgdGFrZXNTbG93UGF0aEluREZHRm9y
SW1wdXJlUHJvcGVydHkoKTsKLSAgICAKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvdG90eXBlOyB9Ci0gICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KLSAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOyB9Ci0gICAgU3RydWN0dXJlKiBvcGVyYXRv
cltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgCi0gICAg
SlNPYmplY3QqIHRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJl
KiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IubGFzdCgpOyB9Ci0gICAgCi0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mKSBjb25zdDsKLSAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiYgb3RoZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgZ2F0aGVyQ2hlY2tzKENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKSBjb25z
dDsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBKU0dsb2Jh
bE9iamVjdCogbV9nbG9iYWxPYmplY3Q7Ci0gICAgSlNWYWx1ZSBtX3Byb3RvdHlwZTsKLSAgICBW
ZWN0b3I8U3RydWN0dXJlKj4gbV92ZWN0b3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTMsNyArMjkzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNDZWxsKCkgY29uc3Q7CiAgICAgSlND
ZWxsKiBhc0NlbGwoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzVmFsaWRD
YWxsZWUoKTsKLSAgICAgICAgCisKICAgICBKU1ZhbHVlIHN0cnVjdHVyZU9yVW5kZWZpbmVkKCkg
Y29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyMyw2ICsyNzIzLDEzIEBAIEpTT2JqZWN0KiB0
aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMKICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwogfQogCit2
b2lkIEpTT2JqZWN0Ojpjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJiB2bSkKK3sKKyAgICBEZWZlcnJl
ZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJl
OworICAgIHNldFN0cnVjdHVyZSgKKyAgICAgICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVE
aWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hwb2lu
dEZpcmUpKTsKK30KKwogdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5p
bmcoVk0mIHZtLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxp
bmVDYXBhY2l0eUFmdGVyKQogewogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+YnV0
dGVyZmx5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyOSwxMCArNjI5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYsIHVuc2ln
bmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJl
YWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKIAotICAgIHZvaWQg
Y29udmVydFRvRGljdGlvbmFyeShWTSYgdm0pCi0gICAgewotICAgICAgICBzZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKHZtKSkpOwotICAgIH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbnZlcnRUb0Rp
Y3Rpb25hcnkoVk0mKTsKIAogICAgIHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoVk0mIHZt
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25z
LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDQ4ICsxOTQsNiBAQCBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUganNBZGQoQ2FsbEZyYW1lKiBjCiAKICNkZWZpbmUgSW52YWxpZFByb3RvdHlw
ZUNoYWluIChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKQogCi1pbmxpbmUgc2l6
ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBzbG90T2Zmc2V0KQotewotICAg
IFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKLSAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAg
ICAKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gSW52YWxpZFByb3RvdHlwZUNoYWluOwotCi0gICAgICAgIGNvbnN0
IFR5cGVJbmZvJiB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLSAgICAgICAgaWYg
KHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5uZXdJ
bXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgIHJldHVybiBJbnZh
bGlkUHJvdG90eXBlQ2hhaW47Ci0gICAgICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3Ry
dWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKTsKLQotICAgICAgICAvLyBJZiB3
ZSBkaWRuJ3QgZmluZCBzbG90QmFzZSBpbiB0aGUgYmFzZSdzIHByb3RvdHlwZSBjaGFpbiwgdGhl
biB0aGUgYmFzZQotICAgICAgICAvLyBtdXN0IGJlIGEgcHJveHkgZm9yIGFub3RoZXIgb2JqZWN0
LgotCi0gICAgICAgIGlmICh2LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXNsb3RCYXNl
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90
b3R5cGVDaGFpbjsKLSAgICAgICAgfQotCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IHYuYXNDZWxs
KCk7Ci0gICAgICAgIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIC8v
IFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSBpbiBhIGxvb3AsIGl0J3MgYSBnb29k
IGJldCB0aGF0IGl0Ci0gICAgICAgIC8vIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBhIGRpY3Rp
b25hcnkuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAg
ICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBhc09iamVjdChj
ZWxsKSk7Ci0gICAgICAgICAgICBpZiAoc2xvdEJhc2UgPT0gY2VsbCkKLSAgICAgICAgICAgICAg
ICBzbG90T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSk7IAotICAgICAg
ICB9Ci0gICAgICAgICsrY291bnQ7Ci0KLSAgICAgICAgaWYgKHNsb3RCYXNlID09IGNlbGwpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiBjb3VudDsKLX0K
LQogaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbihDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52
bSgpOwpAQCAtMjU4LDIzICsyMTYsNiBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluKENhCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBpc1Byb3RvdHlwZUNoYWluTm9ybWFs
aXplZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
LXsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIHYg
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOwotICAgICAgICBp
ZiAodi5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0g
ICAgICAgIHN0cnVjdHVyZSA9IHYuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAg
Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBP
cGVyYXRpb25zX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5U2xvdC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBwdWJs
aWM6CiAgICAgICAgIDogbV9wcm9wZXJ0eVR5cGUoVHlwZVVuc2V0KQogICAgICAgICAsIG1fb2Zm
c2V0KGludmFsaWRPZmZzZXQpCiAgICAgICAgICwgbV90aGlzVmFsdWUodGhpc1ZhbHVlKQorICAg
ICAgICAsIG1fc2xvdEJhc2UobnVsbHB0cikKICAgICAgICAgLCBtX3dhdGNocG9pbnRTZXQobnVs
bHB0cikKICAgICAgICAgLCBtX2NhY2hlYWJpbGl0eShDYWNoaW5nQWxsb3dlZCkKICAgICB7CkBA
IC0xMTQsNyArMTE1LDYgQEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIHNsb3RCYXNlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3Byb3BlcnR5VHlwZSAhPSBUeXBlVW5zZXQpOwog
ICAgICAgICByZXR1cm4gbV9zbG90QmFzZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEyLDcgKzQxMiw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXQKICAgICBlbHNlCiAgICAgICAgIG1heFRyYW5zaXRpb25MZW5ndGggPSBzX21heFRyYW5zaXRp
b25MZW5ndGg7CiAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbkNvdW50KCkgPiBtYXhUcmFu
c2l0aW9uTGVuZ3RoKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVh
YmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CisgICAgICAgIFN0cnVjdHVy
ZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSwgZGVmZXJyZWQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRyYW5zaXRpb24p
OwogICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcyk7CiAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uOwpAQCAtNDg5LDExICs0ODksMTEg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYQogICAgIHJldHVybiBz
dHJ1Y3R1cmU7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlLaW5kIGtpbmQpCitT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBraW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1
cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwogCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KHZtLCBkZWZlckdDKTsKQEAgLTUwNyw5ICs1MDcsOSBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpCiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKLVN0
cnVjdHVyZSogU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9DYWNoZWFi
bGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEZWZl
cnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCiB7Ci0gICAg
cmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgQ2FjaGVkRGljdGlv
bmFyeUtpbmQpOworICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kLCBkZWZlcnJlZCk7CiB9CiAKIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKQEAgLTc2MSw2ICs3NjEsMTAgQEAgdm9pZCBTdHJ1Y3R1cmU6OmFsbG9j
YXRlUmFyZURhdGEoVk0mIHZtKQogV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjplbnN1cmVQcm9w
ZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKIHsKICAgICBBU1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworCisgICAgLy8g
SW4gc29tZSBwbGFjZXMgaXQncyBjb252ZW5pZW50IHRvIGNhbGwgdGhpcyB3aXRoIGFuIGludmFs
aWQgb2Zmc2V0LiBTbywgd2UgZG8gdGhlIGNoZWNrIGhlcmUuCisgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIGlmICghaGFz
UmFyZURhdGEoKSkKICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CkBAIC03ODEsMTEgKzc4
NSw3IEBAIHZvaWQgU3RydWN0dXJlOjpzdGFydFdhdGNoaW5nUHJvcGVydHlGb3IKIHsKICAgICBB
U1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IGdldCh2bSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIUpTQzo6aXNWYWxp
ZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgc3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBvZmZzZXQpOworICAgIHN0YXJ0V2F0Y2hpbmdQ
cm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmU6OmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudChWTSYgdm0sIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKQEAgLTExMTcsNiArMTExNywxNyBAQCB2b2lkIFN0cnVjdHVyZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgCiAgICAgaWYgKG1fcHJvdG90eXBlLmdldCgp
LmlzQ2VsbCgpKQogICAgICAgICBvdXQucHJpbnQoIiwgUHJvdG86IiwgUmF3UG9pbnRlcihtX3By
b3RvdHlwZS5nZXQoKS5hc0NlbGwoKSkpOworCisgICAgc3dpdGNoIChkaWN0aW9uYXJ5S2luZCgp
KSB7CisgICAgY2FzZSBOb25lRGljdGlvbmFyeUtpbmQ6CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ2FjaGVkRGljdGlvbmFyeUtpbmQ6CisgICAgICAgIG91dC5wcmludCgiLCBEaWN0aW9uYXJ5
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5jYWNoZWREaWN0aW9uYXJ5S2luZDoKKyAg
ICAgICAgb3V0LnByaW50KCIsIFVuY2FjaGVhYmxlRGljdGlvbmFyeSIpOworICAgICAgICBicmVh
azsKKyAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KCJdIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY4LDcgKzE2OCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFN0cnVjdHVyZSogY2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogdG9D
YWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVy
ZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0
aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVj
dHVyZSogZnJlZXplVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwpAQCAtMTk0LDcgKzE5NCwx
OSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0
aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQogICAgIGJvb2wgaXNVbmNhY2hl
YWJsZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpID09IFVuY2Fj
aGVkRGljdGlvbmFyeUtpbmQ7IH0KICAgCi0gICAgYm9vbCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2Fj
aGVhYmxlKCkgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlL
aW5kICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpOyB9CisgICAgYm9v
bCBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBk
aWN0aW9uYXJ5S2luZCgpICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQKKyAgICAgICAgICAgICYm
ICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCisgICAgICAgICAgICAmJiAh
KHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvKCku
bmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpOworICAgIH0KKyAgICAKKyAgICBi
b29sIG5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQorICAgICAgICAgICAgJiYgdHlwZUluZm8o
KS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKQorICAgICAgICAgICAgJiYgdHlwZUluZm8o
KS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKTsKKyAgICB9CiAKICAgICAvLyBX
ZSB1c2UgU2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBmb3Igc3RydWN0dXJlcyB0aGF0IG1heSBn
ZXQgbmV3IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRvIHByZXZlbnQKICAgICAvLyBERkcgZnJv
bSBpbmxpbmluZyBwcm9wZXJ0eSBhY2Nlc3NlcyBzaW5jZSBzdHJ1Y3R1cmVzIGRvbid0IHRyYW5z
aXRpb24gd2hlbiBhIG5ldyBpbXB1cmUgcHJvcGVydHkgYXBwZWFycy4KQEAgLTIwMiw3ICsyMTQs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5oYXNJbXB1cmVH
ZXRPd25Qcm9wZXJ0eVNsb3QoKTsKICAgICB9Ci0KKyAgICAKICAgICAvLyBUeXBlIGFjY2Vzc29y
cy4KICAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5j
bGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5l
VHlwZUZsYWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5m
bygpLmlzT2JqZWN0KCk7IH0KQEAgLTUyOCw3ICs1NDAsNyBAQCBwcml2YXRlOgogICAgIC8vIHRv
IHVubG9jayBpdC4KICAgICB2b2lkIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0
aW9uKFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiYgc3RydWN0dXJlcywgU3RydWN0dXJlKiYsIFByb3Bl
cnR5VGFibGUqJik7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kKTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGljdGlvbmFy
eUtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxw
dHIpOwogCiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg3NjA1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTM2
LDYgKzUzNiw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRB
bGxDb2RlKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5
KGNvbnN0IElkZW50aWZpZXImLCBXYXRjaHBvaW50Kik7CisgICAgCiAgICAgLy8gRklYTUU6IFVz
ZSBBdG9taWNTdHJpbmcgb25jZSBpdCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ZvbGQtbXVsdGktZ2V0
LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LXdpdGhvdXQtZm9sZGluZy10aGUtc3RydWN0dXJl
LWNoZWNrLW5ldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LXdpdGhvdXQt
Zm9sZGluZy10aGUtc3RydWN0dXJlLWNoZWNrLW5ldy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRv
LWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hlY2stbmV3Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAg
cmV0dXJuIG8uZjsKK30KKworZnVuY3Rpb24gYmFyKG8pIHsKKyAgICByZXR1cm4gby5nOworfQor
CitmdW5jdGlvbiBiYXoobywgcCwgcSkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGlmIChp
c0ZpbmFsVGllcigpKSB7CisgICAgICAgIHAgPSBvOworICAgICAgICBxID0gbzsKKyAgICAgICAg
cmVzdWx0ICs9IDEwMDAwOworICAgIH0KKyAgICByZXN1bHQgKz0gZm9vKHApOworICAgIHJlc3Vs
dCArPSBiYXIocSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoYmF6KTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciBvLCBwLCBxOworICAg
IHZhciBleHBlY3RlZDE7CisgICAgdmFyIGV4cGVjdGVkMjsKKyAgICBvID0ge2Y6MTAwLCBnOjEw
MX07CisgICAgZXhwZWN0ZWQyID0gMTAwMDAgKyAxMDAgKyAxMDE7CisgICAgaWYgKGkgJiAxKSB7
CisgICAgICAgIHAgPSB7ZToxLCBmOjIsIGc6M307CisgICAgICAgIHEgPSB7ZTo0LCBmOjUsIGc6
Nn07CisgICAgICAgIGV4cGVjdGVkMSA9IDIgKyA2OworICAgIH0gZWxzZSB7CisgICAgICAgIHAg
PSB7Zjo3LCBnOjh9OworICAgICAgICBxID0ge2c6OSwgZjoxMH07CisgICAgICAgIGV4cGVjdGVk
MSA9IDcgKyA5OworICAgIH0KKyAgICB2YXIgcmVzdWx0ID0gYmF6KG8sIHAsIHEpOworICAgIGlm
IChyZXN1bHQgIT0gZXhwZWN0ZWQxICYmIHJlc3VsdCAhPSBleHBlY3RlZDIpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdCArICIgKGV4cGVjdGVkICIgKyBleHBl
Y3RlZDEgKyAiIG9yICIgKyBleHBlY3RlZDIgKyAiKSI7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktZ2V0LWJ5LW9mZnNldC1zZWxmLW9yLXByb3Rv
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVs
dGktZ2V0LWJ5LW9mZnNldC1zZWxmLW9yLXByb3RvLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1nZXQtYnktb2Zmc2V0LXNlbGYtb3It
cHJvdG8uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorZnVuY3Rpb24gZm9vKG8s
IHN0YXJ0KSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IG8uZjsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citub0lubGluZShmb28pOworCit2YXIgbyA9IHt9Oworby5mID0gNDI7Cit2YXIgZiA9IHt9Owor
Zi5mID0gNDM7CitmLmcgPSA0NDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQor
ICAgIG8uZiA9IGk7CitvLmYgPSA0MjsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgdmFyIHA7CisgICAgaWYgKGkgJiAxKQorICAgICAgICBwID0gbzsKKyAgICBlbHNl
CisgICAgICAgIHAgPSBPYmplY3QuY3JlYXRlKG8pOworICAgIHZhciByZXN1bHQgPSBmb28ocCk7
CisgICAgaWYgKHJlc3VsdCAhPSAxMDAgKiA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgcSA9IHt9OworcS5mID0gNDM7Cit2YXIgcmVz
dWx0ID0gZm9vKHEpOworaWYgKHJlc3VsdCAhPSAxMDAgKiA0MykKKyAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9yZXBsYWNlbWVudC13YXRjaHBvaW50LWRpY3Rpb25hcnkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBsYWNlbWVu
dC13YXRjaHBvaW50LWRpY3Rpb25hcnkuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQtZGljdGlvbmFyeS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3IEBACitmdW5jdGlvbiBmb28obykgeworICAg
IHJldHVybiBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBwID0ge2Y6NDJ9OwordmFy
IG8gPSBPYmplY3QuY3JlYXRlKHApOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7
CisgICAgcFsiaSIgKyBpXSA9IGk7CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxMDA7ICsraikg
eworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgICAgICBpZiAocmVzdWx0ICE9IDQy
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAg
IH0KK30KKworLy8gTWFrZSBwIGEgbm9uLWRpY3Rpb25hcnkuCitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDsgKytpKSB7CisgICAgdmFyIHRtcCA9IG8uZjsKK30KKworcC5mID0gNDM7Cit2YXIgcmVz
dWx0ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPSA0MykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9yZXBsYWNlbWVudC13YXRjaHBvaW50LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFj
ZW1lbnQtd2F0Y2hwb2ludC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyIEBACitmdW5j
dGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3Zh
ciBwID0ge2Y6NDJ9OwordmFyIG8gPSBPYmplY3QuY3JlYXRlKHApOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDsgKytpKSB7CisgICAgcFsiaSIgKyBpXSA9IGk7CisgICAgZm9yICh2YXIgaiA9
IDA7IGogPCAxMDA7ICsraikgeworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgICAg
ICBpZiAocmVzdWx0ICE9IDQyKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworICAgIH0KK30KKworcC5mID0gNDM7Cit2YXIgcmVzdWx0ID0gZm9vKG8p
OworaWYgKHJlc3VsdCAhPSA0MykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5k
OiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91
bmRlZmluZWQtYWNjZXNzLWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2UuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRlZmluZWQtYWNjZXNz
LWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2UuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3MtZGljdGlvbmFyeS10
aGVuLXByb3RvLWNoYW5nZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACitmdW5j
dGlvbiBmb28oKSB7CisgICAgdmFyIHAgPSB7fTsKKyAgICB2YXIgbyA9IHt9OworICAgIG8uX19w
cm90b19fID0gcDsKKyAgICB2YXIgcmVzdWx0OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
OyArK2kpIHsKKyAgICAgICAgcmVzdWx0ID0gby5mOworICAgICAgICBpZiAoaSA9PSA1MCkKKyAg
ICAgICAgICAgIHAuZiA9IDQyOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIg
cmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9IDQyKQorICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy91bmRlZmluZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hhbmdlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10
aGVuLXByb3RvLWNoYW5nZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNoYW5nZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVy
biBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBwID0ge307Cit2YXIgbyA9IE9iamVj
dC5jcmVhdGUocCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZh
ciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgaW4gbG9vcDogIiArIHJlc3VsdDsKK30KKworcC5mID0g
NDI7Cit2YXIgcmVzdWx0ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPT0gNDIpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE4NzY4MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIzIEBACisyMDE1LTA3LTMxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgREZHIHNob3VsZCBoYXZlIGFkYXB0aXZlIHN0cnVjdHVyZSB3YXRjaHBvaW50cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2OTI5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdy
ZXNzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13
aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGlu
Zy1wcm90b3R5cGUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUuanM6IEFkZGVk
LgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wcm90
b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvdW5kZWZpbmVkLXByb3Bl
cnR5LWFjY2Vzcy5qczoKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAo
YmF6KToKKwogMjAxNS0wNy0zMSAgU2FhbSBiYXJhdGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+
CiAKICAgICAgICAgRVM2IGNsYXNzIHN5bnRheCBzaG91bGQgdXNlIGJsb2NrIHNjb3BpbmcKSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRh
dGluZy1zdHJ1Y3R1cmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwt
b2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dsb2JhbC1vYmplY3QtYWNjZXNz
LXdpdGgtbXV0YXRpbmctc3RydWN0dXJlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2Jh
bC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0
aW5nLXN0cnVjdHVyZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3Ry
dWN0dXJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUt
YWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5n
LXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAor
SlNSZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3Rv
dHlwZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBl
LWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90
eXBlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11
dGF0aW5nLXByb3RvdHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13
aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0
cnVjdHVyZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIg
cmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBy
ZXN1bHQgKz0gZjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGluZShmb28pOworCitm
ID0gNDI7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0aGlzWyJpIiAr
IGldID0gaTsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAq
IDEwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vz
cy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJv
dG90eXBlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHZhciByZXN1
bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHJlc3Vs
dCArPSBvLmY7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFy
IHAgPSB7Zjo0Mn07Cit2YXIgbyA9IE9iamVjdC5jcmVhdGUocCk7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgIHBbImkiICsgaV0gPSBpOworICAgIHZhciByZXN1bHQg
PSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAqIDEwMCkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvdW5kZWZpbmVkLXByb3BlcnR5LWFjY2Vzcy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy91bmRlZmluZWQtcHJvcGVy
dHktYWNjZXNzLmpzCShyZXZpc2lvbiAxODc2MDUpCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy91bmRlZmluZWQtcHJvcGVydHktYWNjZXNzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0xMSw3ICsxMSw3IEBAIGZ1bmN0aW9uIGZvbygpIHsKIH0KIHJlc3VsdCA9IGZvbygpOwog
aWYgKHJlc3VsdCAhPSB1bmRlZmluZWQpCi0gICAgdGhyb3cgIkJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7CisgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKIAogLy8g
VGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGEgY2FjaGVkIHByb3BlcnR5IGxvb2t1cCBtaXNzIGRvZXNu
J3QgY29udGludWUgdG8gZmlyZSB3aGVuIHRoZSBwcm9wZXJ0eSBzdWRkZW5seSBhcHBlYXJzIG9u
IHRoZSBvYmplY3QuCiAKQEAgLTI2LDcgKzI2LDcgQEAgZnVuY3Rpb24gYmFyKCkgewogfQogdmFy
IHJlc3VsdCA9IGJhcigpOwogaWYgKHJlc3VsdCAhPSAxKQotICAgIHRocm93ICJCYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3Vs
dCk7CiBzb21lR2xvYmFsID0gdW5kZWZpbmVkOwogCiAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQg
YSBjYWNoZWQgcHJvcGVydHkgbG9va3VwIG1pc3MgZG9lc24ndCBjb250aW51ZSB0byBmaXJlIHdo
ZW4gdGhlIHByb3BlcnR5IHN1ZGRlbmx5IGFwcGVhcnMgb24gdGhlIG9iamVjdCdzIHByb3RvdHlw
ZS4KQEAgLTQ0LDUgKzQ0LDUgQEAgZnVuY3Rpb24gYmF6KCkgewogfQogdmFyIHJlc3VsdCA9IGJh
eigpOwogaWYgKHJlc3VsdCAhPSAyKQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257998</attachid>
            <date>2015-07-31 23:12:20 -0700</date>
            <delta_ts>2015-08-03 14:45:16 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>328846</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyNSBA
QAorMjAxNS0wNy0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5n
ZSwgaWYgeW91IHdhbnRlZCB0byBlZmZpY2llbnRseSB2YWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVj
dCBoYXMgKG9yIGRvZXNuJ3QgaGF2ZSkgYQorICAgICAgICBwcm9wZXJ0eSwgeW91J2QgY2hlY2sg
dGhhdCB0aGUgb2JqZWN0IHN0aWxsIGhhcyB0aGUgc3RydWN0dXJlIHRoYXQgeW91IGZpcnN0IHNh
dyB0aGUgb2JqZWN0IGhhdmUuIFdlCisgICAgICAgIG9wdGltaXplZCB0aGlzIGEgYml0IHdpdGgg
dHJhbnNpdGlvbiB3YXRjaHBvaW50cyBvbiB0aGUgc3RydWN0dXJlLCB3aGljaCBzb21ldGltZXMg
YWxsb3dlZCB1cyB0bworICAgICAgICBlbGlkZSB0aGUgc3RydWN0dXJlIGNoZWNrLgorCisgICAg
ICAgIEJ1dCB0aGlzIGFwcHJvYWNoIGZhaWxzIHdoZW4gdGhhdCBvYmplY3QgZnJlcXVlbnRseSBo
YXMgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXQuIFRoaXMgd291bGQKKyAgICAgICAgY2hhbmdl
IHRoZSBzdHJ1Y3R1cmUgYW5kIGZpcmUgdGhlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCwgc28gdGhl
IGNvZGUgd2UgZW1pdHRlZCB3b3VsZCBiZSBpbnZhbGlkIGFuZAorICAgICAgICB3ZSdkIGhhdmUg
dG8gcmVjb21waWxlIGVpdGhlciB0aGUgSUMgb3IgYW4gZW50aXJlIGNvZGUgYmxvY2suCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBjb25jZXB0OiBhbiBvYmplY3QgcHJv
cGVydHkgY29uZGl0aW9uLiBUaGlzIHZhbHVlIGRlc2NyaWJlcyBzb21lCisgICAgICAgIGNvbmRp
dGlvbiBpbnZvbHZpbmcgYSBwcm9wZXJ0eSBvbiBzb21lIG9iamVjdC4gVGhlcmUgYXJlIGZvdXIg
a2luZHM6IHByZXNlbmNlLCBhYnNlbmNlLAorICAgICAgICBhYnNlbmNlLW9mLXNldHRlciwgYW5k
IGVxdWl2YWxlbmNlLiBGb3IgZXhhbXBsZSwgYSBwcmVzZW5jZSBjb25kaXRpb24gc2F5cyB0aGF0
IHdlIGV4cGVjdCB0aGF0IHRoZQorICAgICAgICBvYmplY3QgaGFzIHNvbWUgcHJvcGVydHkgYXQg
c29tZSBvZmZzZXQgd2l0aCBzb21lIGF0dHJpYnV0ZXMuIFRoaXMgYWxsb3dzIHVzIHRvIGltcGxl
bWVudCBhIG5ldyBraW5kCisgICAgICAgIG9mIHdhdGNocG9pbnQsIHdoaWNoIGtub3dzIGFib3V0
IHRoZSBvYmplY3QgcHJvcGVydHkgY29uZGl0aW9uIHRoYXQgaXQncyBiZWluZyB1c2VkIHRvIGVu
Zm9yY2UuIElmCisgICAgICAgIHRoZSB3YXRjaHBvaW50IGZpcmVzIGJlY2F1c2Ugb2YgYSBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbiwgdGhlIHdhdGNocG9pbnQgbWF5IHNpbXBseSByZWluc3RhbGwgaXRz
ZWxmCisgICAgICAgIG9uIHRoZSBuZXcgc3RydWN0dXJlLgorCisgICAgICAgIE9iamVjdCBwcm9w
ZXJ0eSBjb25kaXRpb25zIGFyZSB1c2VkIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgUHV0QnlJ
ZCB0cmFuc2l0aW9ucywgR2V0QnlJZCBtaXNzZXMsCisgICAgICAgIGFuZCBwcm90b3R5cGUgYWNj
ZXNzZXMuIFRoZXkgYXJlIGFsc28gdXNlZCBmb3IgYW55IERGRyBhY2Nlc3NlcyB0byBvYmplY3Qg
Y29uc3RhbnRzLCBpbmNsdWRpbmcKKyAgICAgICAgZ2xvYmFsIHByb3BlcnR5IGFjY2Vzc2VzLgor
CisgICAgICAgIE1vc3RseSBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gZ2xvYmFsIHByb3BlcnR5
IGFjY2VzcywgdGhpcyBpcyBhIDklIHNwZWVkLXVwIG9uIEtyYWtlbi4gSXQncworICAgICAgICBu
ZXV0cmFsIG9uIG1vc3Qgb3RoZXIgdGhpbmdzLiBJdCdzIGEgNjh4IHNwZWVkLXVwIG9uIGEgbWlj
cm9iZW5jaG1hcmsgdGhhdCBpbGx1c3RyYXRlcyB0aGUgcHJvdG90eXBlCisgICAgICAgIGNoYWlu
IHNpdHVhdGlvbi4gSXQncyBhbHNvIGEgc21hbGwgc3BlZWQtdXAgb24gZ2V0dGVyLXJpY2hhcmRz
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpDb21wbGV4R2V0
U3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6dGFrZXNTbG93UGF0aCk6
CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmtpbmQpOgorICAgICAgICAoSlNDOjpD
b21wbGV4R2V0U3RhdHVzOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVz
Ojpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjphdHRyaWJ1
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6c3BlY2lmaWNW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmNoYWluKTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmg6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0
QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6fkdldEJ5SWRWYXJp
YW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6Okdl
dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OmJhc2VTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRW
YXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpvcGVyYXRvciEpOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6c3RydWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFZhcmlhbnQ6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJp
YW50OjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y2FsbExpbmtTdGF0
dXMpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAg
IChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCk6
CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHkpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0ZW1wdFRvTWFrZUVxdWl2YWxlbmNlV2l0aG91dEJhcnJp
ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb24pOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2Vu
Y2VXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
OjpwcmVzZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNl
bmNlV2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6YWJzZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNl
bmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjphYnNlbmNlT2ZTZXR0ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6Ok9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6b2JqZWN0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25k
aXRpb246OmNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
OjpraW5kKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OnVpZCk6Cisg
ICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpoYXNPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
T2JqZWN0UHJvcGVydHlDb25kaXRpb246Omhhc0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjpoYXNQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6cHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVy
dHlDb25kaXRpb246Omhhc1JlcXVpcmVkVmFsdWUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6cmVxdWlyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpoYXNoKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b246Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6aXNDb21wYXRpYmxlV2l0aCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQp
OgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJl
c1JlcGxhY2VtZW50V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uOjppc1ZhbGlkVmFsdWVGb3JQcmVzZW5jZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0Ojpmb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6Zm9yQ29uZGl0aW9uS2luZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjpudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZCk6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlvbik6Cisg
ICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlv
bik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjptZXJnZWRXaXRo
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnN0cnVjdHVyZXNF
bnN1cmVWYWxpZGl0eSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjpzdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpuZWVkSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmFyZVN0aWxsTGl2ZSk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmR1bXApOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9w
ZXJ0eU1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNl
dHRlck1pc3MpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdCk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0Q3VzdG9tKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KToKKyAgICAgICAgKiBieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KToKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQpOgorICAgICAgICAoSlND
OjpPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bm9uRW1wdHkpOgorICAgICAgICAoSlNDOjpP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmVuZCk6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0OjpyZWxlYXNlUmF3UG9pbnRlcik6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6RGF0YTo6RGF0YSk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OkdldEJ5
SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2Vzcyk6
CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnZpc2l0V2Vhayk6CisgICAgICAgICogYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNj
ZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0KToKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpjaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6
OmNoYWluQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJl
U3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWspOgorICAg
ICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaDoKKyAgICAgICAgKEpTQzo6
UHV0QnlJZEFjY2Vzczo6UHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nl
c3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpzZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpQdXRCeUlkQWNjZXNzOjpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNj
ZXNzOjpzdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OmNoYWluKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6Y2hhaW5Db3VudCk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzU3Rp
bGxWYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdo
ZW5WYWxpZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlD
b25kaXRpb246OmlzV2F0Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246
OmlzU3RpbGxMaXZlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OnZhbGlkYXRl
UmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1ZhbGlkVmFs
dWVGb3JBdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzVmFs
aWRWYWx1ZUZvclByZXNlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmF0
dGVtcHRUb01ha2VFcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpQcm9wZXJ0eUNvbmRpdGlvbik6
CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpwcmVzZW5jZVdpdGhvdXRCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OnByZXNlbmNlKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VXaXRob3V0QmFycmllcik6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcik6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlDb25kaXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjpraW5kKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OnVpZCk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUNvbmRpdGlvbjo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246
Omhhc0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0cmli
dXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpoYXNQcm90b3R5cGUpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6cHJvdG90eXBlKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlDb25kaXRpb246Omhhc1JlcXVpcmVkVmFsdWUpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eUNvbmRpdGlvbjo6cmVxdWlyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Q29uZGl0aW9uOjpoYXNoKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNDb21wYXRpYmxl
V2l0aCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjp3YXRjaGluZ1JlcXVpcmVz
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6d2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Q29uZGl0aW9uSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6b3BlcmF0
b3I9KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6Om1ha2VzQ2FsbHMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YXR0ZW1w
dFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VU
cmFuc2l0aW9uV2l0aFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6ZHVt
cEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQ
dXRCeUlkVmFyaWFudDo6a2luZCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpzdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c3RydWN0dXJlU2V0KToKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9sZFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRWYXJpYW50Ojpjb25kaXRpb25TZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmNhbGxMaW5rU3Rh
dHVzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmNvbnN0YW50Q2hlY2tzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmFsdGVybmF0ZUJhc2UpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Ojp+U3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQ6OnB1c2gpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86On5XYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8p
OgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNo
cG9pbnQpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVu
c3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludDo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCk6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6Y29kZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpzdHViSW5mbyk6
CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlk
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJ
ZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6c2V0U2Vlbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KToKKyAgICAgICAg
KiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMp
OgorICAgICAgICAqIGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50OjppbnN0YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQ6OmZpcmUpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6U3RydWN0dXJlV2F0Y2hwb2ludDo6Zmly
ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ6OlByb3BlcnR5V2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAg
ICAgKiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6a2V5KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9pbnQ6OlN0cnVjdHVyZVdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6UHJvcGVydHlXYXRjaHBvaW50OjpQcm9wZXJ0eVdhdGNocG9pbnQpOgorICAgICAg
ICAqIGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50OjppbnN0YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQ6OmtleSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2VsbENvbnN0YW50V2l0aFN0
cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvbW90ZVRv
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxvYWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcmVzZW5jZUxpa2UpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpjaGVja1ByZXNlbmNlTGlrZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW1pdENoZWNrcyk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgICogZGZnL0RGR0Nv
bW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkQmFzZUNoZWNr
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFz
ZTo6YWRkQ2hlY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRh
cHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFZhbHVlQWRhcHRvcjo6YWRk
KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9y
OjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdh
dGNocG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcik6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KToKKyAgICAg
ICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAgICAgIChKU0M6OkRGRzo6U2V0
UG9pbnRlckFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U2V0UG9pbnRlckFkYXB0
b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6CisgICAgICAgIChKU0M6OkRGRzo6U2V0UG9pbnRlckFk
YXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVkVmFsdWVB
ZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVk
VmFsdWVBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1
ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6ZHVtcEluQ29udGV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRv
cjo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dCk6CisgICAgICAg
IChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNoZWQpOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyaWNTZXRBZGFwdG9yOjphZGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkdlbmVyaWNTZXRBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpTQzo6REZH
OjpEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmNvbnRhaW5zKToKKyAgICAgICAgKiBkZmcvREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmg6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNs
ZWFyRmxhZ3NPbkFsbE5vZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6d2F0Y2hDb25k
aXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1NhZmVUb0xvYWQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6aWRlbnRpZmllcnMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp3YXRj
aHBvaW50cyk6CisgICAgICAgICogZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAg
IChKU0M6OkRGRzo6TXVsdGlHZXRCeU9mZnNldENhc2U6OmR1bXApOgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2V0QnlPZmZzZXRNZXRob2Q6OkdldEJ5T2Zmc2V0
TWV0aG9kKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6Y29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZyb21Qcm90b3R5cGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpvcGVyYXRvciEpOgorICAgICAgICAoSlND
OjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRC
eU9mZnNldE1ldGhvZDo6cHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZXRCeU9mZnNl
dE1ldGhvZDo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aUdldEJ5T2Zmc2V0Q2Fz
ZTo6TXVsdGlHZXRCeU9mZnNldENhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok11bHRpR2V0QnlP
ZmZzZXRDYXNlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok11bHRpR2V0QnlPZmZzZXRDYXNl
OjptZXRob2QpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6OmNoZWNrT2JqZWN0
UHJvcGVydHlDb25kaXRpb25zKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZVdpdGhKdW1wKToKKyAg
ICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlkU3R1Yik6CisgICAgICAgIChKU0M6OmFjdGlvbkZvckNl
bGwpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6
ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5zaXRpb25TdHVi
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5QnVp
bGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0Y2hJbik6CisgICAgICAgIChK
U0M6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OmVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6dGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29udmVydFRvRGljdGlvbmFyeSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzaGlmdEJ1dHRl
cmZseUFmdGVyRmxhdHRlbmluZyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeSk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlwZUNo
YWluKToKKyAgICAgICAgKEpTQzo6bm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vz
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmlzUHJvdG90eXBlQ2hhaW5Ob3JtYWxpemVkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6c2xvdEJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1wKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mv
Zm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5n
LXRoZS1zdHJ1Y3R1cmUtY2hlY2stbmV3LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAg
ICAgIChiYXIpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbXVsdGkt
Z2V0LWJ5LW9mZnNldC1zZWxmLW9yLXByb3RvLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6Cisg
ICAgICAgICogdGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQtZGljdGlvbmFyeS5q
czogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9yZXBsYWNl
bWVudC13YXRjaHBvaW50LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3MtZGljdGlvbmFyeS10aGVuLXByb3RvLWNoYW5nZS5q
czogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy91bmRlZmlu
ZWQtYWNjZXNzLXRoZW4tcHJvdG8tY2hhbmdlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisK
IDIwMTUtMDctMzEgIFNhYW0gYmFyYXRpICA8c2FhbWJhcmF0aTFAZ21haWwuY29tPgogCiAgICAg
ICAgIEVTNiBjbGFzcyBzeW50YXggc2hvdWxkIHVzZSBibG9jayBzY29waW5nCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0
LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9Db2RlT3JpZ2lu
LmNwcAogICAgIGJ5dGVjb2RlL0NvZGVUeXBlLmNwcAogICAgIGJ5dGVjb2RlL0NvbXBsZXhHZXRT
dGF0dXMuY3BwCi0gICAgYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKICAgICBi
eXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKICAgICBieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwCiAgICAgYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcApAQCAt
OTcsMTAgKzk2LDEzIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUv
SnVtcFRhYmxlLmNwcAogICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAog
ICAgIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisgICAgYnl0ZWNv
ZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCisgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuY3BwCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2Rl
L1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCiAgICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAKICAgICBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCisgICAgYnl0
ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAKICAgICBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKICAgICBieXRlY29kZS9SZWR1Y2VX
aGl0ZXNwYWNlLmNwcApAQCAtMTI4LDYgKzEzMCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAKICAgICBkZmcvREZHQWJzdHJhY3RIZWFwLmNwcAogICAgIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAorICAgIGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuY3BwCisgICAgZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKICAgICBk
ZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmNwcAogICAgIGRmZy9ERkdBcml0aE1vZGUuY3BwCkBAIC0xOTYsNiArMjAwLDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHTWluaWZpZWRHcmFwaC5j
cHAKICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcAogICAgIGRmZy9ERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlLmNwcAorICAgIGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAKICAgICBkZmcv
REZHTmFpdmVEb21pbmF0b3JzLmNwcAogICAgIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAg
ZGZnL0RGR05vZGUuY3BwCkBAIC00NzQsNyArNDc5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1JV
TlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAogICAgIHJ1bnRpbWUv
SW5mZXJyZWRWYWx1ZS5jcHAKICAgICBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCi0g
ICAgcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAogICAgIHJ1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5jcHAKICAgICBydW50aW1lL0ludGxDb2xsYXRvci5jcHAKICAgICBydW50aW1l
L0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVj
dCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6
Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVt
R3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1
cmF0aW9uIEluY2x1ZGU9IkRlYnVnU3VmZml4fFdpbjMyIj4KQEAgLTMyNCw3ICszMjQsNiBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZU9yaWdpbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlVHlwZS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb21wbGV4R2V0U3RhdHVzLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbnN0YW50U3RydWN0dXJlQ2hl
Y2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXERlZmVycmVkU291cmNlRHVtcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxERkdFeGl0UHJvZmlsZS5jcHAiIC8+CkBAIC0zMzcsMTAgKzMzNiwxMyBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSnVtcFRhYmxlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVj
aXNlSnVtcFRhcmdldHMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcUHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxQdXRCeUlkVmFyaWFudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxSZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4KQEAgLTM2NSw2ICszNjcsOCBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJTY29wZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcml0aE1vZGUuY3BwIiAvPgpA
QCAtNDMzLDYgKzQzNyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWlu
aWZpZWRHcmFwaC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWlu
aWZpZWROb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNb3ZI
aW50UmVtb3ZhbFBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR05vZGUuY3BwIiAvPgpAQCAtNzI5LDcgKzczNCw2IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZGV4aW5nVHlwZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRsQ29sbGF0b3Iu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRsQ29sbGF0b3JD
b25zdHJ1Y3Rvci5jcHAiIC8+CkBAIC05OTEsNyArOTk1LDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVUeXBlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxDb21tZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxDb21wbGV4R2V0U3RhdHVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxEYXRhRm9ybWF0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERlZmVycmVkU291cmNlRHVtcC5oIiAvPgpA
QCAtMTAwOSwxMSArMTAxMiwxNCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXExMSW50Q2FsbExpbmtJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9w
Y29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3BlcmFuZHMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxQdXRLaW5kLmgiIC8+CkBAIC0xMDQ5LDYgKzEwNTUsOCBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0VmFsdWUu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBZGphY2VuY3lMaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQWxsb2NhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHQW5hbHlzaXMuaCIgLz4KQEAgLTExNDEsNiArMTE0OSw3IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRJRC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05haXZlRG9taW5hdG9ycy5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuaCIgLz4KQEAgLTE1NDQsNyArMTU1Myw2IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludDE2QXJyYXkuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50MzJBcnJheS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnQ4QXJyYXkuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGxDb2xsYXRvci5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5o
IiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NzYwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDggQEAKIAkJMEYxM0UwNEUx
NjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5k
ZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1v
blNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTcyNUZGMUI0ODcx
OUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdN
aW5pZmllZEdyYXBoLmNwcCAqLzsgfTsKKwkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8qIERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKKwkJMEYxOEQzRDAxQjU1QTZFMDAw
MkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAv
KiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcCAqLzsgfTsKIAkJMEYxOTBDQUQxODlEODJGNjAwMEFFNUYwIC8qIFBy
b2ZpbGVySmV0dGlzb25SZWFzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29u
UmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYxREQ4NEExOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUREODQ5MThBOTQ1QkUwMDI2RjNG
QSAvKiBKU0NJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTI5Myw4ICsyOTUsNiBAQAogCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYg
LyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0I3RTJBMTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGM0QwQkJDMTk0QTQxNDMwMEZDOUNGOSAvKiBD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmNwcCAqLzsgfTsKLQkJMEYzRDBCQkQxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFBQjE5
RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8q
IERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTg4LDYgKzU4OCwxNCBAQAogCQkwRkQy
QzkyNDE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNG
IC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIw
MTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyODE0MTE1
RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmgg
Ki87IH07CisJCTBGRDNFNDAxMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGRDNFNDAyMUI2
MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNF
NDAwMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkQzRTQwOTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0
MDMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLzsgfTsK
KwkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNDFC
NjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQzRTQwQjFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDUxQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZEM0U0MEMxQjYxOEI2
NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQwNjFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJv
cGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNw
cCAqLzsgfTsKKwkJMEZEM0U0MEUxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzRTQw
ODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNF
NzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5j
cHAgKi87IH07CiAJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFEMDE1
NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAg
Ki87IH07CkBAIC02OTIsNiArNzAwLDggQEAKIAkJMEZGMEYxOUUxNkI3MkEwQjAwNURGOTVCIC8q
IERGR0VkZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNEI1MUIxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0VkZ2UuY3BwICovOyB9OwogCQkwRkYw
RjE5RjE2QjcyQTE3MDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUyMTE2QjYyNzhE
MDAzRjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgKi87IH07CiAJCTBGRjBGMUEw
MTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUyMjE2QjYyNzhEMDAzRjY5
NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRjJDRDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdN
dWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuY3BwICovOyB9OworCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRjJDRDVBMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRjQyNzMxMTU4RUJENTQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzJGMTU4RUJENDQwMDRDQjlG
RiAvKiBEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkY0MjczMjE1OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1i
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjQyNzMwMTU4RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovOyB9Owog
CQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzQxNThFQkQ5NDAwNENC
OUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyAqLzsgfTsKQEAgLTE0MTEsOCArMTQyMSw2IEBACiAJCUE3
ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYg
LyogU3ludGF4Q2hlY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg1MDdENTE3Q0JDNkZE
MDAxMUY2RTcgLyogTWFwRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE3ODVGNkJDMThDNTUzRkUwMEYxMDYyNiAvKiBTcGlsbFJlZ2lzdGVy
c01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGlsbFJlZ2lzdGVyc01vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzg4NTNGOTE3OTcyNjI5
MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07Ci0JCUE3ODg1M0ZBMTc5NzI2MjkwMDE0
NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4
QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgKi87IH07CiAJ
CUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEE5NzZEMTc5NzM4Qjgw
MDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAqLzsgfTsKIAkJQTc4QTk3NzYxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2RTE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxp
emVyLmNwcCAqLzsgfTsKQEAgLTE4NzksNiArMTg4Nyw4IEBACiAJCTBGMTNFMDRDMTYxNjRBMUIw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5kZXhpbmdUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxNzI1RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWluaWZpZWRH
cmFwaC5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRmZy9ERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjE4RDNDRTFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE5MENBQTE4OUQ4MkY2MDAwQUU1
RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlckpldHRpc29uUmVhc29uLmg7
IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRpc29uUmVhc29uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMUREODQ5MThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjQsOCArMjA3NCw2IEBACiAJCTBGM0IzQTJBMTU0NzRG
RjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdWYWxpZGF0ZS5oOyBwYXRoID0gZGZnL0RGR1ZhbGlkYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsVmFyaWFudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I3RTI1MTlBMTFCODAwMEQ5QkM1
NiAvKiBDYWxsVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxs
VmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNEMEJCQTE5NEE0MTQz
MDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50
U3RydWN0dXJlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNFMDFB
ODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgcGF0aCA9
IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5oOyBwYXRo
ID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjM3MCw2ICsyMzc4LDE0IEBACiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3
ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cnVjdHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
M0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFD
QiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJp
dmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgcGF0aCA9
IGRmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwMzFCNjE4QjY2MDBD
ODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzRTQwNDFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0
MDUxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0U0MDYxQjYxOEI2NjAw
QzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNv
bmRpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9wZXJ0
eUNvbmRpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNFNDA4MUI2
MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQ1NjUyMjE2QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9ja0lubGluZXMu
aDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0b3JzLmNwcDsg
cGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEODFBRDAxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0Rv
bWluYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NjksNiArMjQ4NSw4
IEBACiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVj
dXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGMDU0RjgxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9u
RnV6ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMkNENTkxQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcDsgcGF0aCA9
IGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRjJDRDVBMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oOyBwYXRoID0gZGZnL0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzYXNzZW1ibGVyLmg7IHBh
dGggPSBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRjQyNzMwMTU4RUJENDQwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVy
LmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2
X2RlY29kZS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfZGVjb2Rl
LmM7IHBhdGggPSBkaXNhc3NlbWJsZXIvdWRpczg2L3VkaXM4Nl9kZWNvZGUuYzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyMTMsOCArMzIzMSw2IEBACiAJCUE3N0YxODIwMTY0MDg4
QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODI0MTY0
MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJNb2Rl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2
RTcgLyogTWFwRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBF
NCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEE5NzZDMTc5NzM4
QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHRmFpbGVkRmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdG
YWlsZWRGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2
RDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0Zh
aWxlZEZpbmFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2RTE3
OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmluYWxpemVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1NTEsOCArNDU2Nyw2IEBACiAJ
CQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUE3QThB
RjJDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FE
QjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLywKLQkJCQlBNzg4NTNGNzE3OTcyNjI5MDAx
NDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCi0JCQkJQTc4ODUzRjgxNzk3
MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1
QjBFMTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2
N0EwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMUI5RTIz
MzFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yLmNwcCAqLywKQEAgLTQ5NTUsNiArNDk2
OSwxMCBAQAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdB
YnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGRDNFM0ZGMUI2MThBQUYwMEM4MEUxRSAvKiBERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwICovLAorCQkJCTBGRDNF
NDAwMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCAqLywKKwkJCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkwRjE4RDNDRTFCNTVBNkUwMDAyQzVD
OUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMEY2NkUxNjgx
NERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLywKIAkJCQkwRkI0QjUxOTE2
QjYyNzcyMDAzRjY5NkIgLyogREZHQWxsb2NhdG9yLmggKi8sCiAJCQkJQTczNzgxMDkxNzk5RUEy
RTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggKi8sCkBAIC01MTE0LDYgKzUxMzIsOCBAQAogCQkJ
CTBGMkJEQzNFMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKIAkJCQkw
RjhGMTQzMTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgKi8s
CiAJCQkJMEY4RjE0MzIxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
aCAqLywKKwkJCQkwRkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNl
dERhdGEuY3BwICovLAorCQkJCTBGRjJDRDVBMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdl
dEJ5T2Zmc2V0RGF0YS5oICovLAogCQkJCTBGQzNDQ0ZBMTlBREE0MTAwMDZBQzcyQSAvKiBERkdO
YWl2ZURvbWluYXRvcnMuY3BwICovLAogCQkJCTBGQzNDQ0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdOYWl2ZURvbWluYXRvcnMuaCAqLywKIAkJCQlBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyog
REZHTmF0dXJhbExvb3BzLmNwcCAqLywKQEAgLTUzODUsOCArNTQwNSw2IEBACiAJCQkJMEYwQjgz
QTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8sCiAJCQkJMEY2RkM3NEUxOTYxMTBB
ODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwICovLAogCQkJCTBGNkZDNzRGMTk2MTEw
QTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggKi8sCi0JCQkJMEYzRDBCQkExOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovLAotCQkJCTBGM0QwQkJC
MTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi8sCiAJCQkJMEY0
MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLywKIAkJCQkwRkM3MTJEQzE3
Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLywKIAkJ
CQkwRkM3MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmggKi8sCkBAIC01NDE5LDYgKzU0MzcsMTAgQEAKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5
ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0Ex
NEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJ
CQkxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAq
LywKKwkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwICovLAorCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5oICovLAorCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCisJCQkJMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi8sCiAJCQkJOTY5QTA3OTQwRUQxRDNB
RTAwRjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgx
IC8qIE9wY29kZS5oICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5k
cy5oICovLApAQCAtNTQzMCw2ICs1NDUyLDggQEAKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJB
RTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0Yw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUz
N0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKKwkJCQkwRkQzRTQwNzFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLAorCQkJCTBGRDNFNDA4MUI2
MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGOTMzMjk5MTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGOTNCNEE3MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCkBAIC01OTQ1LDYgKzU5NjksNyBAQAog
CQkJCUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRDQjlGRiAvKiBERkdEaXNh
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAv
KiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQwRTFCNjE4QjY2MDBD
ODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3
MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjIwMCw2ICs2MjI1LDcgQEAKIAkJCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIg
LyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4ODE4NTY4
MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNw
YXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8q
IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4
REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JS
dW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjIwOSw3ICs2MjM1LDYgQEAKIAkJCQlB
N0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50
ZXJuYWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5
NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYy
MDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKQEAgLTYyMjIsNiArNjI0Nyw3
IEBACiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMThEM0QwMUI1NUE2RTAw
MDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNh
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjQzOCw3ICs2NDY0LDYgQEAKIAkJCQlCQzE4
QzQzQzBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjNEMEJCRDE5NEE0MTQzMDBGQzlDRjkg
LyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MwMDhDRTcx
ODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4
RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTY1MjIsOSArNjU0NywxMSBAQAogCQkJCTJBQUQ5NjRBMTg1Njk0MTcw
MDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3
MUQgLyogUmVnLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAg
LyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUg
LyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4
MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQzNDBBNDg1MUE5MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjYwMiw2ICs2NjI5
LDcgQEAKIAkJCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVy
ZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIg
LyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzRTQw
QzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVy
ZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNzM5Nyw2
ICs3NDI1LDcgQEAKIAkJCQkwRkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50
cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgx
NzA5NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4RDUw
MDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDA3LDYg
Kzc0MzYsNyBAQAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93
ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0Ey
QzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRjJDRDVCMUI2MUE0
RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjIzNUJERjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExP
dXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDU4LDYgKzc0ODgsNyBAQAogCQkJCUE1Q0VF
RTE0MTg3RjNCQUQwMEU1NUM5OSAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGNjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0U0
MDExQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y3QzE4NDAzNjAzMDBCRkNFMjcg
LyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFG
NzM4MkMxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVGRDAwODExODlCMTkxQTAwNjMzMjMxIC8qIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0NjksNyArNzUwMCw2IEBACiAJCQkJQTUzMjQzOEIx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTBFNEI2MTE4ODA5REQ1MDA2OEE0NkQgLyogSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJ
bnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTc4ODUzRjkxNzk3MjYyOTAw
MTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVybmFsRnVuY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyOUQ3RDQwRUQyMTI4MjAwQjg5NjE5IC8qIEludGVycHJldGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTcwMTEzRDRCMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9w
ZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NDg2LDYgKzc1MTYsNyBAQAogCQkJCUJD
REQ1MUVCMEZCOERGNzQwMDRBOEJEQyAvKiBKSVRPcGNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3MTIzNkU1MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2RTg0NUExOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzRTQwOTFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE1ODdE
NkQxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlB
Y2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTQxLDcgKzc1NzIsNiBAQAogCQkJCUE1MDNG
QTFCMTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAx
M0U3QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0QwQkJDMTk0QTQxNDMw
MEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc3MzcsNiArNzc2Nyw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMy
RDAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBF
QkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2
MTMgLyogSlNKb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYz
NjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzc0Niw2ICs3Nzc3LDcgQEAKIAkJCQk3MDVCNDFCMTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5
RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAw
OUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1
NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgICAgIFN0
cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiA9IDA7CiAgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0
ID0gMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NU
eXBlKSB7CkBAIC0zNzAsMTEgKzM2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRD
YWNoZVN0YXR1cygKICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByb3RvdHlw
ZVN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGNoYWluKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50
ZigiLCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAg
ICAgICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7CiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CkBA
IC0zODIsOSArMzc2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVz
KAogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigiKCIpOwogICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0
dXJlKG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBDaGFpbihvdXQsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ1NiwxMCArNDUwLDggQEAgdm9pZCBDb2RlQmxvY2s6
OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAicHJldiIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1
cmUuZ2V0KCksIGlkZW50KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0Iiwgc3R1YkluZm8udS5wdXRCeUlk
VHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAo
U3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFp
bi5nZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAg
ICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgICAgICAgICBv
dXQucHJpbnRmKCJsaXN0ID0gWyIpOwpAQCAtNDgzLDEwICs0NzUsOCBAQCB2b2lkIENvZGVCbG9j
azo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1w
U3RydWN0dXJlKG91dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwg
aWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGFjY2Vzcy5jaGFpbigpLCBpZGVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFj
Y2Vzcy5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIsICIsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJ1bmtub3du
Iik7CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ6OmZp
cgogICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMp
LCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAKICAgICBtX2NvZGVCbG9jay0+amV0dGlz
b24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9w
dGltaXphdGlvbiwgJmRldGFpbCk7Ci0KLSAgICBpZiAoaXNPbkxpc3QoKSkKLSAgICAgICAgcmVt
b3ZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogQ29t
cGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sCi0gICAgdW5zaWduZWQgY2hhaW5Db3VudCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKKyAgICBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUg
dGhhdAogICAgIC8vIGhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpIGJ1dCBmb3Igd2hpY2gg
d2UgZG9uJ3QKQEAgLTQwLDMyICszOSwzNCBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1CiAgICAgLy8gdGhhdCwgeWV0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAKKyAgICBBU1NFUlQoY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSk7CisgICAgCiAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRo
KCk7CiAgICAgCiAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2lu
ZCA9IElubGluZWFibGU7CiAgICAgCi0gICAgaWYgKGNoYWluICYmIGNoYWluQ291bnQpIHsKLSAg
ICAgICAgcmVzdWx0Lm1fY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bigKLSAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGhlYWRTdHJ1Y3R1cmUsIGNoYWluLCBjaGFp
bkNvdW50KSk7CisgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIHJl
c3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAgCi0gICAgICAgIGlm
ICghcmVzdWx0Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICBpZiAoIXJlc3VsdC5t
X2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgIHJl
dHVybiBza2lwKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGVhZFN0cnVjdHVyZS0+dGFrZXNT
bG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKQotICAgICAgICAgICAgfHwgcmVzdWx0Lm1f
Y2hhaW4tPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisKKyAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZTbG90QmFzZXMgPQorICAgICAgICAgICAgcmVzdWx0Lm1fY29uZGl0
aW9uU2V0Lm51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVz
ZW5jZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mU2xvdEJhc2VzIDw9IDEpOwor
ICAgICAgICBpZiAoIW51bWJlck9mU2xvdEJhc2VzKSB7CisgICAgICAgICAgICAvLyBDdXJyZW50
bHkgd2UgZG9uJ3Qgc3VwcG9ydCBtaXNzZXMuIFRoYXQncyBhIGJ1bW1lci4KKyAgICAgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUy
CiAgICAgICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOworICAgICAgICB9CisgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2UgPSByZXN1bHQubV9jb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKTsKKyAgICAgICAgQVNTRVJUKGJhc2Uua2luZCgpID09IFByb3BlcnR5
Q29uZGl0aW9uOjpQcmVzZW5jZSk7CiAgICAgICAgIAotICAgICAgICBKU09iamVjdCogY3VycmVu
dE9iamVjdCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBT
dHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSByZXN1bHQubV9jaGFpbi0+bGFzdCgpOwotICAg
ICAgICAKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0
KTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwotICAgIH0KKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gYmFzZS5vZmZzZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gaGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgCiAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQ
YXRoKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0
YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21w
bGV4R2V0U3RhdHVzLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDggKzI2LDgg
QEAKICNpZm5kZWYgQ29tcGxleEdldFN0YXR1c19oCiAjZGVmaW5lIENvbXBsZXhHZXRTdGF0dXNf
aAogCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1
ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODAsNyArODAsNiBA
QCBwdWJsaWM6CiAgICAgQ29tcGxleEdldFN0YXR1cygpCiAgICAgICAgIDogbV9raW5kKFNob3Vs
ZFNraXApCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKLSAgICAgICAgLCBtX2F0
dHJpYnV0ZXMoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTk3LDIxICs5NiwxNiBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBDb21wbGV4R2V0U3RhdHVzIGNvbXB1
dGVGb3IoCi0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFk
U3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWlu
Q291bnQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgICAgICBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
czsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lm
aWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJl
dHVybiBtX2NoYWluLmdldCgpOyB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAgICAg
CiBwcml2YXRlOgogICAgIEtpbmQgbV9raW5kOwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OwotICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1
ZTsKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLXZvaWQgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjazo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBvdXQu
cHJpbnQoCi0gICAgICAgICIoQ2hlY2sgaWYgIiwgaW5Db250ZXh0KEpTVmFsdWUobV9jb25zdGFu
dCksIGNvbnRleHQpLCAiIGhhcyBzdHJ1Y3R1cmUgIiwKLSAgICAgICAgcG9pbnRlckR1bXBJbkNv
bnRleHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKSIpOwotfQotCi12b2lkIENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5D
b250ZXh0KG91dCwgbnVsbHB0cik7Ci19Ci0KLVN0cnVjdHVyZSogc3RydWN0dXJlRm9yKGNvbnN0
IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIHZlY3RvciwgSlNDZWxsKiBjb25zdGFudCkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
IGlmICh2ZWN0b3JbaV0uY29uc3RhbnQoKSA9PSBjb25zdGFudCkKLSAgICAgICAgICAgIHJldHVy
biB2ZWN0b3JbaV0uc3RydWN0dXJlKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci1ib29sIGFyZUNvbXBhdGlibGUoY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYg
YSwgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgYikKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBhLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIG90aGVyU3Ry
dWN0dXJlID0gc3RydWN0dXJlRm9yKGIsIGFbaV0uY29uc3RhbnQoKSk7Ci0gICAgICAgIGlmICgh
b3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGFbaV0u
c3RydWN0dXJlKCkgIT0gb3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIG1lcmdlSW50byhjb25zdCBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3RydWN0dXJlQ2hlY2tW
ZWN0b3ImIHRhcmdldCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzb3VyY2Uuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmVGb3IodGFyZ2V0LCBzb3VyY2VbaV0uY29uc3Rh
bnQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFyZ2V0LmFwcGVuZChzb3Vy
Y2VbaV0pOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db25zdGFudFN0cnVjdHVyZUNoZWNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbnN0YW50U3RydWN0dXJlQ2hl
Y2suaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvbnN0YW50U3RydWN0dXJlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVja19oCi0jZGVmaW5lIENvbnN0YW50U3RydWN0dXJlQ2hlY2tf
aAotCi0jaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb25zdGFudFN0cnVj
dHVyZUNoZWNrIHsKLXB1YmxpYzoKLSAgICBDb25zdGFudFN0cnVjdHVyZUNoZWNrKCkKLSAgICAg
ICAgOiBtX2NvbnN0YW50KG51bGxwdHIpCi0gICAgICAgICwgbV9zdHJ1Y3R1cmUobnVsbHB0cikK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2soSlNDZWxsKiBj
b25zdGFudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogbV9jb25zdGFudChjb25z
dGFudCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBB
U1NFUlQoISFtX2NvbnN0YW50ID09ICEhbV9zdHJ1Y3R1cmUpOwotICAgIH0KLSAgICAKLSAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbnN0YW50OyB9Ci0gICAgCi0gICAg
SlNDZWxsKiBjb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnQ7IH0KLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Ci0gICAgCi0g
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
LSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAg
SlNDZWxsKiBtX2NvbnN0YW50OwotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Ci19OwotCi10
eXBlZGVmIFZlY3RvcjxDb25zdGFudFN0cnVjdHVyZUNoZWNrLCAyPiBDb25zdGFudFN0cnVjdHVy
ZUNoZWNrVmVjdG9yOwotCi1TdHJ1Y3R1cmUqIHN0cnVjdHVyZUZvcihjb25zdCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrVmVjdG9yJiB2ZWN0b3IsIEpTQ2VsbCogY29uc3RhbnQpOwotYm9vbCBhcmVD
b21wYXRpYmxlKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImLCBjb25zdCBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7Ci12b2lkIG1lcmdlSW50byhjb25zdCBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBzb3VyY2UsIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0
b3ImIHRhcmdldCk7Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVja19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNjksOCArMTY5LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yUwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0
SW5kZXgpLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb21wbGV4R2V0
U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdElu
ZGV4KS5jaGFpbigpLAotICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW5D
b3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdElu
ZGV4KS5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3
aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGxl
eEdldFN0YXR1czo6U2hvdWxkU2tpcDoKQEAgLTIwNiw4ICsyMDUsOCBAQCBHZXRCeUlkU3RhdHVz
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50KAotICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0YXR1cy5v
ZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAotICAgICAgICAgICAgICAgICAgICBX
VEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJl
U2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCisgICAgICAgICAgICAg
ICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksIFdURjo6bW92ZShjYWxsTGlu
a1N0YXR1cykpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXJlc3Vs
dC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTg3NjA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzQsMjMgKzM0LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBHZXRCeUlk
VmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0
YXR1cykKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiAg
ICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCi0gICAgLCBtX2FsdGVybmF0ZUJhc2Uo
bnVsbHB0cikKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RGOjptb3ZlKGNhbGxMaW5rU3Rh
dHVzKSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKICAgICAgICAgQVNTRVJU
KG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFjaGFpbik7Ci0gICAg
fQotICAgIAotICAgIGlmIChjaGFpbiAmJiBjaGFpbi0+c2l6ZSgpKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwotICAgICAgICBjaGFpbi0+
Z2F0aGVyQ2hlY2tzKG1fY29uc3RhbnRDaGVja3MpOworICAgICAgICBBU1NFUlQoY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSk7CiAgICAgfQogfQotCisgICAgICAgICAgICAgICAgICAgICAKIEdldEJ5
SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlhbnQoKSB7IH0KIAogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5
SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKQEAgLTYyLDggKzU4LDcgQEAg
R2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldAogR2V0QnlJZFZhcmlhbnQm
IEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQog
ewogICAgIG1fc3RydWN0dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgbV9jb25z
dGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Ci0gICAgbV9hbHRlcm5hdGVCYXNl
ID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9j
b25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3Ro
ZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTcy
LDI4ICs2NywyNCBAQCBHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJ1Y3R1cmVTZXQgR2V0QnlJZFZhcmlhbnQ6OmJhc2VT
dHJ1Y3R1cmUoKSBjb25zdAotewotICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQotICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlU2V0KCk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KIGJvb2wg
R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhl
cikKIHsKLSAgICBpZiAobV9hbHRlcm5hdGVCYXNlICE9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNl
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8IG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWFy
ZUNvbXBhdGlibGUobV9jb25zdGFudENoZWNrcywgb3RoZXIubV9jb25zdGFudENoZWNrcykpCisK
KyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIG1lcmdlSW50byhv
dGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgaWYgKCFtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRp
b25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgIGlmICghbWVy
Z2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNs
b3RCYXNlQ29uZGl0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgIAogICAgIG1fc3RydWN0
dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKICAgICAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTExMiwxMCArMTAzLDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4
dChQcmludAogICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoCi0gICAgICAgICI8IiwgaW5Db250
ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAgIlsiLCBsaXN0RHVt
cEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsKLSAgICBpZiAobV9h
bHRlcm5hdGVCYXNlKQotICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGlu
Q29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKKyAgICAgICAgIjwi
LCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBpbkNvbnRleHQobV9j
b25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgb2Zm
c2V0KCkpOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBvdXQucHJpbnQoIiwg
Y2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsOSArMjcsOCBAQAogI2RlZmluZSBHZXRCeUlkVmFyaWFudF9oCiAKICNpbmNsdWRl
ICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkNvbnN0YW50U3RydWN0dXJlQ2hlY2suaCIK
LSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAi
UHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKIApAQCAtNDMsNyAr
NDIsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiBwdWJsaWM6CiAgICAgR2V0QnlJZFZhcmlh
bnQoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJl
U2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsCi0gICAgICAgIGNv
bnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQoKSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0
YXR1cyA9IG51bGxwdHIpOwogICAgIAogICAgIH5HZXRCeUlkVmFyaWFudCgpOwpAQCAtNTUsOSAr
NTQsMTAgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQo
KSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENo
ZWNrczsgfQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9h
bHRlcm5hdGVCYXNlOyB9Ci0gICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsK
KworICAgIC8vIEEgbm9uLWVtcHR5IGNvbmRpdGlvbiBzZXQgbWVhbnMgdGhhdCB0aGlzIGlzIGEg
cHJvdG90eXBlIGxvYWQuCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCiAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBD
YWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxMaW5r
U3RhdHVzLmdldCgpOyB9CiAgICAgCkBAIC03MCw4ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEdldEJ5SWRTdGF0dXM7CiAgICAgCiAgICAgU3RydWN0dXJlU2V0IG1fc3RydWN0
dXJlU2V0OwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFudENoZWNr
czsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOworICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRyYWNr
ZWRSZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8
aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQo
IjwiLCBpbkNvbnRleHQoSlNWYWx1ZShtX29iamVjdCksIGNvbnRleHQpLCAiOiAiLCBpbkNvbnRl
eHQobV9jb25kaXRpb24sIGNvbnRleHQpLCAiPiIpOworfQorCit2b2lkIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29u
dGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpz
dHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRp
b24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJl
KTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1Zh
bGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlm
ICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc3RydWN0
dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmpl
Y3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFs
aWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOworfQorCitib29sIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
cmV0dXJuIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3Qt
PnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGls
bFZhbGlkKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmRp
dGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBtX29iamVjdCk7Cit9CisKK2Jvb2wgT2JqZWN0
UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhp
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1N0aWxsVmFsaWQo
bV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKK30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAor
eworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKTsKK30KKwor
Ym9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5KCkg
Y29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgcmV0dXJuIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShtX29iamVjdC0+c3RydWN0dXJlKCkp
OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9w
ZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludChzdHJ1Y3R1cmUsIG1fb2JqZWN0LCBlZmZvcnQpOworfQorCitib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KAorICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25z
dAoreworICAgIGlmICghKnRoaXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVj
dC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OmlzV2F0Y2hhYmxlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eUNvbmRp
dGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0IGVmZm9ydCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
b25kaXRpb24uaXNXYXRjaGFibGUoc3RydWN0dXJlLCBtX29iamVjdCwgZWZmb3J0KTsKK30KKwor
Ym9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRp
b246OldhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc1dhdGNoYWJsZShtX29i
amVjdC0+c3RydWN0dXJlKCksIGVmZm9ydCk7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25k
aXRpb246OmlzU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29iamVjdCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGls
bExpdmUoKTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRhdGVSZWZl
cmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkKSBjb25zdAoreworICAgIGlm
ICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0cmFja2VkLmNoZWNrKG1fb2Jq
ZWN0KTsKKyAgICBtX2NvbmRpdGlvbi52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZCk7Cit9CisK
K09iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphdHRlbXB0
VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigpIGNvbnN0Cit7CisgICAgUHJvcGVydHlD
b25kaXRpb24gcmVzdWx0ID0gY29uZGl0aW9uKCkuYXR0ZW1wdFRvTWFrZUVxdWl2YWxlbmNlV2l0
aG91dEJhcnJpZXIob2JqZWN0KCkpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25k
aXRpb24ob2JqZWN0KCksIHJlc3VsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25faAorI2RlZmluZSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5
Q29uZGl0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiB7CitwdWJsaWM6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKQorICAgICAgICA6
IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdG9rZW4pCisgICAgICAg
IDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2NvbmRpdGlvbih0b2tlbikKKyAgICB7
CisgICAgfQorICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKEpTT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCisgICAgICAgIDogbV9vYmpl
Y3Qob2JqZWN0KQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICB7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZVdpdGhv
dXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgewor
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlD
b25kaXRpb246OnByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMp
OyAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uIHByZXNlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAg
IGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAg
ICAgICAgcmV0dXJuIHByZXNlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIG9mZnNldCwg
YXR0cmlidXRlcyk7CisgICAgfQorCisgICAgLy8gTk9URTogVGhlIHByb3RvdHlwZSBpcyB0aGUg
c3RvcmVkUHJvdG90eXBlLCBub3QgdGhlIHByb3RvdHlwZUZvckxvb2t1cC4KKyAgICBzdGF0aWMg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBK
U09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlv
biA9IFByb3BlcnR5Q29uZGl0aW9uOjphYnNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBwcm90b3R5
cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCog
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQorICAgICAgICAgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4gYWJzZW5jZVdpdGhvdXRCYXJy
aWVyKG9iamVjdCwgdWlkLCBwcm90b3R5cGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIoCisgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBw
cm90b3R5cGUpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX29iamVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uID0gUHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVy
KHVpZCwgcHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcigKKyAgICAg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVy
KQorICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1
cm4gYWJzZW5jZU9mU2V0dGVyV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHByb3RvdHlwZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFs
ZW5jZVdpdGhvdXRCYXJyaWVyKAorICAgICAgICBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7Cisg
ICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9IFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5j
ZVdpdGhvdXRCYXJyaWVyKHVpZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2Uo
CisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChvd25l
cikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgcmV0
dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb25kaXRpb247
IH07CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
OyB9CisgICAgUHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb247IH0KKyAgICAKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gY29uZGl0aW9uKCkua2luZCgpOyB9CisgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnVpZCgpOyB9CisgICAgYm9vbCBoYXNP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb24oKS5oYXNPZmZzZXQoKTsgfQorICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLm9mZnNldCgp
OyB9CisgICAgdW5zaWduZWQgaGFzQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlv
bigpLmhhc0F0dHJpYnV0ZXMoKTsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7
IHJldHVybiBjb25kaXRpb24oKS5hdHRyaWJ1dGVzKCk7IH0KKyAgICBib29sIGhhc1Byb3RvdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLmhhc1Byb3RvdHlwZSgpOyB9CisgICAgSlNP
YmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbigpLnByb3RvdHlwZSgp
OyB9CisgICAgYm9vbCBoYXNSZXF1aXJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9u
KCkuaGFzUmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgSlNWYWx1ZSByZXF1aXJlZFZhbHVlKCkgY29u
c3QgeyByZXR1cm4gY29uZGl0aW9uKCkucmVxdWlyZWRWYWx1ZSgpOyB9CisgICAgCisgICAgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SlNPYmplY3QqPjo6aGFz
aChtX29iamVjdCkgKyBtX2NvbmRpdGlvbi5oYXNoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAg
ICAgICYmIG1fY29uZGl0aW9uID09IG90aGVyLm1fY29uZGl0aW9uOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhbV9vYmplY3QgJiYgbV9jb25kaXRpb24uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsK
KyAgICB9CisgICAgCisgICAgLy8gVHdvIGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhl
eSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRoZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMgb3IKKyAg
ICAvLyBkaWZmZXJlbnQgb2JqZWN0cy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQsIHlvdSBoYXZlIHRv
IGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLQorICAgIC8vIGZvciBleGFtcGxl
IGlmIHRoZXJlIGlzIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRoZW4gaW4gc29tZSBj
YXNlcyB5b3UnbGwgd2FudCB0aGUKKyAgICAvLyBtb3JlIGdlbmVyYWwgb2YgdGhlIHR3byB3aGls
ZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZpYyBvZiB0aGUgdHdv
LiBUaGlzCisgICAgLy8gd2lsbCBhbHNvIHJldHVybiBmYWxzZSBmb3IgY29udHJhZGljdGlvbnMs
IGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUKKyAgICAvLyBvYmplY3QvdWlk
LiBCeSBjb252ZW50aW9uLCBpbnZhbGlkIGNvbmRpdGlvbnMgYXJlbid0IGNvbXBhdGlibGUgd2l0
aCBhbnl0aGluZy4KKyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGgoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcyB8fCAh
b3RoZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpcyA9
PSBvdGhlciB8fCB1aWQoKSAhPSBvdGhlci51aWQoKSB8fCBvYmplY3QoKSAhPSBvdGhlci5vYmpl
Y3QoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgdmFsaWRpdHktY2hlY2tpbmcgbWV0aG9k
cyBjYW4gb3B0aW9uYWxseSB0YWtlIGEgU3RydXR1cmUqIGluc3RlYWQgb2YgbG9hZGluZyB0aGUK
KyAgICAvLyBTdHJ1Y3R1cmUqIGZyb20gdGhlIG9iamVjdC4gSWYgeW91J3JlIGluIHRoZSBjb25j
dXJyZW50IEpJVCwgdGhlbiB5b3UgbXVzdCB1c2UgdGhlIGZvcm1zCisgICAgLy8gdGhhdCB0YWtl
IGFuIGV4cGxpY2l0IFN0cnVjdHVyZSogYmVjYXVzZSB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8g
b3B0aW1pemUgZm9yIHRoZSBzYW1lCisgICAgLy8gc3RydWN0dXJlIHRoYXQgeW91IHZhbGlkYXRl
ZCAoaS5lLiBhdm9pZCBhIFRPQ1RPVSByYWNlKS4KKyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhl
IG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50
ZXJjZXB0ZWQuIFZhbGlkaXR5CisgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBv
biB0aGUgb2JqZWN0LgorICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CisgICAgYm9vbCBzdHJ1
Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNv
bnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9w
ZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGls
bFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFs
aWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsK
KyAgICBib29sIHZhbGlkaXR5UmVxdWlyZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25z
dDsKKworICAgIC8vIENoZWNrcyBpZiB0aGUgY29uZGl0aW9uIHN0aWxsIGhvbGRzLiBNYXkgY29u
c2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZAorICAgIC8vIHN0cnVj
dHVyZSBhbG9uZSBkb24ndCBndWFyYW50ZWUgdGhlIGNvbmRpdGlvbi4gTm90ZSB0aGF0IHRoaXMg
bWF5IHJldHVybiB0cnVlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBzdGlsbCByZXF1aXJlcyBz
b21lIHdhdGNocG9pbnRzIG9uIHRoZSBvYmplY3QgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhl
CisgICAgLy8gc3RydWN0dXJlLiBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9u
IGhvbGRzIGJ5IHVzaW5nIHRoZSBzdHJ1Y3R1cmUgYWxvbmUsCisgICAgLy8gdXNlIHN0cnVjdHVy
ZUVuc3VyZXNWYWxpZGl0eSgpLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKFN0cnVjdHVyZSopIGNv
bnN0OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2hvcnRo
YW5kIGZvciBjb25kaXRpb24oKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlKS4KKyAgICBib29sIHN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICBib29sIHN0cnVj
dHVyZUVuc3VyZXNWYWxpZGl0eSgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRp
bmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBw
b3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KKyAgICBib29sIGlzV2F0Y2hh
YmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgICAgIFN0cnVjdHVyZSos
CisgICAgICAgIFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQgPSBQcm9wZXJ0
eUNvbmRpdGlvbjo6TWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgYm9vbCBpc1dhdGNoYWJsZUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlv
bjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMp
IGNvbnN0OworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdl
IGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3
YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAg
ICAgU3RydWN0dXJlKiwKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVm
Zm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICBib29s
IGlzV2F0Y2hhYmxlKAorICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZm
b3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgIAorICAg
IGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICB9CisgICAgYm9vbCB3YXRjaGluZ1Jl
cXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBjb25kaXRpb24oKS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCk7Cisg
ICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBpbnZvbHZlZCBp
biB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBjb25zdDsKKyAg
ICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYp
IGNvbnN0OworCisgICAgYm9vbCBpc1ZhbGlkVmFsdWVGb3JQcmVzZW5jZShKU1ZhbHVlIHZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbigpLmlzVmFsaWRWYWx1ZUZv
clByZXNlbmNlKHZhbHVlKTsKKyAgICB9CisKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBh
dHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcigpIGNvbnN0OworCitwcml2YXRl
OgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBQcm9wZXJ0eUNvbmRpdGlvbiBtX2NvbmRp
dGlvbjsKK307CisKK3N0cnVjdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbkhhc2ggeworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbCgKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGEsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxK
U0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6T2JqZWN0
UHJvcGVydHlDb25kaXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6Zm9yT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QpIGNvbnN0Cit7CisgICAgZm9yIChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAg
ICAgaWYgKGNvbmRpdGlvbi5vYmplY3QoKSA9PSBvYmplY3QpCisgICAgICAgICAgICByZXR1cm4g
Y29uZGl0aW9uOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsK
K30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6
OmZvckNvbmRpdGlvbktpbmQoCisgICAgUHJvcGVydHlDb25kaXRpb246OktpbmQga2luZCkgY29u
c3QKK3sKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiAqdGhpcykgeworICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBraW5kKQorICAgICAg
ICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uKCk7Cit9CisKK3Vuc2lnbmVkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpu
dW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5kKSBj
b25zdAoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGNvbmRp
dGlvbi5raW5kKCkgPT0ga2luZCkKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNP
bmVTbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG51bWJlck9mQ29uZGl0
aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgPT0gMTsKK30KKworT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OnNsb3RCYXNl
Q29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7
CisgICAgdW5zaWduZWQgbnVtRm91bmQgPSAwOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25kaXRpb24u
a2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgeworICAgICAgICAgICAgcmVz
dWx0ID0gY29uZGl0aW9uOworICAgICAgICAgICAgbnVtRm91bmQrKzsKKyAgICAgICAgfQorICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVChudW1Gb3VuZCA9PSAxKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldDo6bWVyZ2VkV2l0aCgKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
b3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIGludmFsaWQoKTsKKworICAgIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbj4gcmVzdWx0OworICAgIAorICAgIGlmICghaXNFbXB0eSgpKQorICAgICAgICByZXN1
bHQuYXBwZW5kVmVjdG9yKG1fZGF0YS0+dmVjdG9yKTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBuZXdDb25kaXRpb24gOiBvdGhlcikgeworICAgICAgICBm
b3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBleGlzdGluZ0NvbmRpdGlvbiA6ICp0
aGlzKSB7CisgICAgICAgICAgICBpZiAobmV3Q29uZGl0aW9uID09IGV4aXN0aW5nQ29uZGl0aW9u
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFuZXdDb25kaXRp
b24uaXNDb21wYXRpYmxlV2l0aChleGlzdGluZ0NvbmRpdGlvbikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGludmFsaWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3Q29uZGl0aW9u
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjcmVhdGUocmVzdWx0KTsKK30KKwor
Ym9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5
KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6
ICp0aGlzKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6c3RydWN0dXJlc0Vuc3VyZVZh
bGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGlm
ICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKKyAgICAgICAg
aWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om5lZWRJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIGlmIChjb25k
aXRpb24udmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YXJlU3RpbGxMaXZlKCkgY29uc3QKK3sKKyAgICBm
b3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiAqdGhpcykgewor
ICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1N0aWxsTGl2ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICBvdXQu
cHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91
dC5wcmludCgiWyIpOworICAgIGlmIChtX2RhdGEpCisgICAgICAgIG91dC5wcmludChsaXN0RHVt
cEluQ29udGV4dChtX2RhdGEtPnZlY3RvciwgY29udGV4dCkpOworICAgIG91dC5wcmludCgiXSIp
OworfQorCit2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitu
YW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09i
amVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6
S2luZCBjb25kaXRpb25LaW5kKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0
LT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiQ3JlYXRp
bmcgY29uZGl0aW9uICIsIGNvbmRpdGlvbktpbmQsICIgZm9yICIsIHBvaW50ZXJEdW1wKHN0cnVj
dHVyZSksICJcbiIpOworCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAg
IHN3aXRjaCAoY29uZGl0aW9uS2luZCkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OlBy
ZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRl
cyk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIHJl
dHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgICAgICByZXN1bHQgPSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2Uodm0sIG93bmVyLCBvYmplY3QsIHVpZCwgb2Zmc2V0
LCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHJvcGVydHlD
b25kaXRpb246OkFic2VuY2U6IHsKKyAgICAgICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb246OmFic2VuY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBvYmpl
Y3QtPnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlT2ZTZXR0ZXI6IHsK
KyAgICAgICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmFic2VuY2VPZlNldHRl
cigKKyAgICAgICAgICAgIHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIG9iamVjdC0+c3RydWN0dXJl
KCktPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgIH0KKworICAgIGlmICghcmVz
dWx0LnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJGYWls
ZWQgdG8gY3JlYXRlIGNvbmRpdGlvbjogIiwgcmVzdWx0LCAiXG4iKTsKKyAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2coIk5ldyBjb25kaXRpb246ICIsIHJlc3VsdCwgIlxuIik7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZW51bSBDb25jdXJyZW5jeSB7CisgICAgTWFpblRocmVhZCwKKyAg
ICBDb25jdXJyZW50Cit9OwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICBWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogcHJv
dG90eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yLAorICAgIENvbmN1cnJlbmN5IGNvbmN1cnJl
bmN5ID0gTWFpblRocmVhZCkKK3sKKyAgICBWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
IGNvbmRpdGlvbnM7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIHN0cnVjdHVyZTogIiwgcG9pbnRlckR1
bXAoc3RydWN0dXJlKSwgIlxuIik7CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c1Byb3h5KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIkl0J3MgYSBwcm94eSwgc28gaW52YWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjppbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1
cChnbG9iYWxPYmplY3QpOworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7
CisgICAgICAgICAgICBpZiAoIXByb3RvdHlwZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZWFjaGVkIGVuZCB1cCBwcm90b3R5
cGUgY2hhaW4gYXMgZXhwZWN0ZWQsIGRvbmUuXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIlVuZXhwZWN0ZWRseSByZWFjaGVkIGVuZCBvZiBwcm90b3R5cGUgY2hhaW4sIHNv
IGludmFsaWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldDo6aW52YWxpZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgICAgICBzdHJ1Y3R1cmUgPSBv
YmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB3ZSdyZSBh
Y2Nlc3NpbmcgYSBwcm90b3R5cGUgcmVwZWF0ZWRseSwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQg
c2hvdWxkIG5vdCBiZQorICAgICAgICAvLyB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmIChjb25j
dXJyZW5jeSA9PSBNYWluVGhyZWFkKQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRl
bkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIG9iamVjdCk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
Q2Fubm90IGZsYXR0ZW4gZGljdGlvbmFyeSB3aGVuIG5vdCBvbiBtYWluIHRocmVhZCwgc28gaW52
YWxpZC5cbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldDo6aW52YWxpZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFmdW5jdG9yKGNvbmRpdGlvbnMsIG9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkZ1bmN0b3IgZmFpbGVkLCBpbnZhbGlkLlxuIik7
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmludmFsaWQo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUp
IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlJl
YWNoZWQgZGVzaXJlZCBwcm90b3R5cGUsIGRvbmUuXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJl
dHVybmluZyBjb25kaXRpb25zOiAiLCBsaXN0RHVtcChjb25kaXRpb25zKSwgIlxuIik7CisgICAg
cmV0dXJuIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpjcmVhdGUoY29uZGl0aW9ucyk7Cit9
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAg
ICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBudWxs
cHRyLAorICAgICAgICBbJl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRp
dGlvbnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJvb2wgeworICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gcmVzdWx0ID0KKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlv
bih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSk7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0pOworfQorCitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAg
ICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBudWxs
cHRyLAorICAgICAgICBbJl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRp
dGlvbnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJvb2wgeworICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gcmVzdWx0ID0KKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlv
bih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0
dGVyKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1
cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sK
KyAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgICAgICB2bSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBwcm90b3R5cGUsCisgICAgICAgIFsmXSAo
VmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9i
amVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBraW5k
ID0KKyAgICAgICAgICAgICAgICBvYmplY3QgPT0gcHJvdG90eXBlID8gUHJvcGVydHlDb25kaXRp
b246OlByZXNlbmNlIDogUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQgPQorICAgICAgICAgICAgICAgIGdlbmVyYXRl
Q29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIGtpbmQpOworICAgICAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29u
ZGl0aW9ucy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9KTsKK30KKworT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHBy
b3RvdHlwZSwKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBnZW5l
cmF0ZUNvbmRpdGlvbnMoCisgICAgICAgIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlwZSwKKyAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJv
cGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsK
KyAgICAgICAgICAgIGlmIChvYmplY3QgPT0gcHJvdG90eXBlKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlk
LCBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb25kaXRpb25zLmFw
cGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworfQor
CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKKyAgICAgICAgdm0sIGdsb2Jh
bE9iamVjdCwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwKKyAgICAgICAgWyZdIChWZWN0b3I8T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBi
b29sIHsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CisgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG51bGxwdHIsIG9iamVjdCwgdWlkLCBQ
cm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZU9mU2V0dGVyKTsKKyAgICAgICAgICAgIGlmICghcmVz
dWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbmRpdGlv
bnMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwg
Q29uY3VycmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorI2RlZmluZSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldF9oCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiBvYmpl
Y3QgcHJvcGVydHkgY29uZGl0aW9uIHNldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9m
IGFkZGl0aW9uYWwgY29uZGl0aW9ucworLy8gdGhhdCBuZWVkIHRvIGJlIG1ldCBmb3Igc29tZSBo
ZWFwIGFjY2VzcyB0byBiZSB2YWxpZC4gVGhlIHNldCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nCisv
LyBpbnRlcmVzdGluZyBzdGF0ZXM6CisvLworLy8gRW1wdHk6IFRoZXJlIGFyZSBubyBzcGVjaWFs
IGNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldC4KKy8vIEludmFsaWQ6IFRoZSBoZWFwIGFj
Y2VzcyBpcyBuZXZlciB2YWxpZC4KKy8vIE5vbi1lbXB0eTogVGhlIGhlYXAgYWNjZXNzIGlzIHZh
bGlkIGlmIGFsbCB0aGUgT2JqZWN0UHJvcGVydHlDb25kaXRpb25zIGluIHRoZSBzZXQgYXJlIHZh
bGlkLgorCitjbGFzcyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCB7CitwdWJsaWM6CisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSB7IH0KKyAgICAKKyAgICBzdGF0aWMgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgaW52YWxpZCgpCisgICAgeworICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBhZG9wdFJl
ZihuZXcgRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNyZWF0ZShjb25zdCBWZWN0b3I8T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9y
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYobmV3IERhdGEoKSk7CisgICAgICAg
IHJlc3VsdC5tX2RhdGEtPnZlY3RvciA9IHZlY3RvcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhbV9kYXRhIHx8ICFtX2RhdGEtPnZlY3Rvci5pc0VtcHR5KCk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fZGF0YTsK
KyAgICB9CisgICAgCisgICAgdHlwZWRlZiBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiog
aXRlcmF0b3I7CisgICAgCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIG1fZGF0YS0+dmVjdG9yLmJlZ2luKCk7CisgICAgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gbV9kYXRhLT52ZWN0b3IuZW5kKCk7CisgICAgfQorICAgIAor
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvck9iamVjdChKU09iamVjdCopIGNvbnN0Owor
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGZvckNvbmRpdGlvbktpbmQoUHJvcGVydHlDb25k
aXRpb246OktpbmQpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25kaXRpb25zV2l0
aEtpbmQoUHJvcGVydHlDb25kaXRpb246OktpbmQpIGNvbnN0OworCisgICAgYm9vbCBoYXNPbmVT
bG90QmFzZUNvbmRpdGlvbigpIGNvbnN0OworICAgIAorICAgIC8vIElmIHRoaXMgaXMgYSBjb25k
aXRpb24gc2V0IGZvciBhIHByb3RvdHlwZSBoaXQsIHRoZW4gdGhpcyBpcyBndWFyYW50ZWVkIHRv
IHJldHVybiB0aGUKKyAgICAvLyBjb25kaXRpb24gb24gdGhlIHByb3RvdHlwZSBpdHNlbGYuIFRo
aXMgYWxsb3dzIHlvdSB0byBnZXQgdGhlIG9iamVjdCwgb2Zmc2V0LCBhbmQKKyAgICAvLyBhdHRy
aWJ1dGVzIGZvciB0aGUgcHJvdG90eXBlLiBUaGlzIHdpbGwgUkVMRUFTRV9BU1NFUlQgdGhhdCB0
aGVyZSBpcyBleGFjdGx5IG9uZSBQcmVzZW5jZQorICAgIC8vIGluIHRoZSBzZXQsIGFuZCBpdCB3
aWxsIHJldHVybiB0aGF0IHByZXNlbmNlLgorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNs
b3RCYXNlQ29uZGl0aW9uKCkgY29uc3Q7CisgICAgCisgICAgLy8gQXR0ZW1wdCB0byBjcmVhdGUg
YSBuZXcgY29uZGl0aW9uIHNldCBieSBtZXJnaW5nIHRoaXMgb25lIHdpdGggdGhlIG90aGVyIG9u
ZS4gVGhpcyB3aWxsCisgICAgLy8gZmFpbCBpZiBhbnkgb2YgdGhlIGNvbmRpdGlvbnMgYXJlIGlu
Y29tcGF0aWJsZSB3aXRoIGVhY2ggb3RoZXIuIFdoZW4gaWYgZmFpbHMsIGl0IHJldHVybnMKKyAg
ICAvLyBpbnZhbGlkKCkuCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkV2l0
aChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgb3RoZXIpIGNvbnN0OworICAgIAor
ICAgIGJvb2wgc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkgY29uc3Q7CisgICAgYm9vbCBzdHJ1
Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNv
bnN0OworICAgIAorICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0
OworICAgIGJvb2wgYXJlU3RpbGxMaXZlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBIZWxwZXJzIGZvciB1c2luZyB0aGlz
IGluIGEgdW5pb24uCisgICAgdm9pZCogcmVsZWFzZVJhd1BvaW50ZXIoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihtX2RhdGEubGVha1JlZigpKTsKKyAgICB9Cisg
ICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGFkb3B0UmF3UG9pbnRlcih2b2lk
KiByYXdQb2ludGVyKQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9kYXRhID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8RGF0
YSo+KHJhd1BvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgc3Rh
dGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGZyb21SYXdQb2ludGVyKHZvaWQqIHJhd1Bv
aW50ZXIpCisgICAgeworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4ocmF3UG9pbnRlcik7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBJ
bnRlcm5hbGx5LCB0aGlzIHJlcHJlc2VudHMgSW52YWxpZCB1c2luZyBhIHBvaW50ZXIgdG8gYSBE
YXRhIHRoYXQgaGFzIGFuIGVtcHR5IHZlY3Rvci4KKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBj
b3VsZCBiZSBtYWRlIG1vcmUgY29tcGFjdCBieSBoYXZpbmcgaXQgaW50ZXJuYWxseSB1c2UgYSB2
ZWN0b3IgdGhhdCBqdXN0IGhhcworICAgIC8vIHRoZSBub24tdWlkIHBvcnRpb24gb2YgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24sIGFuZCB0aGVuIHJlcXVpcmluZyB0aGF0IHRoZSBjYWxsZXJzIG9m
IGFsbAorICAgIC8vIG9mIHRoZSBBUElzIHN1cHBseSB0aGUgdWlkLgorICAgIAorICAgIGNsYXNz
IERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YT4geworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEYXRhKTsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgRGF0YSgpIHsgfQorICAgICAgICAKKyAg
ICAgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB2ZWN0b3I7CisgICAgfTsKKyAg
ICAKKyAgICBSZWZQdHI8RGF0YT4gbV9kYXRhOworfTsKKworT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgIFZNJiwgSlNDZWxs
KiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CitPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5
cGVQcm9wZXJ0eUhpdCgKKyAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgIFZNJiwgSlNDZWxsKiBvd25l
ciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90
eXBlLAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCitPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCisgICAgVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
CShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKICAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgdW5zaWduZWQgY2hhaW5Db3VudCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKICAgICA6
IG1fdHlwZSh0eXBlKQotICAgICwgbV9jaGFpbkNvdW50KGNoYWluQ291bnQpCiAgICAgLCBtX3N0
cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRp
dGlvblNldCkKICAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCiB7Ci0gICAgaWYgKGNo
YWluKQotICAgICAgICBtX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKIH0KIAogR2V0QnlJ
ZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQpAQCAtNzEsNyArNjksNyBAQCBib29sIEdldEJ5SWRB
Y2Nlc3M6OnZpc2l0V2VhayhSZXBhdGNoQnVmCiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFI
ZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4NzYwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4u
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTMsMTMgKzU0LDEyIEBAIHB1YmxpYzoK
ICAgICAKICAgICBHZXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAg
ICAgICAgLCBtX2NoYWluQ291bnQoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIEdldEJ5SWRB
Y2Nlc3MoCiAgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0
cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKiA9
IDAsIHVuc2lnbmVkIGNoYWluQ291bnQgPSAwKTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CiAgICAgCiAg
ICAgfkdldEJ5SWRBY2Nlc3MoKTsKICAgICAKQEAgLTcyLDggKzcyLDcgQEAgcHVibGljOgogICAg
IAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUu
Z2V0KCk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVy
biBtX2NoYWluLmdldCgpOyB9Ci0gICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hhaW5Db3VudDsgfQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQogICAgIAog
ICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewpAQCAtOTEsOSAr
OTAsOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCiAgICAg
QWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OwogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRp
dGlvblNldDsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNj
ZXNzOjpmcm9tU3RydWN0dQogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKICAg
ICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1
cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAg
ICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LmNoYWluKTsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigKKyAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0
QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJv
dXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApA
QCAtNjQsNiArNjUsOSBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1
CiAKIGJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBSZXBsYWNlOgogICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJl
LmdldCgpKSkKQEAgLTc0LDE1ICs3OCwxMSBAQCBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2Vh
ayhSZXBhdGNoQnVmCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghSGVh
cDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldHRlcjoKICAg
ICBjYXNlIEN1c3RvbVNldHRlcjoKICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0
cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICht
X2NoYWluICYmICFIZWFwOjppc01hcmtlZChtX2NoYWluLmdldCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTg3
NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVk
ZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNp
bmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCkBAIC01Myw3
ICs1NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBt
X3R5cGUoSW52YWxpZCkKLSAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAgICAgewog
ICAgIH0KICAgICAKQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEpTQ2VsbCog
b3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgICAg
ICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAg
IFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlv
bjsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0cnVj
dHVyZSk7CiAgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdT
dHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7
CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICAgICAg
cmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUg
PSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk1LDggKzk1LDcgQEAg
cHVibGljOgogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sCi0gICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgICAgIFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFzc1JlZlB0
cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTA0LDEwICsxMDMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikgewotICAgICAgICAgICAg
cmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwotICAgICAgICAgICAgcmVzdWx0
Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291bnQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmVzdWx0Lm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0
ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJv
dXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDYsMTcgKzE0Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
VHJhbnNpdGlvbigpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVy
biBtX2NoYWluLmdldCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwot
ICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OwotICAgIH0KKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRp
b25TZXQ7IH0KICAgICAKICAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAog
ICAgIHsKQEAgLTE3OCw4ICsxNjQsNyBAQCBwcml2YXRlOgogICAgIEFjY2Vzc1R5cGUgbV90eXBl
OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5
Q29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKwordm9pZCBQcm9wZXJ0eUNvbmRp
dGlvbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGludmFs
aWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KG1fa2lu
ZCwgIiBvZiAiLCBtX3VpZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFByZXNl
bmNlOgorICAgICAgICBvdXQucHJpbnQoIiBhdCAiLCBvZmZzZXQoKSwgIiB3aXRoIGF0dHJpYnV0
ZXMgIiwgYXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzZW5jZToK
KyAgICBjYXNlIEFic2VuY2VPZlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCIgd2l0aCBwcm90
b3R5cGUgIiwgaW5Db250ZXh0KEpTVmFsdWUocHJvdG90eXBlKCkpLCBjb250ZXh0KSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQoIiB3
aXRoICIsIGluQ29udGV4dChyZXF1aXJlZFZhbHVlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
ZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9u
Ojppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKHZlcmJv
c2UpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJEZXRlcm1pbmluZyB2YWxpZGl0
eSBvZiAiLCAqdGhpcywgIiB3aXRoIHN0cnVjdHVyZSAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUp
LCAiIGFuZCBiYXNlICIsCisgICAgICAgICAgICBKU1ZhbHVlKGJhc2UpLCAiIGFzc3VtaW5nIGlt
cHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50cyBhcmUgc2V0LlxuIik7CisgICAgfQorICAgIAorICAg
IGlmICghKnRoaXMpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
KCJJbnZhbGlkIGJlY2F1c2UgdW5zZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiSW52YWxp
ZCBiZWNhdXNlIGFjY2Vzc2VzIGFyZSBub3QgY2FjaGVhYmxlLlxuIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFBy
ZXNlbmNlOiB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBjdXJyZW50T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKCksIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgIT0g
b2Zmc2V0KCkgfHwgY3VycmVudEF0dHJpYnV0ZXMgIT0gYXR0cmlidXRlcygpKSB7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAg
ICAgICAgICAgICJJbnZhbGlkIGJlY2F1c2Ugd2UgbmVlZCBvZmZzZXQsIGF0dHJpYnV0ZXMgdG8g
YmUgIiwgb2Zmc2V0KCksICIsICIsIGF0dHJpYnV0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAg
IiBidXQgdGhleSBhcmUgIiwgY3VycmVudE9mZnNldCwgIiwgIiwgY3VycmVudEF0dHJpYnV0ZXMs
ICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBYnNl
bmNlOiB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1
c2UgaXQncyBhIGRpY3Rpb25hcnkuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9
IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSB0aGUgcHJvcGVydHkgZXhpc3RzIGF0IG9mZnNl
dDogIiwgY3VycmVudE9mZnNldCwgIlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZU9iamVjdCgpICE9IHByb3RvdHlwZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJl
Y2F1c2UgdGhlIHByb3RvdHlwZSBpcyAiLCBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCAi
IGV2ZW4gdGhvdWdoICIKKyAgICAgICAgICAgICAgICAgICAgIml0IHNob3VsZCBoYXZlIGJlZW4g
IiwgSlNWYWx1ZShwcm90b3R5cGUoKSksICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6IHsKKyAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSBpdCdzIGEgZGljdGlvbmFy
eS5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgY3VycmVudE9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCgpLCBjdXJy
ZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ICE9IGludmFsaWRPZmZz
ZXQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50QXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IEN1
c3RvbUFjY2Vzc29yKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBi
ZWNhdXNlIHdlIGV4cGVjdGVkIG5vdCB0byBoYXZlIGEgc2V0dGVyLCBidXQgd2UgaGF2ZSBvbmUg
YXQgb2Zmc2V0ICIsCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0LCAiIHdp
dGggYXR0cmlidXRlcyAiLCBjdXJyZW50QXR0cmlidXRlcywgIlxuIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlT2Jq
ZWN0KCkgIT0gcHJvdG90eXBlKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAg
ICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgYmVjYXVz
ZSB0aGUgcHJvdG90eXBlIGlzICIsIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksICIgZXZl
biB0aG91Z2ggIgorICAgICAgICAgICAgICAgICAgICAiaXQgc2hvdWxkIGhhdmUgYmVlbiAiLCBK
U1ZhbHVlKHByb3RvdHlwZSgpKSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoIWJh
c2UgfHwgYmFzZS0+c3RydWN0dXJlKCkgIT0gc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBD
b25zZXJ2YXRpdmVseSByZXR1cm4gZmFsc2UsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgdGhpcyBv
bmUgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAg
ICAgICAgICJJbnZhbGlkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIGJhc2Ugb3IgdGhlIGJhc2Ug
aGFzIHRoZSB3cm9uZyBzdHJ1Y3R1cmU6ICIsCisgICAgICAgICAgICAgICAgICAgIFJhd1BvaW50
ZXIoYmFzZSksICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hh
dCByYWN5LCBhbmQgbWF5YmUgbW9yZSByaXNreSB0aGFuIHdlIHdhbnQuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKKyAgICAgICAgCisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IGN1cnJlbnRPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSh1aWQoKSk7CisgICAgICAgIEpTVmFsdWUgY3VycmVudFZhbHVlID0gYmFzZS0+Z2V0
RGlyZWN0KGN1cnJlbnRPZmZzZXQpOworICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IHJlcXVp
cmVkVmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBiZWNhdXNlIHRoZSB2YWx1
ZSBpcyAiLCBjdXJyZW50VmFsdWUsICIgYnV0IHdlIHJlcXVpcmUgIiwgcmVxdWlyZWRWYWx1ZSgp
LAorICAgICAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWly
ZXNJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7
CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgY2FzZSBQcmVzZW5jZToKKyAgICBjYXNlIEFic2VuY2U6CisgICAg
Y2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgaWYgKCFpc1N0aWxs
VmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQg
YW4gaW1wdXJlIHByb3BlcnR5IGNhbiBjYXVzZSBhIHByb3BlcnR5IHRvIGFwcGVhciwgYW5kIGNh
biBhbHNvCisgICAgLy8gInNoYWRvdyIgYW4gZXhpc3RpbmcgSlMgcHJvcGVydHkgb24gdGhlIHNh
bWUgb2JqZWN0LiBIZW5jZSBpdCBhZmZlY3RzIGJvdGggcHJlc2VuY2UgYW5kCisgICAgLy8gYWJz
ZW5jZS4gSXQgZG9lc24ndCBhZmZlY3QgQWJzZW5jZU9mU2V0dGVyIGJlY2F1c2UgaW1wdXJlIHBy
b3BlcnRpZXMgYXJlbid0IGV2ZXIgc2V0dGVycy4KKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
IGNhc2UgUHJlc2VuY2U6CisgICAgY2FzZSBBYnNlbmNlOgorICAgIGNhc2UgRXF1aXZhbGVuY2U6
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVy
dHlTbG90KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQoCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0Cit7
CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9raW5k
KSB7CisgICAgY2FzZSBFcXVpdmFsZW5jZTogeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQoKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBzb21lIHZhcmlhbnQg
b2YgaXNWYWxpZCByZXR1cm5lZCB0cnVlLCB3aGljaAorICAgICAgICAvLyBpbXBsaWVzIHRoYXQg
d2UgYWxyZWFkeSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9w
ZXJ0eS4gV2Ugc2hvdWxkCisgICAgICAgIC8vIGFsc28gaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZSBT
dHJ1Y3R1cmUgaXMgYSBjYWNoZWFibGUgZGljdGlvbmFyeSwgd2hpY2ggbWVhbnMgd2UKKyAgICAg
ICAgLy8gc2hvdWxkbid0IGhhdmUgYSBUT0NUT1UgcmFjZSBlaXRoZXIuCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIFdh
dGNocG9pbnRTZXQqIHNldDsKKyAgICAgICAgc3dpdGNoIChlZmZvcnQpIHsKKyAgICAgICAgY2Fz
ZSBNYWtlTm9DaGFuZ2VzOgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJl
cGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRW5zdXJlV2F0Y2hhYmlsaXR5OgorICAgICAgICAgICAgc2V0ID0gc3RydWN0dXJl
LT5lbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCgKKyAgICAgICAgICAgICAg
ICAqSGVhcDo6aGVhcChzdHJ1Y3R1cmUpLT52bSgpLCBvZmZzZXQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghc2V0IHx8ICFzZXQtPmlzU3Rp
bGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246
OmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0
KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZh
bGlkKHN0cnVjdHVyZSwgZWZmb3J0KTsKK30KKworYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNX
YXRjaGFibGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBiYXNlLCBXYXRj
aGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAoreworICAgIHJldHVybiBpc1N0aWxsVmFsaWQo
c3RydWN0dXJlLCBiYXNlKQorICAgICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1
cmUsIGVmZm9ydCk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxMaXZlKCkg
Y29uc3QKK3sKKyAgICBpZiAoaGFzUHJvdG90eXBlKCkgJiYgcHJvdG90eXBlKCkgJiYgIUhlYXA6
OmlzTWFya2VkKHByb3RvdHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IGlmIChoYXNSZXF1aXJlZFZhbHVlKCkKKyAgICAgICAgJiYgcmVxdWlyZWRWYWx1ZSgpCisgICAg
ICAgICYmIHJlcXVpcmVkVmFsdWUoKS5pc0NlbGwoKQorICAgICAgICAmJiAhSGVhcDo6aXNNYXJr
ZWQocmVxdWlyZWRWYWx1ZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGF0
ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWQpIGNvbnN0Cit7Cisg
ICAgaWYgKGhhc1Byb3RvdHlwZSgpKQorICAgICAgICB0cmFja2VkLmNoZWNrKHByb3RvdHlwZSgp
KTsKKyAgICAKKyAgICBpZiAoaGFzUmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICB0cmFja2VkLmNo
ZWNrKHJlcXVpcmVkVmFsdWUoKSk7Cit9CisKK2Jvb2wgUHJvcGVydHlDb25kaXRpb246OmlzVmFs
aWRWYWx1ZUZvckF0dHJpYnV0ZXMoSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykK
K3sKKyAgICBib29sIGF0dHJpYnV0ZXNDbGFpbUFjY2Vzc29yID0gISEoYXR0cmlidXRlcyAmIEFj
Y2Vzc29yKTsKKyAgICBib29sIHZhbHVlQ2xhaW1zQWNjZXNzb3IgPSAhIWpzRHluYW1pY0Nhc3Q8
R2V0dGVyU2V0dGVyKj4odmFsdWUpOworICAgIHJldHVybiBhdHRyaWJ1dGVzQ2xhaW1BY2Nlc3Nv
ciA9PSB2YWx1ZUNsYWltc0FjY2Vzc29yOworfQorCitib29sIFByb3BlcnR5Q29uZGl0aW9uOjpp
c1ZhbGlkVmFsdWVGb3JQcmVzZW5jZShKU1ZhbHVlIHZhbHVlKSBjb25zdAoreworICAgIHJldHVy
biBpc1ZhbGlkVmFsdWVGb3JBdHRyaWJ1dGVzKHZhbHVlLCBhdHRyaWJ1dGVzKCkpOworfQorCitQ
cm9wZXJ0eUNvbmRpdGlvbiBQcm9wZXJ0eUNvbmRpdGlvbjo6YXR0ZW1wdFRvTWFrZUVxdWl2YWxl
bmNlV2l0aG91dEJhcnJpZXIoSlNPYmplY3QqIGJhc2UpIGNvbnN0Cit7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAoIXN0cnVjdHVyZS0+aXNW
YWxpZE9mZnNldChvZmZzZXQoKSkpCisgICAgICAgIHJldHVybiBQcm9wZXJ0eUNvbmRpdGlvbigp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBiYXNlLT5nZXREaXJlY3Qob2Zmc2V0KCkpOworICAgIGlm
ICghaXNWYWxpZFZhbHVlRm9yUHJlc2VuY2UodmFsdWUpKQorICAgICAgICByZXR1cm4gUHJvcGVy
dHlDb25kaXRpb24oKTsKKyAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcih1aWQo
KSwgdmFsdWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlByb3BlcnR5Q29uZGl0
aW9uOjpLaW5kIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgIGNh
c2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6CisgICAgICAgIG91dC5wcmludCgi
UHJlc2VuY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbjo6QWJzZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246OkFic2VuY2VPZlNldHRlcjoK
KyAgICAgICAgb3V0LnByaW50KCJBYnNlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEpTQzo6UHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQo
IkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRp
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvcGVydHlDb25kaXRpb25f
aAorI2RlZmluZSBQcm9wZXJ0eUNvbmRpdGlvbl9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFj
a2VkUmVmZXJlbmNlczsKKworY2xhc3MgUHJvcGVydHlDb25kaXRpb24geworcHVibGljOgorICAg
IGVudW0gS2luZCB7CisgICAgICAgIFByZXNlbmNlLAorICAgICAgICBBYnNlbmNlLAorICAgICAg
ICBBYnNlbmNlT2ZTZXR0ZXIsCisgICAgICAgIEVxdWl2YWxlbmNlIC8vIEFuIGFkYXB0aXZlIHdh
dGNocG9pbnQgb24gdGhpcyB3aWxsIGJlIGEgcGFpciBvZiB3YXRjaHBvaW50cywgYW5kIHdoZW4g
dGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9ucywgd2Ugd2lsbCBzZXQgdGhlIHJlcGxhY2VtZW50IHdh
dGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1Y3R1cmUuCisgICAgfTsKKyAgICAKKyAgICBQcm9wZXJ0
eUNvbmRpdGlvbigpCisgICAgICAgIDogbV91aWQobnVsbHB0cikKKyAgICAgICAgLCBtX2tpbmQo
UHJlc2VuY2UpCisgICAgeworICAgICAgICBtZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CisgICAg
fQorICAgIAorICAgIFByb3BlcnR5Q29uZGl0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgICAgICAsIG1fa2luZChBYnNlbmNl
KQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2VXaXRob3V0QmFycmllcihVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZXNlbmNlOwor
ICAgICAgICByZXN1bHQudS5wcmVzZW5jZS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJlc3Vs
dC51LnByZXNlbmNlLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gcHJlc2VuY2Uo
CisgICAgICAgIFZNJiwgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHByZXNlbmNlV2l0aG91dEJhcnJpZXIodWlkLCBvZmZzZXQsIGF0dHJpYnV0ZXMpOworICAgIH0K
KworICAgIC8vIE5PVEU6IFRoZSBwcm90b3R5cGUgaXMgdGhlIHN0b3JlZFByb3RvdHlwZSBub3Qg
dGhlIHByb3RvdHlwZUZvckxvb2t1cC4KKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJz
ZW5jZVdpdGhvdXRCYXJyaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90
b3R5cGUpCisgICAgeworICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX3VpZCA9IHVpZDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFic2VuY2U7Cisg
ICAgICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24g
YWJzZW5jZSgKKyAgICAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgaWYgKG93bmVyKQor
ICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICByZXR1cm4g
YWJzZW5jZVdpdGhvdXRCYXJyaWVyKHVpZCwgcHJvdG90eXBlKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGFic2VuY2VPZlNldHRlcldpdGhvdXRCYXJyaWVyKAor
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU09iamVjdCogcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV91
aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBYnNlbmNlT2ZTZXR0ZXI7CisgICAg
ICAgIHJlc3VsdC51LmFic2VuY2UucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gYWJz
ZW5jZU9mU2V0dGVyKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgeworICAgICAgICBpZiAob3du
ZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAgIHJl
dHVybiBhYnNlbmNlT2ZTZXR0ZXJXaXRob3V0QmFycmllcih1aWQsIHByb3RvdHlwZSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBlcXVpdmFsZW5jZVdpdGhvdXRC
YXJyaWVyKAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQu
bV91aWQgPSB1aWQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFcXVpdmFsZW5jZTsKKyAgICAg
ICAgcmVzdWx0LnUuZXF1aXZhbGVuY2UudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAgc3RhdGljIFByb3Bl
cnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlKAorICAgICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNDZWxsKCkgJiYgb3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvd25lcik7CisgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKHVp
ZCwgdmFsdWUpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV91aWQgJiYgbV9raW5kID09IFByZXNlbmNlOyB9OworICAgIAorICAgIEtpbmQg
a2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorICAgIGJvb2wgaGFzT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJlc2VuY2U7IH07CisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNPZmZz
ZXQoKSk7CisgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldDsKKyAgICB9CisgICAgYm9v
bCBoYXNBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gUHJl
c2VuY2U7IH07CisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaGFzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIHUucHJlc2VuY2UuYXR0
cmlidXRlczsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNQcm90b3R5cGUoKSBjb25zdCB7IHJl
dHVybiAhISp0aGlzICYmIChtX2tpbmQgPT0gQWJzZW5jZSB8fCBtX2tpbmQgPT0gQWJzZW5jZU9m
U2V0dGVyKTsgfQorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc1Byb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuYWJzZW5jZS5wcm90
b3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVxdWlyZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICEhKnRoaXMgJiYgbV9raW5kID09IEVxdWl2YWxlbmNlOyB9CisgICAgSlNWYWx1ZSBy
ZXF1aXJlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNSZXF1aXJlZFZh
bHVlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuZXF1aXZhbGVuY2UudmFs
dWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91aWQpICsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgICAgIGNhc2UgUHJlc2VuY2U6CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5j
ZS5vZmZzZXQ7CisgICAgICAgICAgICByZXN1bHQgKz0gdS5wcmVzZW5jZS5hdHRyaWJ1dGVzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAgICAgICAgY2FzZSBB
YnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTT2Jq
ZWN0Kj46Omhhc2godS5hYnNlbmNlLnByb3RvdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBFbmNvZGVkSlNW
YWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlDb25kaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fdWlkICE9IG90aGVyLm1fdWlkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBQcmVz
ZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LnByZXNlbmNlLm9mZnNldCA9PSBvdGhlci51LnBy
ZXNlbmNlLm9mZnNldAorICAgICAgICAgICAgICAgICYmIHUucHJlc2VuY2UuYXR0cmlidXRlcyA9
PSBvdGhlci51LnByZXNlbmNlLmF0dHJpYnV0ZXM7CisgICAgICAgIGNhc2UgQWJzZW5jZToKKyAg
ICAgICAgY2FzZSBBYnNlbmNlT2ZTZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdS5hYnNlbmNl
LnByb3RvdHlwZSA9PSBvdGhlci51LmFic2VuY2UucHJvdG90eXBlOworICAgICAgICBjYXNlIEVx
dWl2YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWUgPT0gb3Ro
ZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICFtX3VpZCAmJiBtX2tpbmQgPT0gQWJzZW5jZTsKKyAgICB9CisgICAgCisgICAgLy8gVHdv
IGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG9yIGlmIHRo
ZXkgc3BlYWsgb2YgZGlmZmVyZW50IHVpZHMuIElmCisgICAgLy8gZmFsc2UgaXMgcmV0dXJuZWQs
IHlvdSBoYXZlIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgLSBmb3IgZXhh
bXBsZSBpZiB0aGVyZSBpcworICAgIC8vIGEgUHJlc2VuY2UgYW5kIGFuIEVxdWl2YWxlbmNlIHRo
ZW4gaW4gc29tZSBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBnZW5lcmFsIG9mIHRoZSB0d28K
KyAgICAvLyB3aGlsZSBpbiBvdGhlciBjYXNlcyB5b3UnbGwgd2FudCB0aGUgbW9yZSBzcGVjaWZp
YyBvZiB0aGUgdHdvLiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UKKyAgICAvLyBmb3IgY29u
dHJhZGljdGlvbnMsIGxpa2UgUHJlc2VuY2UgYW5kIEFic2VuY2Ugb24gdGhlIHNhbWUgdWlkLiBC
eSBjb252ZW50aW9uLCBpbnZhbGlkCisgICAgLy8gY29uZGl0aW9ucyBhcmVuJ3QgY29tcGF0aWJs
ZSB3aXRoIGFueXRoaW5nLgorICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aChjb25zdCBQcm9wZXJ0
eUNvbmRpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzIHx8ICFv
dGhlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzID09
IG90aGVyIHx8IHVpZCgpICE9IG90aGVyLnVpZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBDaGVj
a3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29u
J3QgYmUgaW50ZXJjZXB0ZWQuCisgICAgYm9vbCBpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIpIGNv
bnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9w
ZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCisgICAgLy8gaXNTdGls
bFZhbGlkQWNjb3JkaW5nVG9TdHJ1Y3R1cmUoKSByZXR1cm5lZCB0cnVlLgorICAgIGJvb2wgdmFs
aWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqKSBjb25zdDsK
KyAgICAKKyAgICAvLyBDaGVja3MgaWYgdGhlIGNvbmRpdGlvbiBpcyBzdGlsbCB2YWxpZCByaWdo
dCBub3cgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIHN0cnVjdHVyZS4KKyAgICAvLyBNYXkgY29u
c2VydmF0aXZlbHkgcmV0dXJuIGZhbHNlLCBpZiB0aGUgb2JqZWN0IGFuZCBzdHJ1Y3R1cmUgYWxv
bmUgZG9uJ3QgZ3VhcmFudGVlIHRoZQorICAgIC8vIGNvbmRpdGlvbi4gVGhpcyBoYXBwZW5zIGZv
ciBhbiBBYnNlbmNlIGNvbmRpdGlvbiBvbiBhbiBvYmplY3QgdGhhdCBtYXkgaGF2ZSBpbXB1cmUK
KyAgICAvLyBwcm9wZXJ0aWVzLiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBzdXBwbGllZCwgdGhlbiBh
ICJ0cnVlIiByZXR1cm4gaW5kaWNhdGVzIHRoYXQgY2hlY2tpbmcgaWYKKyAgICAvLyBhbiBvYmpl
Y3QgaGFzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgZ3VhcmFudGVlcyB0aGUgY29uZGl0aW9uIHN0aWxs
IGhvbGRzLiBJZiBhbiBvYmplY3QgaXMKKyAgICAvLyBzdXBwbGllZCwgdGhlbiB5b3UgbWF5IG5l
ZWQgdG8gdXNlIHNvbWUgb3RoZXIgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdCB0byBndWFyYW50
ZWUgdGhlCisgICAgLy8gY29uZGl0aW9uIGluIGFkZGl0aW9uIHRvIHRoZSBzdHJ1Y3R1cmUgY2hl
Y2suCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBu
dWxscHRyKSBjb25zdDsKKyAgICAKKyAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgY29uZGl0aW9u
IGlzIG5vdCB3YXRjaGFibGUsIGJ1dCBjb3VsZCBiZSBtYWRlIHdhdGNoYWJsZSBieSBlbmFibGlu
ZyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSB3YXRjaHBvaW50LiBGb3IgZXhhbXBsZSwgcmVwbGFj
ZW1lbnQgd2F0Y2hwb2ludHMgYXJlIGVuYWJsZWQgb25seSB3aGVuIHNvbWUKKyAgICAvLyBhY2Nl
c3MgaXMgY2FjaGVkIG9uIHRoZSBwcm9wZXJ0eSBpbiBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBt
YWlubHkgdG8gc2F2ZSBzcGFjZSBmb3IKKyAgICAvLyBkaWN0aW9uYXJ5IHByb3BlcnRpZXMgb3Ig
cHJvcGVydGllcyB0aGF0IG5ldmVyIGdldCB2ZXJ5IGhvdC4gQnV0LCBpdCdzIGFsd2F5cyBzYWZl
IHRvCisgICAgLy8gZW5hYmxlIHdhdGNoaW5nLCBwcm92aWRlZCB0aGF0IHRoaXMgaXMgY2FsbGVk
IGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGVudW0gV2F0Y2hhYmlsaXR5RWZmb3J0IHsKKyAg
ICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBjaGFu
Z2UgdGhlIHN0YXRlIG9mIGFueSBTdHJ1Y3R1cmUgb3IKKyAgICAgICAgLy8gb2JqZWN0LCBhbmQg
aW1wbGllcyB0aGF0IGlmIHRoZSBwcm9wZXJ0eSBoYXBwZW5zIG5vdCB0byBiZSB3YXRjaGFibGUg
dGhlbiB3ZSBkb24ndCBtYWtlCisgICAgICAgIC8vIGl0IHdhdGNoYWJsZS4gVGhpcyBpcyBtYW5k
YXRvcnkgaWYgY2FsbGluZyBmcm9tIGEgSklUIHRocmVhZC4gVGhpcyBpcyBhbHNvIHNvbWV3aGF0
CisgICAgICAgIC8vIHByZWZlcmFibGUgd2hlbiBmaXJzdCBkZWNpZGluZyB3aGV0aGVyIHRvIHdh
dGNoIGEgY29uZGl0aW9uIGZvciB0aGUgZmlyc3QgdGltZSAoaS5lLgorICAgICAgICAvLyBub3Qg
ZnJvbSBhIHdhdGNocG9pbnQgZmlyZSB0aGF0IGNhdXNlcyB1cyB0byBzZWUgaWYgd2Ugc2hvdWxk
IGFkYXB0KSwgc2luY2UgYQorICAgICAgICAvLyB3YXRjaHBvaW50IG5vdCBiZWluZyBpbml0aWFs
aXplZCBmb3Igd2F0Y2hpbmcgaW1wbGllcyB0aGF0IG1heWJlIHdlIGRvbid0IGtub3cgZW5vdWdo
CisgICAgICAgIC8vIHlldCB0byBtYWtlIGl0IHByb2ZpdGFibGUgdG8gd2F0Y2ggLS0gYXMgaW4s
IHRoZSB0aGluZyBiZWluZyB3YXRjaGVkIG1heSBub3QgaGF2ZQorICAgICAgICAvLyBzdGFiaWxp
emVkIHlldC4gV2UgcHJlZmVyIHRvIG9ubHkgYXNzdW1lIHRoYXQgYSBjb25kaXRpb24gd2lsbCBo
b2xkIGlmIGl0IGhhcyBiZWVuCisgICAgICAgIC8vIGtub3duIHRvIGhvbGQgZm9yIGEgd2hpbGUg
YWxyZWFkeS4KKyAgICAgICAgTWFrZU5vQ2hhbmdlcywKKyAgICAgICAgCisgICAgICAgIC8vIERv
IHdoYXQgaXQgdGFrZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlcnR5IGNhbiBiZSB3YXRjaGVk
LCBpZiBkb2luZyBzbyBoYXMgbm8KKyAgICAgICAgLy8gdXNlci1vYnNlcnZhYmxlIGVmZmVjdC4g
Rm9yIG5vdyB0aGlzIGp1c3QgbWVhbnMgdGhhdCB3ZSB3aWxsIGVuc3VyZSB0aGF0IGEgcHJvcGVy
dHkKKyAgICAgICAgLy8gcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBlbmFibGVkIGlmIGl0IGhh
ZG4ndCBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gRG8gbm90IHVzZSB0aGlzCisgICAgICAgIC8vIGZy
b20gSklUIHRocmVhZHMsIHNpbmNlIHRoZSBhY3Qgb2YgZW5hYmxpbmcgd2F0Y2hwb2ludHMgaXMg
bm90IHRocmVhZC1zYWZlLgorICAgICAgICBFbnN1cmVXYXRjaGFiaWxpdHkKKyAgICB9OworICAg
IAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBl
bmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCisgICAgLy8gd2F0Y2hwb2lu
dCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hw
b2ludC4KKyAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoCisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwgV2F0Y2hh
YmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkg
Ynkgc2V0dGluZyBhIHRyYW5zaXRpb24KKyAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgYm9vbCBpc1dhdGNoYWJsZSgKKyAgICAgICAgU3RydWN0dXJlKiwgSlNPYmplY3Qq
IGJhc2UgPSBudWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2VzKSBjb25z
dDsKKyAgICAKKyAgICBib29sIHdhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBDdXJyZW50bHksIHRoaXMgaXMgcmVx
dWlyZWQgZm9yIGFsbCBvZiBvdXIgY29uZGl0aW9ucy4KKyAgICAgICAgcmV0dXJuICEhKnRoaXM7
CisgICAgfQorICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyAmJiBtX2tpbmQgPT0gRXF1aXZh
bGVuY2U7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0cyBp
bnZvbHZlZCBpbiB0aGlzIGFyZSBzdGlsbCBsaXZlLgorICAgIGJvb2wgaXNTdGlsbExpdmUoKSBj
b25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVm
ZXJlbmNlcyYpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZhbHVlRm9yQXR0cmli
dXRlcyhKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKworICAgIGJvb2wgaXNW
YWxpZFZhbHVlRm9yUHJlc2VuY2UoSlNWYWx1ZSkgY29uc3Q7CisKKyAgICBQcm9wZXJ0eUNvbmRp
dGlvbiBhdHRlbXB0VG9NYWtlRXF1aXZhbGVuY2VXaXRob3V0QmFycmllcihKU09iamVjdCogYmFz
ZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1dhdGNoYWJsZVdoZW5WYWxpZChTdHJ1
Y3R1cmUqLCBXYXRjaGFiaWxpdHlFZmZvcnQpIGNvbnN0OworCisgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIG1fdWlkOworICAgIEtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0
IHsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIH0gcHJlc2VuY2U7CisgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlOworICAgICAgICB9IGFic2VuY2U7CisgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAg
fSBlcXVpdmFsZW5jZTsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlDb25kaXRpb25I
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYg
a2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoCisgICAg
ICAgIGNvbnN0IFByb3BlcnR5Q29uZGl0aW9uJiBhLCBjb25zdCBQcm9wZXJ0eUNvbmRpdGlvbiYg
YikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCk7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPEpTQzo6UHJvcGVydHlDb25kaXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6UHJvcGVydHlD
b25kaXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbj4geyB9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFByb3BlcnR5Q29uZGl0aW9uX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDE5ICs5
MCwyMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAg
IHx8IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5
X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lKSk7CiAgICAgCiAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdl
dCgpOwotICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChjaGFpbik7CiAgICAg
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCi0gICAgUmVmUHRyPEludGVuZGVk
U3RydWN0dXJlQ2hhaW4+IGludGVuZGVkQ2hhaW47Ci0gICAgaWYgKGNoYWluKQotICAgICAgICBp
bnRlbmRlZENoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmls
ZWRCbG9jaywgc3RydWN0dXJlLCBjaGFpbikpOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJ
bnQ6OmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwpCisgICAgICAgIHx8
IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUob3BfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lKSkgeworICAgICAgICBjb25kaXRpb25TZXQg
PQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29u
Y3VycmVudGx5KAorICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBwcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhO
b0luZm9ybWF0aW9uKTsKKyAgICB9CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBpbnRlbmRlZENoYWluLmdldCgpLCBv
ZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogfQogCiBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHVi
SW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKQpAQCAtMTY1LDE2ICsxNjgsMTQgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yUwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKICAgICAgICAgICAg
IHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAg
IFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICAgICAgICAgIGlmIChz
dHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbikgewotICAgICAgICAgICAgICAgIGNo
YWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCi0gICAgICAgICAgICAg
ICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZp
b3VzU3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRC
eUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51
LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAg
ICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAg
ICAgICAgICAgY2hhaW4uZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTIxOSwxNSArMjIwLDExIEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEludGVuZGVk
U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3MuY2hhaW4o
KSkgewotICAgICAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYWNj
ZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4oKSkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNoYWluLT5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUp
OwogICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
LSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3Ry
dWN0dXJlKCksIGNoYWluLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nl
c3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIApAQCAtMjM1LDcgKzIzMiw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vz
cy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDb21wbGV4
R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9y
KAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGFjY2Vzcy5j
aGFpbigpLCBhY2Nlc3MuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMjUzLDcg
KzI1MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+
bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNl
dCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCisgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29u
ZGl0aW9uU2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6Om1vdmUoY2FsbExpbmtT
dGF0dXMpKTsKICAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTM2OCwyMiArMzY1LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAotICAgICAg
ICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICAgICAgaWYgKCFpc0RpcmVjdCkg
ewotICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElm
IHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMs
IHRoZW4gZ2l2ZSB1cC4KLSAgICAgICAgICAgIGlmIChjaGFpbi0+bWF5SW50ZXJjZXB0U3RvcmVU
byh1aWQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFz
bid0IGJlZW4gbm9ybWFsaXplZCAoaS5lLiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJp
ZXMpCi0gICAgICAgICAgICAvLyB0aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9uYXJ5IGNhc2Ugd291
bGQgb25seSBoYXBwZW4gaWYgdGhpcyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVuCi0gICAgICAgICAg
ICAvLyB1c2VkIGluIGFuIG9wdGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxs
eSB0aGUgb25seSByZWFzb24gd2h5IHdlIHdvdWxkCi0gICAgICAgICAgICAvLyBiYWlsIGhlcmUg
aXMgdGhhdCBJIGRvbid0IHJlYWxseSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBvcHRpbWl6aW5nIEpJ
VCBnbyBhbmQgZmxhdHRlbgotICAgICAgICAgICAgLy8gZGljdGlvbmFyaWVzIGlmIHdlIGhhdmUg
ZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IHRob3NlIG9iamVjdHMgd2VyZSBuZXZlciB1c2VkIGFz
Ci0gICAgICAgICAgICAvLyBwcm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nl
c3MgLSBpLmUuIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKLSAgICAgICAgICAg
IC8vIHRoZSBvdGhlciBjaGVja3MgYmVsb3cgd2lsbCBmYWlsLgotICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aXNQcm94eSgpIHx8ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkpCisgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3ND
b25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICAgICAgfQogICAgIApAQCAtMzk0LDcgKzM4MCw3IEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZh
cmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUs
IHRyYW5zaXRpb24sIGNoYWluLmdldCgpLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRW
YXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQpKTsKICAgICAgICAgaWYgKCFkaWRBcHBlbmQpCiAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4NzYw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDcgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJp
YW50OjpvcGVyYXRvcgogICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKICAgICBtX29sZFN0cnVj
dHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOwogICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIu
bV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRD
aGVja3M7Ci0gICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAg
IG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBv
dGhlci5tX29mZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAg
bV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTY0LDI5ICs2MywyNiBAQCBQdXRCeUlkVmFyaWFudCBQ
dXRCeUlkVmFyaWFudDo6cmVwbGFjZShjCiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50
Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBz
dHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
IHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5z
aXRpb247CiAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwogICAgIHJl
c3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICBpZiAoc3RydWN0dXJlQ2hh
aW4pCi0gICAgICAgIHN0cnVjdHVyZUNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3Rh
bnRDaGVja3MpOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHV0
QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzKQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykK
IHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRl
cjsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKGNoYWlu
KSB7Ci0gICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3Mp
OwotICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90
eXBlKCk7Ci0gICAgfQorICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsK
ICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0
dXMgPSBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0x
MzQsMTggKzEzMCw2IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAog
ICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCi1TdHJ1Y3R1cmVTZXQgUHV0QnlJZFZh
cmlhbnQ6OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAotewotICAgIEFTU0VSVChraW5kKCkgPT0gU2V0
dGVyKTsKLSAgICAKLSAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKLSAgICAgICAgcmV0dXJuIHN0
cnVjdHVyZSgpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9y
KG1fY29uc3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
c3RydWN0dXJlKTsKLSAgICByZXR1cm4gc3RydWN0dXJlOwotfQotCiBib29sIFB1dEJ5SWRWYXJp
YW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAg
aWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQpAQCAtMTU1LDggKzEzOSw4IEBAIGJvb2wg
UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICBjYXNlIFJlcGxhY2U6CiAg
ICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAgICAgICAgIGNhc2UgUmVwbGFjZTogewot
ICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRDaGVja3MuaXNFbXB0eSgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChvdGhlci5tX2NvbnN0YW50Q2hlY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAg
ICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChv
dGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTE5Niw2ICsxODAsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZVRyYW5zCiAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZz
ZXQpOwogICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwogICAgIEFTU0VS
VCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29u
ZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKICAgICAKICAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2lu
ZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBu
ZXcgZmllbGQgd2hpY2gKICAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0
aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0CkBA
IC0yMzIsMTUgKzIxNywxMyBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFBy
aW50CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5D
b250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9p
bnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAg
ICAgICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSwg
b2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25k
aXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6CiAgICAgICAgIG91dC5wcmlu
dCgKICAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRl
eHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0KGNvbnN0YW50Q2hlY2tz
KCksIGNvbnRleHQpLCAiXSIpOwotICAgICAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQotICAgICAg
ICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZSht
X2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25k
aXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0g
IiwgbV9vZmZzZXQpOwogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5r
U3RhdHVzKTsKICAgICAgICAgb3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg3NjA1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUHV0QnlJZFZhcmlhbnRfaAogI2RlZmlu
ZSBQdXRCeUlkVmFyaWFudF9oCiAKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgi
CisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9w
ZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCkBAIC00Niw3ICs0Niw2
IEBAIHB1YmxpYzoKICAgICBQdXRCeUlkVmFyaWFudCgpCiAgICAgICAgIDogbV9raW5kKE5vdFNl
dCkKICAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQotICAgICAgICAsIG1fYWx0ZXJu
YXRlQmFzZShudWxscHRyKQogICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAg
ewogICAgIH0KQEAgLTU0LDE2ICs1MywxNSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNv
bnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFj
ZSgKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCk7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0
dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFu
dCB0cmFuc2l0aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAK
ICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgICAgICBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBj
YWxsTGlua1N0YXR1cyk7CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQogICAgIApAQCAtNzYsNiArNzQsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CiAgICAgfQogICAgIAorICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmUoKTsKKyAgICB9CisgICAgCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUo
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtp
bmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAtMTAwLDEwICsxMDMsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKICAgICBib29s
IG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKLSAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNo
ZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9jb25zdGFudENoZWNrczsKLSAgICB9CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CiAg
ICAgCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKICAgICB7CkBAIC0xMTEsMTQg
KzExMSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgIH0KICAgICAK
LSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2FsdGVybmF0ZUJhc2U7Ci0g
ICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7Ci0gICAg
CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKQEAgLTEzNiw4ICsxMjgsNyBAQCBwcml2YXRl
OgogICAgIEtpbmQgbV9raW5kOwogICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKICAg
ICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwotICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tW
ZWN0b3IgbV9jb25zdGFudENoZWNrczsKLSAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOwor
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3Bl
cnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
bV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3
LDMzICszNyw0NiBAQCBuYW1lc3BhY2UgSlNDIHsKIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQ6On5TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KCkgeyB9CiAKIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6
OnB1c2goCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwKICAgICBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlciwKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4mIGhlYWQpCiB7Ci0gICAgaGVhZCA9IHN0
ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4oaG9sZGVyLCBX
VEY6Om1vdmUoaGVhZCkpOworICAgIGhlYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQ+KGtleSwgaG9sZGVyLCBXVEY6Om1vdmUoaGVhZCkpOwogICAg
IHJldHVybiBoZWFkLmdldCgpOwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQ6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikKIHsKLSAgICAvLyBUaGlzIHdp
bGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxs
IHdhdGNocG9pbnRzLgotICAgIC8vIFRoYXQgd29ya3MsIGJlY2F1c2UgZGVsZXRpbmcgYSB3YXRj
aHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3MgbGlzdCwgYW5kCi0gICAgLy8gdGhlIHNl
dCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBj
aGFuZ2luZy4KLSAgICBtX2hvbGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCptX2hvbGRlci5z
dHViSW5mbygpKTsKKyAgICBpZiAoIW1fa2V5IHx8ICFtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0
eUNvbmRpdGlvbjo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwg
aW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMgYWxsIHdh
dGNocG9pbnRzLgorICAgICAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0aW5nIGEgd2F0
Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAorICAgICAgICAvLyB0
aGUgc2V0J3MgbGlzdCB0cmF2ZXJzYWwgZm9yIGZpcmluZyBpcyByb2J1c3QgYWdhaW5zdCB0aGUg
c2V0IGNoYW5naW5nLgorICAgICAgICBtX2hvbGRlci5jb2RlQmxvY2soKS0+cmVzZXRTdHViKCpt
X2hvbGRlci5zdHViSW5mbygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X2tleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKSB7CisgICAgICAgIC8v
IElmIHRoaXMgd2FzIGEgcHJlc2VuY2UgY29uZGl0aW9uLCBsZXQncyB3YXRjaCB0aGUgcHJvcGVy
dHkgZm9yIHJlcGxhY2VtZW50cy4gVGhpcyBpcyBwcm9maXRhYmxlCisgICAgICAgIC8vIGZvciB0
aGUgREZHLCB3aGljaCB3aWxsIHdhbnQgdGhlIHJlcGxhY2VtZW50IHNldCB0byBiZSB2YWxpZCBp
biBvcmRlciB0byBkbyBjb25zdGFudCBmb2xkaW5nLgorICAgICAgICBWTSYgdm0gPSAqSGVhcDo6
aGVhcChtX2tleS5vYmplY3QoKSktPnZtKCk7CisgICAgICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1
Y3R1cmUoKS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBtX2tleS5v
ZmZzZXQoKSk7CisgICAgfQorCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRU
cmFuc2l0aW9uV2F0Y2hwb2ludCh0aGlzKTsKIH0KIAogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjp+V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvKCkKIHsKIH0KIAotU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZv
OjphZGRXYXRjaHBvaW50KCkKK1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNo
cG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYga2V5KQogewotICAgIHJldHVybiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50OjpwdXNoKCp0aGlzLCBtX2hlYWQpOworICAgIHJldHVybiBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50OjpwdXNoKGtleSwgKnRoaXMsIG1faGVhZCk7CiB9CiAKIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
bzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKICAgICBSZWZQdHI8V2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVmLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCisgICAgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewogICAgIGlm
ICghaG9sZGVyUmVmKQogICAgICAgICBob2xkZXJSZWYgPSBhZG9wdFJlZihuZXcgV2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvKGNvZGVCbG9jaywgc3R1YkluZm8pKTsKQEAgLTcyLDcgKzg1
LDcgQEAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwbwogICAgICAgICBB
U1NFUlQoaG9sZGVyUmVmLT5tX3N0dWJJbmZvID09IHN0dWJJbmZvKTsKICAgICB9CiAgICAgCi0g
ICAgcmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludCgpOworICAgIHJldHVybiBob2xkZXJS
ZWYtPmFkZFdhdGNocG9pbnQoa2V5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludF9oCiAjZGVmaW5lIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnRfaAogCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJX
YXRjaHBvaW50LmgiCiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNDYsMTUgKzQ3LDExIEBAIGNsYXNz
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQgOiAKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KAot
ICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlcikKLSAgICAgICAg
OiBtX2hvbGRlcihob2xkZXIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50KAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5LAogICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlciwK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+
IG5leHQpCi0gICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQorICAgICAgICA6IG1fa2V5KGtleSkK
KyAgICAgICAgLCBtX2hvbGRlcihob2xkZXIpCiAgICAgICAgICwgbV9uZXh0KFdURjo6bW92ZShu
ZXh0KSkKICAgICB7CiAgICAgfQpAQCAtNjIsNiArNTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCgpOwogICAgIAogICAgIHN0YXRpYyBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBwdXNoKAorICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAogICAgICAgICBXYXRjaHBvaW50c09uU3RydWN0dXJl
U3R1YkluZm8mIGhvbGRlciwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQ+JiBoZWFkKTsKIApAQCAtNjksNiArNjcsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gbV9rZXk7CiAgICAg
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvJiBtX2hvbGRlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4gbV9uZXh0OwogfTsKQEAgLTgz
LDExICs4MiwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgfldhdGNocG9pbnRzT25TdHJ1Y3R1cmVT
dHViSW5mbygpOwogICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFk
ZFdhdGNocG9pbnQoKTsKKyAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRX
YXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpOwogICAgIAogICAg
IHN0YXRpYyBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBlbnN1cmVSZWZlcmVuY2VB
bmRBZGRXYXRjaHBvaW50KAogICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvPiYgaG9sZGVyUmVmLAotICAgICAgICBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byopOworICAgICAgICBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8oKSBjb25zdCB7IHJldHVybiBtX3N0dWJJbmZvOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDkgKzQ4LDEyIEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKICAgICAgICAgZGVsZXRlIHBvbHltb3Jw
aGljU3RydWN0dXJlczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3Jt
YWw6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKHUucHV0QnlJZFRy
YW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5y
YXdDb25kaXRpb25TZXQgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CiAg
ICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CiAgICAgICAgIC8vIFRoZXNlIGluc3RydWN0aW9ucyBkb24n
dCBoYXZlIHRvIHJlbGVhc2UgYW55IGFsbG9jYXRlZCBtZW1vcnkKQEAgLTc1LDggKzc4LDkgQEAg
Ym9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
dHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlk
VHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgIHx8ICFIZWFw
Ojppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAg
ICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkK
KyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVj
dHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHUucHV0QnlJZFRyYW5zaXRp
b24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgi
CiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCkBAIC0xMTMs
NyArMTE0LDcgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIC8vIFB1dEJ5SWQq
CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFRy
YW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0LCBib29sIGlzRGlyZWN0KQogICAgIHsKICAgICAgICAgaWYgKGlzRGlyZWN0KQog
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJl
Y3Q7CkBAIC0xMjIsNyArMTIzLDcgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAg
ICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IHByZXZpb3VzU3RydWN0dXJlKTsKICAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlv
bi5jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAgIHUucHV0QnlJZFRyYW5zaXRp
b24ucmF3Q29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0LnJlbGVhc2VSYXdQb2ludGVyKCk7CiAg
ICAgfQogCiAgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCkBAIC0xNzUsMTAgKzE3NiwxMSBAQCBz
dHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICB9CiAg
ICAgICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9p
bnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCogYWRkV2F0Y2hwb2ludCgKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbigpKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHdhdGNo
cG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMpOworICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVC
bG9jaywgdGhpcywgY29uZGl0aW9uKTsKICAgICB9CiAgICAgCiAgICAgaW50OF90IGFjY2Vzc1R5
cGU7CkBAIC0yMTcsMjMgKzIxOSwxMiBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7
CiAgICAgICAgIH0gZ2V0QnlJZFNlbGY7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBX
cml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcm90b3R5cGVTdHJ1Y3R1cmU7Ci0gICAg
ICAgICAgICBib29sIGlzRGlyZWN0OwotICAgICAgICB9IGdldEJ5SWRQcm90bzsKLSAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2Jq
ZWN0U3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFp
bj4gY2hhaW47Ci0gICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA6IDMxOwotICAgICAgICAgICAg
Ym9vbCBpc0RpcmVjdCA6IDE7Ci0gICAgICAgIH0gZ2V0QnlJZENoYWluOwotICAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAg
fSBnZXRCeUlkTGlzdDsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBwcmV2aW91c1N0cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJC
YXNlPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlv
blNldDsKICAgICAgICAgfSBwdXRCeUlkVHJhbnNpdGlvbjsKICAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzc5LDcgKzE3NzksMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8K
ICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFzdGF0dXNbaV0uYWx0ZXJuYXRl
QmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0aGluZyB3b24ndCBnaXZlIHVz
IGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3RvdHlwZXMuIElmIGl0IGRpZCwgd2UnZAorICAg
ICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUgd29yayB0byBkbyBoZXJlLgorICAgICAgICAg
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHN0YXR1c1tpXS5jb25kaXRpb25T
ZXQoKS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKQEAgLTIwNjAsMzAgKzIw
NjMsMjIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
U3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAg
U3RydWN0dXJlU2V0IHNldCA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCk7CisgICAgICAgIGZvciAo
Y29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdldENhc2UgOiBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpLmNhc2VzKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gZ2V0Q2Fz
ZS5zZXQoKTsKICAgICAgICAgICAgIHNldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAo
c2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJh
c2VTZXQubWVyZ2Uoc2V0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZSBiYXNl
Rm9yTG9hZDsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAg
ICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZS5tX3ZhbHVlOwot
ICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgbV9n
cmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAgICAgICBiYXNlRm9y
TG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAg
ICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgeworICAgICAgICAgICAgaWYgKGdldENhc2UubWV0
aG9kKCkua2luZCgpICE9IEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudCkgewogICAgICAgICAg
ICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRo
aXNSZXN1bHQ7CiAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKICAgICAgICAgICAgICAgICBt
X2dyYXBoLAotICAgICAgICAgICAgICAgICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCks
CisgICAgICAgICAgICAgICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIHJl
c3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgKKyAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LAorICAgIENvZGVCbG9jayogY29kZUJs
b2NrKQorICAgIDogbV9rZXkoa2V5KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2
YWxlbmNlKTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQ6Omluc3RhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkp
OworICAgIAorICAgIG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQoJm1fc3RydWN0dXJlV2F0Y2hwb2ludCk7CisgICAgCisgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHko
bV9rZXkudWlkKCkpOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1fa2V5Lm9iamVjdCgpLT5z
dHJ1Y3R1cmUoKS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAg
ICBzZXQtPmFkZCgmbV9wcm9wZXJ0eVdhdGNocG9pbnQpOworfQorCit2b2lkIEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6ZmlyZShjb25zdCBGaXJlRGV0YWlsJiBkZXRh
aWwpCit7CisgICAgLy8gT25lIG9mIHRoZSB3YXRjaHBvaW50cyBmaXJlZCwgYnV0IHRoZSBvdGhl
ciBvbmUgZGlkbid0LiBNYWtlIHN1cmUgdGhhdCBuZWl0aGVyIG9mIHRoZW0gYXJlCisgICAgLy8g
aW4gYW55IHNldCBhbnltb3JlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGJ5IGFsbG93aW5nIHVz
IHRvIHJlaW5zdGFsbCB0aGUgd2F0Y2hwb2ludHMKKyAgICAvLyB3aGVyZXZlciBmcm9tIHNjcmF0
Y2guCisgICAgaWYgKG1fc3RydWN0dXJlV2F0Y2hwb2ludC5pc09uTGlzdCgpKQorICAgICAgICBt
X3N0cnVjdHVyZVdhdGNocG9pbnQucmVtb3ZlKCk7CisgICAgaWYgKG1fcHJvcGVydHlXYXRjaHBv
aW50LmlzT25MaXN0KCkpCisgICAgICAgIG1fcHJvcGVydHlXYXRjaHBvaW50LnJlbW92ZSgpOwor
ICAgIAorICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5zdXJl
V2F0Y2hhYmlsaXR5KSkgeworICAgICAgICBpbnN0YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVy
KHRoaXMpLCAiICgiLCBtX2tleSwgIikgb24gIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICB9
CisgICAgCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIG91dC5wcmludCgiQWRhcHRh
dGlvbiBvZiAiLCBtX2tleSwgIiBmYWlsZWQ6ICIsIGRldGFpbCk7CisgICAgCisgICAgU3RyaW5n
RmlyZURldGFpbCBzdHJpbmdEZXRhaWwob3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgCisg
ICAgbV9jb2RlQmxvY2stPmpldHRpc29uKAorICAgICAgICBQcm9maWxlcjo6SmV0dGlzb25EdWVU
b1VucHJvZmlsZWRXYXRjaHBvaW50LCBDb3VudFJlb3B0aW1pemF0aW9uLCAmc3RyaW5nRGV0YWls
KTsKK30KKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OlN0
cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgKKyAgICBjb25zdCBGaXJlRGV0YWlsJiBk
ZXRhaWwpCit7CisgICAgcHRyZGlmZl90IG15T2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKAorICAg
ICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQsIG1fc3RydWN0dXJl
V2F0Y2hwb2ludCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50KiBwYXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpIC0gbXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQor
Cit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6UHJvcGVydHlX
YXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoCisgICAgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQor
eworICAgIHB0cmRpZmZfdCBteU9mZnNldCA9IE9CSkVDVF9PRkZTRVRPRigKKyAgICAgICAgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LCBtX3Byb3BlcnR5V2F0Y2hwb2lu
dCk7CisgICAgCisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KiBw
YXJlbnQgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0g
bXlPZmZzZXQpOworICAgIAorICAgIHBhcmVudC0+ZmlyZShkZXRhaWwpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKyNkZWZpbmUgREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBv
aW50LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb2Rl
QmxvY2sqKTsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkg
Y29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKKyAgICB2b2lkIGluc3RhbGwoKTsKKworcHJp
dmF0ZToKKyAgICBjbGFzcyBTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQg
eworICAgIHB1YmxpYzoKKyAgICAgICAgU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0
YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKyAgICBjbGFzcyBQcm9wZXJ0eVdhdGNocG9pbnQgOiBw
dWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBQcm9wZXJ0eVdhdGNocG9p
bnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJu
YWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisgICAgCisgICAgdm9pZCBm
aXJlKGNvbnN0IEZpcmVEZXRhaWwmKTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFN0cnVjdHVyZVdhdGNo
cG9pbnQgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50OworICAgIFByb3BlcnR5V2F0Y2hwb2ludCBtX3By
b3BlcnR5V2F0Y2hwb2ludDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXksCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2tleShrZXkpCisg
ICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5Lndh
dGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCgha2V5LndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7
Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjppbnN0YWxsKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgpKTsKKyAgICAKKyAgICBtX2tleS5v
YmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQor
Cit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZp
cmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlD
b25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgaW5zdGFsbCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3Nl
bWJseSgpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHdhdGNocG9p
bnQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiAoIiwgbV9rZXksICIpIG9uICIsICptX2NvZGVCbG9j
aywgIlxuIik7CisgICAgfQorICAgIAorICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBv
dXQucHJpbnQoIkFkYXB0YXRpb24gb2YgIiwgbV9rZXksICIgZmFpbGVkOiAiLCBkZXRhaWwpOwor
ICAgIAorICAgIFN0cmluZ0ZpcmVEZXRhaWwgc3RyaW5nRGV0YWlsKG91dC50b0NTdHJpbmcoKS5k
YXRhKCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbigKKyAgICAgICAgUHJvZmls
ZXI6OkpldHRpc29uRHVlVG9VbnByb2ZpbGVkV2F0Y2hwb2ludCwgQ291bnRSZW9wdGltaXphdGlv
biwgJnN0cmluZ0RldGFpbCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRfaAorI2RlZmluZSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJs
aWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgQ29kZUJsb2NrKik7CisgICAgCisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
OyB9CisgICAgCisgICAgdm9pZCBpbnN0YWxsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBtX2tleTsKKyAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsMjcg
QEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJv
b2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRl
cm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcyk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2Rl
KiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3Ry
dWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5v
ZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9w
ZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0
QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdl
dEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwg
Tm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUg
PSBHZXRCeU9mZnNldCk7CisKKyAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBiYXNlZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3RydWN0dXJlIHNldC4g
RG9lcyBub3QKKyAgICAvLyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmRpdGlvbiwgYnV0
IGl0IG1heSByZXR1cm4gYSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEgY29udHJhZGljdGlv
bi4KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBwcmVzZW5jZUxpa2UoCisgICAgICAgIEpT
T2JqZWN0KiBrbm93bkJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNv
bnN0IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIC8vIEF0dGVtcHQgdG8gd2F0Y2ggdGhlIHBy
ZXNlbmNlIG9mIGEgcHJvcGVydHkuIEl0IHdpbGwgd2F0Y2ggdGhhdCB0aGUgcHJvcGVydHkgaXMg
cHJlc2VudCBpbiB0aGUgc2FtZQorICAgIC8vIHdheSBhcyBpbiBhbGwgb2YgdGhlIHN0cnVjdHVy
ZXMgaW4gdGhlIHNldC4gSXQgbWF5IGVtaXQgY29kZSBpbnN0ZWFkIG9mIGp1c3Qgc2V0dGluZyBh
IHdhdGNocG9pbnQuCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgYWxsIHdvcmtzIG91dC4K
KyAgICBib29sIGNoZWNrUHJlc2VuY2VMaWtlKEpTT2JqZWN0KiBrbm93bkJhc2UsIFVuaXF1ZWRT
dHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIHZv
aWQgY2hlY2tQcmVzZW5jZUxpa2UoTm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9w
ZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgCisgICAgLy8gV29ya3Mgd2l0
aCBib3RoIEdldEJ5SWRWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlh
bnQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CisgICAgTm9kZSogbG9hZChT
cGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29u
c3QgVmFyaWFudFR5cGUmKTsKKworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiwgTm9kZSogdmFsdWUpOworICAgICAg
ICAKICAgICB2b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJh
bmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CkBAIC0yMTIsNyArMjMyLDMyIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAogICAgICAgICBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYs
CiAgICAgICAgIGJvb2wgaXNEaXJlY3QpOwotICAgIHZvaWQgZW1pdENoZWNrcyhjb25zdCBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7CisgICAgCisgICAgLy8gRWl0aGVyIHJlZ2lzdGVy
IGEgd2F0Y2hwb2ludCBvciBlbWl0IGEgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLiBSZXR1cm5z
IGZhbHNlIGlmIHRoZQorICAgIC8vIGNvbmRpdGlvbiBubyBsb25nZXIgaG9sZHMsIGFuZCB0aGVy
ZWZvcmUgbm8gcmVhc29uYWJsZSBjaGVjayBjYW4gYmUgZW1pdHRlZC4KKyAgICBib29sIGNoZWNr
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCisgICAgR2V0QnlPZmZzZXRN
ZXRob2QgcHJvbW90ZVRvQ29uc3RhbnQoR2V0QnlPZmZzZXRNZXRob2QpOworICAgIAorICAgIC8v
IEVpdGhlciByZWdpc3RlciBhIHdhdGNocG9pbnQgb3IgZW1pdCBhIGNoZWNrIGZvciB0aGlzIGNv
bmRpdGlvbi4gSXQgbXVzdCBiZSBhIFByZXNlbmNlCisgICAgLy8gY29uZGl0aW9uLiBJdCB3aWxs
IGF0dGVtcHQgdG8gcHJvbW90ZSBhIFByZXNlbmNlIGNvbmRpdGlvbiB0byBhbiBFcXVpdmFsZW5j
ZSBjb25kaXRpb24uCisgICAgLy8gRW1pdHMgY29kZSBmb3IgdGhlIGxvYWRlZCB2YWx1ZSB0aGF0
IHRoZSBjb25kaXRpb24gZ3VhcmRzLCBhbmQgcmV0dXJucyBhIG5vZGUgY29udGFpbmluZworICAg
IC8vIHRoZSBsb2FkZWQgdmFsdWUuIFJldHVybnMgbnVsbCBpZiB0aGUgY29uZGl0aW9uIG5vIGxv
bmdlciBob2xkcy4KKyAgICBHZXRCeU9mZnNldE1ldGhvZCBwbGFuTG9hZChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYpOworICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IEdldEJ5T2Zmc2V0TWV0aG9kJiwgTm9kZVR5cGUg
PSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICAKKyAg
ICAvLyBDYWxscyBjaGVjaygpIGZvciBlYWNoIGNvbmRpdGlvbiBpbiB0aGUgc2V0OiB0aGF0IGlz
LCBpdCBlaXRoZXIgZW1pdHMgY2hlY2tzIG9yIHJlZ2lzdGVycworICAgIC8vIHdhdGNocG9pbnRz
IChvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28pIHRvIG1ha2UgdGhlIGNvbmRpdGlvbnMgaG9s
ZC4gSWYgYW55IG9mIHRob3NlCisgICAgLy8gY29uZGl0aW9ucyBhcmUgbm8gbG9uZ2VyIGNoZWNr
YWJsZSwgcmV0dXJucyBmYWxzZS4KKyAgICBib29sIGNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0Jik7CisgICAgCisgICAgLy8gQ2FsbHMgY2hlY2soKSBmb3IgdGhvc2UgY29u
ZGl0aW9ucyB0aGF0IGFyZW4ndCB0aGUgc2xvdCBiYXNlLCBhbmQgY2FsbHMgbG9hZCgpIGZvciB0
aGUgc2xvdAorICAgIC8vIGJhc2UuIERvZXMgYSBjb21iaW5hdGlvbiBvZiB3YXRjaHBvaW50IHJl
Z2lzdHJhdGlvbiBhbmQgY2hlY2sgZW1pc3Npb24gdG8gZ3VhcmQgdGhlCisgICAgLy8gY29uZGl0
aW9ucywgYW5kIGVtaXRzIGNvZGUgdG8gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2xvdCBiYXNl
LiBSZXR1cm5zIGEgbm9kZSBjb250YWluaW5nCisgICAgLy8gdGhlIGxvYWRlZCB2YWx1ZS4gUmV0
dXJucyBudWxsIGlmIGFueSBvZiB0aGUgY29uZGl0aW9ucyB3ZXJlIG5vIGxvbmdlciBjaGVja2Fi
bGUuCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcGxhbkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmKTsKKyAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwogCiAgICAg
dm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgdm9pZCBjbGVhckNhY2hlcygpOwpAQCAt
NzA2LDYgKzc1MSw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0
aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByb3V0ZSB0byBlbWl0UHJvcGVydHlD
aGVjaywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBCdXQgY3VycmVudGx5LAorICAgICAgICAv
LyB0aGlzIGdldHMgbm8gcHJvZml0IGZyb20gdXNpbmcgZW1pdFByb3BlcnR5Q2hlY2soKSBzaW5j
ZSB3ZSdsbCBub24tYWRhcHRpdmVseSB3YXRjaCB0aGUKKyAgICAgICAgLy8gb2JqZWN0J3Mgc3Ry
dWN0dXJlIGFzIHNvb24gYXMgd2UgbWFrZSBpdCBhIHdlYWtKU0Nvc250YW50LgogICAgICAgICBO
b2RlKiBvYmplY3ROb2RlID0gd2Vha0pTQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgYWRkVG9H
cmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVj
dHVyZSkpLCBvYmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CkBAIC0yMjIx
LDE1ICsyMjY5LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3Ap
CiB7Ci0gICAgaWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUg
Y29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1ZhbHVl
KCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkgewotICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFu
dG9tLCBiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAg
IGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBi
YXNlOwpAQCAtMjI0NSw2ICsyMjg2LDE4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeU9mZnNldCgKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9CiAKK05vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2Rl
KiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK3sKKyAgICBp
ZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9
IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0
dXJlU2V0LCBvZmZzZXQpKSB7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2Up
OworICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwg
YmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0LCBvcCk7Cit9CisKIE5vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVy
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3Bl
cnR5U3RvcmFnZTsKQEAgLTIyNjIsMTAgKzIzMTUsMjk3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjplbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
IHZlY3RvcikKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBjb25kaXRpb24pCit7CisgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24o
Y29uZGl0aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgIGlmICghY29u
ZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eShzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUs
CisgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwKKyAg
ICAgICAgd2Vha0pTQ29uc3RhbnQoY29uZGl0aW9uLm9iamVjdCgpKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0dldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwcm9tb3RlVG9Db25z
dGFudChHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QpCit7CisgICAgaWYgKG1ldGhvZC5raW5kKCkg
PT0gR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlCisgICAgICAgICYmIG1ldGhv
ZC5wcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPmRmZ1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAg
aWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkobWV0
aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLCBtZXRob2QucHJvdG90eXBlKCktPnN0cnVjdHVyZSgp
LCBtZXRob2Qub2Zmc2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9k
Ojpjb25zdGFudChtX2dyYXBoLmZyZWV6ZShjb25zdGFudCkpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gbWV0aG9kOworfQorCitHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cGxh
bkxvYWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUGxhbm5pbmcgYSBsb2FkOiAiLCBjb25kaXRp
b24sICJcbiIpOworICAgIAorICAgIC8vIFdlIG1pZ2h0IHByb21vdGUgdGhpcyB0byBFcXVpdmFs
ZW5jZSwgYW5kIGEgbGF0ZXIgREZHIHBhc3MgbWlnaHQgYWxzbyBkbyBzdWNoIHByb21vdGlvbgor
ICAgIC8vIGV2ZW4gaWYgd2UgZmFpbCwgYnV0IGZvciBzaW1wbGljaXR5IHRoaXMgY2Fubm90IGJl
IGFza2VkIHRvIGxvYWQgYW4gZXF1aXZhbGVuY2UgY29uZGl0aW9uLgorICAgIC8vIE5vbmUgb2Yg
dGhlIGNsaWVudHMgb2YgdGhpcyBtZXRob2Qgd2lsbCByZXF1ZXN0IGEgbG9hZCBvZiBhbiBFcXVp
dmFsZW5jZSBjb25kaXRpb24gYW55d2F5LAorICAgIC8vIGFuZCBzdXBwb3J0aW5nIGl0IHdvdWxk
IGNvbXBsaWNhdGUgdGhlIGhldXJpc3RpY3MgYmVsb3cuCisgICAgUkVMRUFTRV9BU1NFUlQoY29u
ZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpOworICAgIAorICAg
IC8vIEhlcmUncyB0aGUgcmFua2luZyBvZiBob3cgdG8gaGFuZGxlIHRoaXMsIGZyb20gbW9zdCBw
cmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkOgorICAgIC8vCisgICAgLy8gMSkgV2F0Y2hwb2lu
dCBvbiBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24gYW5kIHJldHVybiBhIGNvbnN0YW50IG5vZGUg
Zm9yIHRoZSBsb2FkZWQgdmFsdWUuCisgICAgLy8gICAgTm8gb3RoZXIgY29kZSBpcyBlbWl0dGVk
LCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSBvYmplY3QgaXMgbmV2ZXIgcmVnaXN0ZXJl
ZC4KKyAgICAvLyAgICBIZW5jZSB0aGlzIHJlc3VsdHMgaW4gemVybyBjb2RlIGFuZCB3ZSB3b24n
dCBqZXR0aXNvbiB0aGlzIGNvbXBpbGF0aW9uIGlmIHRoZSBvYmplY3QKKyAgICAvLyAgICB0cmFu
c2l0aW9ucywgZXZlbiBpZiB0aGUgc3RydWN0dXJlIGlzIHdhdGNoYWJsZSByaWdodCBub3cuCisg
ICAgLy8KKyAgICAvLyAyKSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBhbmQgdGhlIGN1cnJlbnQgc3Ry
dWN0dXJlIG9mIHRoZSBiYXNlIGlzIGdvaW5nIHRvIGJlIHdhdGNoZWQgYnkgdGhlCisgICAgLy8g
ICAgREZHIGFueXdheSAoaS5lLiBkZmdTaG91bGRXYXRjaCkuIFdhdGNoIHRoZSBzdHJ1Y3R1cmUg
YW5kIGVtaXQgdGhlIGxvYWQuIERvbid0IHdhdGNoIHRoZQorICAgIC8vICAgIGNvbmRpdGlvbiwg
c2luY2UgdGhlIGFjdCBvZiB0dXJuaW5nIHRoZSBiYXNlIGludG8gYSBjb25zdGFudCBpbiBJUiB3
aWxsIGNhdXNlIHRoZSBERkcgdG8KKyAgICAvLyAgICB3YXRjaCB0aGUgc3RydWN0dXJlIGFueXdh
eSBhbmQgZG9pbmcgc28gd291bGQgc3Vic3VtZSB3YXRjaGluZyB0aGUgY29uZGl0aW9uLgorICAg
IC8vCisgICAgLy8gMykgTmVlZCB0byBlbWl0IGEgbG9hZCwgYW5kIHRoZSBjdXJyZW50IHN0cnVj
dHVyZSBvZiB0aGUgYmFzZSBpcyB3YXRjaGFibGUgYnV0IG5vdCBieSB0aGUKKyAgICAvLyAgICBE
RkcgKGkuZS4gdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSBhbmQgIWRmZ1No
b3VsZFdhdGNoSWZQb3NzaWJsZSgpKS4gV2F0Y2gKKyAgICAvLyAgICB0aGUgY29uZGl0aW9uLCBh
bmQgZW1pdCBhIGxvYWQuCisgICAgLy8KKyAgICAvLyA0KSBOZWVkIHRvIGVtaXQgYSBsb2FkLCBh
bmQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRoZSBiYXNlIGlzIG5vdCB3YXRjaGFibGUuIEVt
aXQgYQorICAgIC8vICAgIHN0cnVjdHVyZSBjaGVjaywgYW5kIGVtaXQgYSBsb2FkLgorICAgIC8v
CisgICAgLy8gNSkgVGhlIGNvbmRpdGlvbiBkb2VzIG5vdCBob2xkLiBHaXZlIHVwIGFuZCByZXR1
cm4gbnVsbC4KKyAgICAKKyAgICAvLyBGaXJzdCwgdHJ5IHRvIHByb21vdGUgUHJlc2VuY2UgdG8g
RXF1aXZhbGVuY2UuIFdlIGRvIHRoaXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UKKyAgICAv
LyBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgcHJvZml0YWJsZS4gQWxzbywgdGhlcmUgYXJlIGNhc2Vz
IHdoZXJlIHRoZSBwcmVzZW5jZSBpcyB3YXRjaGFibGUgYnV0CisgICAgLy8gd2UgZG9uJ3Qgd2Fu
dCB0byB3YXRjaCBpdCB1bmxlc3MgaXQgYmVjYW1lIGFuIGVxdWl2YWxlbmNlIChzZWUgdGhlIHJl
bGF0aW9uc2hpcCBiZXR3ZWVuCisgICAgLy8gKDEpLCAoMiksIGFuZCAoMykgYWJvdmUpLgorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGVxdWl2YWxlbmNlQ29uZGl0aW9uID0gY29uZGl0aW9u
LmF0dGVtcHRUb01ha2VFcXVpdmFsZW5jZVdpdGhvdXRCYXJyaWVyKCk7CisgICAgaWYgKG1fZ3Jh
cGgud2F0Y2hDb25kaXRpb24oZXF1aXZhbGVuY2VDb25kaXRpb24pKQorICAgICAgICByZXR1cm4g
R2V0QnlPZmZzZXRNZXRob2Q6OmNvbnN0YW50KG1fZ3JhcGguZnJlZXplKGVxdWl2YWxlbmNlQ29u
ZGl0aW9uLnJlcXVpcmVkVmFsdWUoKSkpOworICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdl
J2xsIGhhdmUgdG8gbWF0ZXJpYWxpemUgdGhlIGNvbmRpdGlvbidzIGJhc2UgYXMgYSBjb25zdGFu
dCBpbiBERkcgSVIuIE9uY2UKKyAgICAvLyB3ZSBkbyB0aGlzLCB0aGUgZnJvemVuIHZhbHVlIHdp
bGwgaGF2ZSBpdHMgb3duIGlkZWEgb2Ygd2hhdCB0aGUgc3RydWN0dXJlIGlzLiBVc2UgdGhhdCBm
cm9tCisgICAgLy8gbm93IG9uIGp1c3QgYmVjYXVzZSBpdCdzIGxlc3MgY29uZnVzaW5nLgorICAg
IEZyb3plblZhbHVlKiBiYXNlID0gbV9ncmFwaC5mcmVlemUoY29uZGl0aW9uLm9iamVjdCgpKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOworICAgIAorICAg
IC8vIENoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSd2ZSByZWdpc3RlcmVkIG1ha2VzIHRo
ZSBjb25kaXRpb24gaG9sZC4gSWYgbm90LCBqdXN0IGdpdmUKKyAgICAvLyB1cC4gVGhpcyBpcyBj
YXNlICg1KSBhYm92ZS4KKyAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRp
dHkoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7CisgICAg
CisgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBpcyB3YXRjaGVkIGJ5IHRoZSBERkcgYWxyZWFkeSwg
dGhlbiBqdXN0IHVzZSB0aGlzIGZhY3QgdG8gZW1pdCB0aGUgbG9hZC4KKyAgICAvLyBUaGlzIGlz
IGNhc2UgKDIpIGFib3ZlLgorICAgIGlmIChzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCisg
ICAgICAgIHJldHVybiBwcm9tb3RlVG9Db25zdGFudChHZXRCeU9mZnNldE1ldGhvZDo6bG9hZEZy
b21Qcm90b3R5cGUoYmFzZSwgY29uZGl0aW9uLm9mZnNldCgpKSk7CisgICAgCisgICAgLy8gSWYg
d2UgY2FuIHdhdGNoIHRoZSBjb25kaXRpb24gcmlnaHQgbm93LCB0aGVuIHdlIGNhbiBlbWl0IHRo
ZSBsb2FkIGFmdGVyIHdhdGNoaW5nIGl0LiBUaGlzCisgICAgLy8gaXMgY2FzZSAoMykgYWJvdmUu
CisgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKKyAgICAgICAgcmV0
dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3RvdHlw
ZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBXZSBjYW4ndCB3YXRj
aCBhbnl0aGluZyBidXQgd2Uga25vdyB0aGF0IHRoZSBjdXJyZW50IHN0cnVjdHVyZSBzYXRpc2Zp
ZXMgdGhlIGNvbmRpdGlvbi4gU28sCisgICAgLy8gY2hlY2sgZm9yIHRoYXQgc3RydWN0dXJlIGFu
ZCB0aGVuIGVtaXQgdGhlIGxvYWQuCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgQ2hlY2tTdHJ1
Y3R1cmUsIAorICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJl
KSksCisgICAgICAgIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGJhc2UpKSk7CisgICAg
cmV0dXJuIHByb21vdGVUb0NvbnN0YW50KEdldEJ5T2Zmc2V0TWV0aG9kOjpsb2FkRnJvbVByb3Rv
dHlwZShiYXNlLCBjb25kaXRpb24ub2Zmc2V0KCkpKTsKK30KKworTm9kZSogQnl0ZUNvZGVQYXJz
ZXI6OmxvYWQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgY29uc3QgR2V0QnlPZmZzZXRNZXRob2QmIG1ldGhvZCwKKyAgICBOb2RlVHlw
ZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG1ldGhvZC5raW5kKCkpIHsKKyAgICBjYXNlIEdldEJ5T2Zm
c2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjYXNlIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlND
b25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CisgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKKyAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBh
ZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKKyAgICAg
ICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlm
aWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICB9CisgICAgY2FzZSBHZXRCeU9m
ZnNldE1ldGhvZDo6TG9hZDoKKyAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9tIHBs
YW5Mb2FkKCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6
bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBOb2RlVHlwZSBvcCkKK3sKKyAgICBHZXRCeU9mZnNldE1l
dGhvZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgIHJldHVybiBsb2FkKHByZWRp
Y3Rpb24sIG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoY29uZGl0aW9uLnVpZCgpKSwgbWV0
aG9kLCBvcCk7Cit9CisKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNrKGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKKyAgICAgICAg
aWYgKCFjaGVjayhjb25kaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworR2V0QnlPZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJzZXI6
OnBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQp
Cit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coImNvbmRpdGlvblNldCA9ICIs
IGNvbmRpdGlvblNldCwgIlxuIik7CisgICAgCisgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0
OworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29u
ZGl0aW9uU2V0KSB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQoKSkgeworICAgICAg
ICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFyZXN1bHQpOyAvLyBTaG91bGQgb25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhlc2Uu
CisgICAgICAgICAgICByZXN1bHQgPSBwbGFuTG9hZChjb25kaXRpb24pOworICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5T2Zmc2V0TWV0aG9kKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICgh
Y2hlY2soY29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlPZmZzZXRNZXRo
b2QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUKCEhcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOb2RlKiBCeXRlQ29k
ZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBOb2RlVHlwZSBvcCkKK3sKKyAg
ICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBwbGFuTG9hZChjb25kaXRpb25TZXQpOworICAg
IHJldHVybiBsb2FkKAorICAgICAgICBwcmVkaWN0aW9uLAorICAgICAgICBtX2dyYXBoLmlkZW50
aWZpZXJzKCkuZW5zdXJlKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLnVpZCgpKSwK
KyAgICAgICAgbWV0aG9kLCBvcCk7Cit9CisKK09iamVjdFByb3BlcnR5Q29uZGl0aW9uIEJ5dGVD
b2RlUGFyc2VyOjpwcmVzZW5jZUxpa2UoCisgICAgSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCkKK3sKKyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBQcm9w
ZXJ0eU9mZnNldCBmaXJzdE9mZnNldCA9IHNldFswXS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0
cmlidXRlcyk7CisgICAgaWYgKGZpcnN0T2Zmc2V0ICE9IG9mZnNldCkKKyAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBvdGhlckF0dHJpYnV0ZXM7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG90aGVyT2Zmc2V0ID0gc2V0W2ldLT5nZXRDb25jdXJyZW50
bHkodWlkLCBvdGhlckF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob3RoZXJPZmZzZXQgIT0gb2Zm
c2V0IHx8IG90aGVyQXR0cmlidXRlcyAhPSBhdHRyaWJ1dGVzKQorICAgICAgICAgICAgcmV0dXJu
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCk7CisgICAgfQorICAgIHJldHVybiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbjo6cHJlc2VuY2VXaXRob3V0QmFycmllcihrbm93bkJhc2UsIHVpZCwgb2Zm
c2V0LCBhdHRyaWJ1dGVzKTsKK30KKworYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2tQcmVzZW5j
ZUxpa2UoCisgICAgSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBy
ZXR1cm4gY2hlY2socHJlc2VuY2VMaWtlKGtub3duQmFzZSwgdWlkLCBvZmZzZXQsIHNldCkpOwor
fQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpjaGVja1ByZXNlbmNlTGlrZSgKKyAgICBOb2RlKiBi
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0
IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gYmFz
ZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKKyAgICAgICAgaWYgKGNoZWNr
UHJlc2VuY2VMaWtlKGtub3duQmFzZSwgdWlkLCBvZmZzZXQsIHNldCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHNldCkpLCBiYXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmFyaWFudFR5cGU+CitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKKyAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgYmFja3dh
cmRzIHByb3BhZ2F0aW9uIGtub3dzIHRoYXQgd2UndmUgdXNlZCBiYXNlLgorICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgYmFzZSk7CisgICAgCisgICAgYm9vbCBuZWVkU3RydWN0dXJlQ2hlY2sgPSB0
cnVlOworICAgIAorICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nh
c3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIG9wdGltaXplIGF3
YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90IHdvcnRoIGRvaW5nIGFu
eXRoaW5nIGFib3V0IHRoaXMKKyAgICAgICAgLy8gaWYgdGhlIGJhc2UncyBzdHJ1Y3R1cmUgaXMg
d2F0Y2hlZC4KKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5jb25zdGFudCgp
LT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkp
IHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZp
ZXJzKClbaWRlbnRpZmllck51bWJlcl07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
dmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEgcHJvdG90eXBlLiBXZSBleHBlY3Qg
dGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCisgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkuIFdl
IGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YgdGhlIHN0cnVj
dHVyZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSBh
Z3JlZSBvbiB0aGUgcHJvdG90eXBlIChpdCB3b3VsZCBiZSBoaWxhcmlvdXNseSByYXJlIGlmIHRo
ZXkKKyAgICAgICAgICAgICAgICAvLyBkaWRuJ3QpLiBOb3RlIHRoYXQgd2UgYXJlIHJlbHlpbmcg
b24gc3RydWN0dXJlU2V0KCkgaGF2aW5nIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0CisgICAg
ICAgICAgICAgICAgLy8gd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdl
dEJ5SWRTdGF0dXMvUHV0QnlJZFN0YXR1cyB3b3JrLgorICAgICAgICAgICAgICAgIEpTT2JqZWN0
KiBwcm90b3R5cGUgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpWzBdLT5zdG9yZWRQcm90b3R5cGVP
YmplY3QoKTsKKyAgICAgICAgICAgICAgICBib29sIGFsbEFncmVlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKVtpXS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgIT0gcHJvdG90eXBlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhbGxBZ3JlZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKGFsbEFncmVlKSB7CisgICAgICAgICAgICAgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjphYnNl
bmNlV2l0aG91dEJhcnJpZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBrbm93bkJhc2UsIHVp
ZCwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrKGNvbmRpdGlvbikp
CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkU3RydWN0dXJlQ2hlY2sgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8v
IFRoaXMgbWVhbnMgd2UncmUgbG9hZGluZyBkaXJlY3RseSBmcm9tIGJhc2UuIFdlIGNhbiBhdm9p
ZCBhbGwgb2YgdGhlIGNvZGUgdGhhdCBmb2xsb3dzCisgICAgICAgICAgICAgICAgLy8gaWYgd2Ug
Y2FuIHByb3ZlIHRoYXQgdGhlIHByb3BlcnR5IGlzIGEgY29uc3RhbnQuIE90aGVyd2lzZSwgd2Ug
dHJ5IHRvIHByb3ZlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkgaXMgd2F0
Y2hhYmx5IHByZXNlbnQsIGluIHdoaWNoIGNhc2Ugd2UgZ2V0IHJpZCBvZiB0aGUgc3RydWN0dXJl
IGNoZWNrLgorCisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcHJlc2Vu
Y2VDb25kaXRpb24gPQorICAgICAgICAgICAgICAgICAgICBwcmVzZW5jZUxpa2Uoa25vd25CYXNl
LCB1aWQsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOworCisgICAg
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZXF1aXZhbGVuY2VDb25kaXRpb24g
PQorICAgICAgICAgICAgICAgICAgICBwcmVzZW5jZUNvbmRpdGlvbi5hdHRlbXB0VG9NYWtlRXF1
aXZhbGVuY2VXaXRob3V0QmFycmllcigpOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndh
dGNoQ29uZGl0aW9uKGVxdWl2YWxlbmNlQ29uZGl0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHdlYWtKU0NvbnN0YW50KGVxdWl2YWxlbmNlQ29uZGl0aW9uLnJlcXVpcmVkVmFsdWUo
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2socHJlc2VuY2VDb25kaXRpb24pKQorICAg
ICAgICAgICAgICAgICAgICBuZWVkU3RydWN0dXJlQ2hlY2sgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2spCisgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOworICAgIAorICAgIFNwZWN1bGF0
ZWRUeXBlIGxvYWRQcmVkaWN0aW9uOworICAgIE5vZGVUeXBlIGxvYWRPcDsKKyAgICBpZiAodmFy
aWFudC5jYWxsTGlua1N0YXR1cygpKSB7CisgICAgICAgIGxvYWRQcmVkaWN0aW9uID0gU3BlY0Nl
bGxPdGhlcjsKKyAgICAgICAgbG9hZE9wID0gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbG9hZFByZWRpY3Rpb24gPSBwcmVkaWN0aW9uOworICAgICAgICBs
b2FkT3AgPSBHZXRCeU9mZnNldDsKKyAgICB9CisgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWU7
CisgICAgaWYgKCF2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgbG9h
ZGVkVmFsdWUgPSBsb2FkKGxvYWRQcmVkaWN0aW9uLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLCBs
b2FkT3ApOworICAgIGVsc2UgeworICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zm
c2V0KAorICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIHZhcmlhbnQuc3RydWN0dXJl
U2V0KCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICBs
b2FkT3ApOworICAgIH0KKworICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKK30KKworTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKIHsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBjZWxsQ29uc3RhbnRX
aXRoU3RydWN0dXJlQ2hlY2sodmVjdG9yW2ldLmNvbnN0YW50KCksIHZlY3RvcltpXS5zdHJ1Y3R1
cmUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlJlcGxhY2UpOworCisgICAgY2hlY2tQcmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVy
ZSgpKTsKKyAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFy
aWFudC5vZmZzZXQoKSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeUlkKApAQCAtMjI4OCwxOCArMjYyOCwzNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVHZXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAgbV9ncmFwaC5jb21w
aWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwotICAgIAorICAgICAgICBWZWN0b3I8
TXVsdGlHZXRCeU9mZnNldENhc2UsIDI+IGNhc2VzOworICAgICAgICAKICAgICAgICAgLy8gMSkg
RW1pdCBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3Vs
ZCBzb3J0IG9mIG1heWJlIG5vdCBiZQogICAgICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBp
cyBzb21lIHJhcmVseSBleGVjdXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEg
bG90CiAgICAgICAgIC8vICAgIG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0
Y2hwb2ludGFibGUuCi0gICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspCi0gICAgICAgICAgICBlbWl0
Q2hlY2tzKGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENoZWNrcygpKTsKLSAg
ICAgICAgCisgICAgICAgIGZvciAoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBnZXRC
eUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmNvbmRpdGlv
blNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UoCisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJpYW50LnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgR2V0
QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgR2V0
QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gcGxhbkxvYWQodmFyaWFudC5jb25kaXRpb25TZXQoKSk7
CisgICAgICAgICAgICBpZiAoIW1ldGhvZCkgeworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgYmFzZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKE11bHRpR2V0QnlPZmZzZXRDYXNlKHZh
cmlhbnQuc3RydWN0dXJlU2V0KCksIG1ldGhvZCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24o
KS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKKyAgICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11
bHRpR2V0QnlPZmZzZXQKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fbXVsdGlHZXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRz
ID0gZ2V0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT5jYXNlcyA9IGNhc2Vz
OwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAogICAgICAgICAg
ICAgYWRkVG9HcmFwaChNdWx0aUdldEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgYmFzZSkpOwpAQCAtMjMwOSwzMCArMjY2NywxNiBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIEFTU0VSVChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRz
KCkgPT0gMSk7CiAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07
CiAgICAgICAgICAgICAgICAgCisgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKHByZWRpY3Rp
b24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOworICAgIGlmICghbG9hZGVkVmFs
dWUpIHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAor
ICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciks
IE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkR2V0QnlJZCgpOwogICAgIAotICAgIE5vZGUqIG9yaWdpbmFsQmFz
ZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVy
ZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkp
KSwgYmFzZSk7Ci0gICAgCi0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkp
OwotCi0gICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICBiYXNlID0gd2Vh
a0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwotICAgIAotICAgIC8vIFVubGVz
cyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODg3ODMsIHdlIG5lZWQgdG8KLSAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUg
b3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCi0g
ICAgLy8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9t
IGlmIHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcg
b3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2Uu
Ci0gICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQotICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIG9yaWdpbmFsQmFzZSk7Ci0gICAgCi0gICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVH
ZXRCeU9mZnNldCgKLSAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxP
dGhlciA6IHByZWRpY3Rpb24sCi0gICAgICAgIGJhc2UsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgp
LCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAgICB2YXJpYW50LmNh
bGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsK
LSAgICAKICAgICBpZiAoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgewogICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVlKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjM2OSw3ICsyNzEzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlJZCgKICAgICAvLyAgICBzaW5jZSB3ZSBvbmx5IHJlYWxseSBjYXJlIGFib3V0ICd0
aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8gdGFrZSB0aGF0CiAgICAg
Ly8gICAgc2hvcnRjdXQuCiAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsg
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5l
eHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0
KTsKICAgICAKICAgICBoYW5kbGVDYWxsKAogICAgICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIENh
bGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
aWQpLApAQCAtMjQwMywxNyArMjc0NywyMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeUlkKAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwotICAgICAgICAKICAgICAgICAgaWYgKCFp
c0RpcmVjdCkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRC
eUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewogICAgICAgICAgICAg
ICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBlbWl0Q2hlY2tzKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25zdGFudENo
ZWNrcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFu
dEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5
SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGls
YXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5l
ZFB1dEJ5SWQoKTsKKyAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52
YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRp
Zmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CkBAIC0yNDI2LDggKzI3NzMsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIAogICAgIHN3aXRjaCAodmFyaWFu
dC5raW5kKCkpIHsKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dCh2YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICBoYW5kbGVQdXRCeU9mZnNl
dChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAg
ICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAg
ICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGls
YXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQz
NSw3ICsyNzgxLDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAg
CiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewogICAgICAgICBhZGRUb0dy
YXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNv
bnN0YW50Q2hlY2tzKCkpOworICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0
KCkpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2
YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAK
QEAgLTI0ODYsMTkgKzI4MzUsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJ
ZCgKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewot
ICAgICAgICBOb2RlKiBvcmlnaW5hbEJhc2UgPSBiYXNlOwotICAgICAgICAKLSAgICAgICAgYWRk
VG9HcmFwaCgKLSAgICAgICAgICAgIENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgCi0gICAg
ICAgIGVtaXRDaGVja3ModmFyaWFudC5jb25zdGFudENoZWNrcygpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgIGJhc2UgPSB3ZWFr
SlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgIAotICAgICAgICBO
b2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgU3BlY0Nl
bGxPdGhlciwgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIs
IHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAgICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7
CisgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50KTsKKyAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgewor
ICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1
dEJ5SWRTdGF0dXMsIGlzRGlyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgTm9kZSogc2V0dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxv
YWRlZFZhbHVlKTsKICAgICAgICAgCkBAIC0yNTI2LDcgKzI4NjcsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CiAgICAgCiAgICAgICAgIGludCBuZXh0UmVnaXN0
ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBvcmlnaW5hbEJhc2UsIElt
bWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0
ZXIrKyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihuZXh0UmVnaXN0ZXIrKyksIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgCiAg
ICAgICAgIGhhbmRsZUNhbGwoCkBAIC0zNDY2LDYgKzM4MDcsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGlj
dGlvbigpOworCiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVyZSwgdWlkKTsKICAgICAgICAgICAgICAgICBpZiAo
c3RhdHVzLnN0YXRlKCkgIT0gR2V0QnlJZFN0YXR1czo6U2ltcGxlCiAgICAgICAgICAgICAgICAg
ICAgIHx8IHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEKQEAgLTM0NzMsOSArMzgxNSwxMSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRCeUlkRmx1c2gsIE9w
SW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKHNjb3BlKSkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3Ry
dWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkub25seVN0
cnVjdHVyZSgpKTsKKworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSB3ZWFrSlNDb25zdGFu
dChnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGxvYWQocHJl
ZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdHVzWzBdKTsKICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0g
ICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNl
dChwcmVkaWN0aW9uLCBiYXNlLCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJO
dW1iZXIsIG9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTM2MTksMTAgKzM5NjMsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKHNjb3BlKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQo
c3RhdHVzWzBdLnN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2so
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAgICAgICBoYW5k
bGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0
eU9mZnNldD4ob3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CisgICAgICAg
ICAgICAgICAgTm9kZSogYmFzZSA9IHdlYWtKU0NvbnN0YW50KGdsb2JhbE9iamVjdCk7CisgICAg
ICAgICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdHVzWzBdLCBnZXQo
VmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwogICAgICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUg
YWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2
aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksOSBAQCB2b2lkIENvbW1vbkRhdGE6OnZh
bGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMu
Y2hlY2soaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAg
ICAgfQogICAgIH0KKyAgICAKKyAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCog
d2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNo
cG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBA
QAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZy
YW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6
CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOwog
ICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOworICAg
IEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludHM7CisgICAgQmFnPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4g
YWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVt
cFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRzOwogICAgIAogICAgIFJlZlB0cjxQcm9maWxl
cjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4
NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMjEgKzI5NCwyMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNo
IENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAg
ICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZh
dWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuc3Ry
dWN0dXJlU2V0KCkuZmlsdGVyKGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYW50LnN0cnVjdHVyZVNldCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJpYW50cy5sYXN0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA9IGRhdGEuY2Fz
ZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGdldENhc2Uuc2V0KCkuZmlsdGVyKGJhc2VWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZXRDYXNlLnNldCgpLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5jYXNlc1tpLS1dID0gZGF0YS5jYXNlcy5sYXN0
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLnJlbW92ZUxhc3QoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIGlmIChkYXRh
LmNhc2VzLnNpemUoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoCi0gICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBkYXRhLnZhcmlhbnRzWzBdLCBk
YXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChp
bmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZGF0YS5jYXNlc1swXSwgZGF0YS5pZGVudGlm
aWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM3NCw4ICszNzMsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25zdGFudENoZWNrcygpLmlzRW1wdHko
KQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5k
bGUgcHJvdG90eXBlIGNhc2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4NgogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0zOTIsNyArMzkwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE11bHRpR2V0
QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpR2V0QnlPZmZzZXREYXRhLmFkZCgp
OwotICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gc3RhdHVzLnZhcmlhbnRzKCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1
cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzLmFwcGVuZCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuc3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR2V0QnlPZmZzZXRNZXRob2Q6OmxvYWQodmFyaWFudC5vZmZzZXQoKSkp
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51
bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
TXVsdGlHZXRCeU9mZnNldChkYXRhKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
QEAgLTQzMiw5ICs0MzUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51
bVZhcmlhbnRzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIGFkZENoZWNrcyhvcmlnaW4s
IGluZGV4SW5CbG9jaywgc3RhdHVzW2ldLmNvbnN0YW50Q2hlY2tzKCkpOworCisgICAgICAgICAg
ICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eShzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIENoZWNrU3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUtPm9y
aWdpbiwgY29uZGl0aW9uLm9iamVjdCgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghYWxsR29v
ZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID09IDEpIHsKICAgICAgICAgICAgICAg
ICAgICAgZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0
dXNbMF0sIGlkZW50aWZpZXJOdW1iZXIpOwpAQCAtNTI5LDQxICs1NTQsNzIgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKyAgICAKKyAgICB2b2lk
IGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0
IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgTXVsdGlHZXRCeU9mZnNldENhc2UmIGdl
dENhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgeworICAgICAgICAvLyBXaGVu
IHdlIGdldCB0byBoZXJlIHdlIGhhdmUgYWxyZWFkeSBlbWl0dGVkIGFsbCBvZiB0aGUgcmVxdWlz
aXRlIGNoZWNrcyBmb3IgZXZlcnl0aGluZy4KKyAgICAgICAgLy8gU28sIHdlIGp1c3QgbmVlZCB0
byBlbWl0IHdoYXQgdGhlIG1ldGhvZCBvYmplY3QgdGVsbHMgdXMgdG8gZW1pdC4KICAgICAgICAg
CisgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZ2V0
Q2FzZS5zZXQoKSk7CisKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2Fz
ZS5tZXRob2QoKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgewor
ICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAgICAg
ICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbWV0aG9kLmNvbnN0YW50KCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2Nr
LCBub2RlLCBub2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICAgICAgTm9kZSogY2hp
bGQgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbWV0aG9kLnByb3RvdHlwZSgpKTsKKyAgICAgICAgICAg
IGVtaXRHZXRCeU9mZnNldCgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIEVk
Z2UoY2hpbGQsIEtub3duQ2VsbFVzZSksIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbWl0
R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0
cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4g
PSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7
CiAKICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2
YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgYmFzZUZv
ckxvYWQ7Ci0gICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAg
IGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZVZhbHVlLm1fdmFsdWU7Ci0gICAgICAgIGlmIChK
U1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2Fk
LCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAg
Ly8gV2UgYXJlbid0IHNldCB1cCB0byBoYW5kbGUgcHJvdG90eXBlIHN0dWZmLgorICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgp
KTsKKworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQ
cm9wZXJ0eShiYXNlVmFsdWUubV92YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSwgdmFyaWFu
dC5vZmZzZXQoKSkpIHsKICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9k
ZSwgbV9ncmFwaC5mcmVlemUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAg
ICAgICAgICBOb2RlKiBjaGlsZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGluZGV4
SW5CbG9jaywgb3JpZ2luLCB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICBj
aGlsZEVkZ2UgPSBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGVt
aXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGNoaWxkRWRnZSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEdldEJ5
T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7
CisgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIAog
ICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0lu
bGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KG9mZnNldCkpCiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG5vZGUtPm9yaWdpbiwgY2hpbGRFZGdl
KSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRh
ID0gKm1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS5vZmZz
ZXQgPSB2YXJpYW50Lm9mZnNldCgpOworICAgICAgICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAg
ICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAg
CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFn
ZSk7CkBAIC02NDMsMTUgKzY5OSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnRDaGVjayhpbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQx
KCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZENoZWNrcygKLSAgICAgICAgTm9kZU9yaWdp
biBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYgY2hlY2tzKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNoZWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBjaGVja3Nb
aV0uY29uc3RhbnQoKSwgY2hlY2tzW2ldLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgfQotICAgIH0K
LQogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2lu
LCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewogICAgICAgICBpZiAobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5z
dHJ1Y3R1cmUoKSkgPT0gU3RydWN0dXJlUmVnaXN0ZXJlZEFuZFdhdGNoZWQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3Bw
CShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBv
aW50QWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVy
VmlldyogdmlldywgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKKyAg
ICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxv
Y2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludCogbmV1dGVyaW5nV2F0Y2hw
b2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludDo6Y3JlYXRlKCpj
b2RlQmxvY2stPnZtKCkpOwogICAgIG5ldXRlcmluZ1dhdGNocG9pbnQtPnNldCgpLT5hZGQod2F0
Y2hwb2ludCk7CkBAIC00NSwxMCArNDYsMjMgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBv
aW50QWRhcHRvcjo6YQogfQogCiB2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCi0gICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluZmVycmVkVmFs
dWUqIGluZmVycmVkVmFsdWUsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKICAgICBjb2RlQmxvY2st
PmFkZENvbnN0YW50KGluZmVycmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vz
bid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBp
dCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNo
cG9pbnQpOworICAgIGluZmVycmVkVmFsdWUtPmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNv
ZGVCbG9jaykpOworfQorCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6
OmFkZCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIHN3aXRjaCAoa2V5LmtpbmQo
KSkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgorICAgICAgICBj
b21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBj
b2RlQmxvY2spLT5pbnN0YWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGNvbW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9j
ayktPmluc3RhbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBEZXNpcmVkV2F0Y2hw
b2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQpAQCAtNzQsNiArODgsMTEgQEAgdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRk
TGF6aWx5KHZpZXcpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAgbV9hZGFwdGl2ZVN0cnVj
dHVyZVNldHMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpj
b25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZn
U2hvdWxkV2F0Y2goKSkKQEAgLTg4LDYgKzEwNyw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRz
OjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywg
Y29tbW9uRGF0YSk7CiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBj
b21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1v
bkRhdGEpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ss
IGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxp
ZCgpIGNvbnN0CkBAIC05NSw3ICsxMTUsMTggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFy
ZVN0aWxsVmFsaWQoKQogICAgIHJldHVybiBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAg
ICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZh
bHVlcy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZh
bGlkKCk7CisgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCisgICAgICAg
ICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKK30KKwordm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJEZXNpcmVkIHdhdGNocG9p
bnRzOlxuIik7CisgICAgb3V0LnByaW50KCIgICAgV2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRl
eHQobV9zZXRzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5saW5lIHdh
dGNocG9pbnQgc2V0czogIiwgaW5Db250ZXh0KG1faW5saW5lU2V0cywgY29udGV4dCksICJcbiIp
OworICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5m
ZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIg
dmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7CisgICAg
b3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dCht
X2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiSW5m
ZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5j
bHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQwLDMzICs0Miw1NiBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXN0cnVjdCBHZW5lcmljU2V0QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENv
ZGVCbG9jayosIFQgc2V0LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQorc3RydWN0IFNldFBvaW50
ZXJBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQg
c2V0LCBDb21tb25EYXRhJiBjb21tb24pCiAgICAgewotICAgICAgICByZXR1cm4gc2V0LT5hZGQo
d2F0Y2hwb2ludCk7CisgICAgICAgIHJldHVybiBzZXQtPmFkZChjb21tb24ud2F0Y2hwb2ludHMu
YWRkKGNvZGVCbG9jaykpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0
ZWQoVCBzZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVlbkludmFsaWRhdGVkKCk7IH0KKyAgICBzdGF0
aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIFQgc2V0LCBEdW1wQ29udGV4
dCopCisgICAgeworICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihzZXQpKTsKKyAgICB9CiB9
OwogCiBzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgQ29tbW9uRGF0YSYpOwogICAgIHN0YXRp
YyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgp
OwogICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQs
IEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIER1bXBDb250ZXh0KikKKyAgICB7CisgICAg
ICAgIG91dC5wcmludChSYXdQb2ludGVyKGluZmVycmVkVmFsdWUpKTsKKyAgICB9CiB9OwogCiBz
dHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKKyAgICBz
dGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBDb21tb25EYXRh
Jik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3
KiB2aWV3KQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSAhdmlldy0+bGVuZ3RoKCk7Ci0g
ICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBEdW1w
Q29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoSlNW
YWx1ZSh2aWV3KSwgY29udGV4dCkpOworICAgIH0KK307CisKK3N0cnVjdCBBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGlj
IGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1dhdGNoYWJsZSgpOworICAgIH0KKyAg
ICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KAorICAgICAgICBQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkK
KyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7CiAgICAg
fQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFk
YXB0b3IgPSBHZW5lcmljU2V0QWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJB
ZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2lu
dHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2lu
dFNldFR5cGUsIGJvb2w+IFN0YXRlTWFwOwpAQCAtODcsNyArMTEyLDcgQEAgcHVibGljOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBm
b3IgKGF1dG8mIHNldCA6IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxv
Y2ssIHNldCwgY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKKyAgICAgICAgICAg
IEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29tbW9uKTsKICAgICAgICAgCiAgICAgICAg
IG1fcmVhbGx5QWRkZWQgPSB0cnVlOwogICAgIH0KQEAgLTEwNyw2ICsxMzIsMTUgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9zZXRzLmNvbnRhaW5zKHNldCk7CiAgICAgfQogCisgICAgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAorICAgIHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKGNv
bnN0IFdhdGNocG9pbnRTZXRUeXBlJiBlbnRyeSA6IG1fc2V0cykgeworICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmR1bXBJbkNvbnRleHQob3V0LCBl
bnRyeSwgY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgSGFzaFNl
dDxXYXRjaHBvaW50U2V0VHlwZT4gbV9zZXRzOwogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAg
LTEyMiw2ICsxNTYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFs
dWUqKTsKICAgICB2b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAorICAg
IC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBV
c2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWly
ZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgorICAgIHZvaWQg
YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgCiAgICAgYm9v
bCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxv
Y2sqLCBDb21tb25EYXRhJik7CkBAIC0xNDQsMTIgKzE4MiwyMCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAgICAgfQorICAg
IGJvb2wgaXNXYXRjaGVkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7
CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHBy
aXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9z
ZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldCo+
IG1faW5saW5lU2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFs
dWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmlj
RGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0
Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBv
aW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFr
UmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTAsNyArNTAsMTQgQEAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp+RGVzaXJl
ZFdlYWtSZWZlcgogCiB2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6YWRkTGF6aWx5KEpTQ2Vs
bCogY2VsbCkKIHsKLSAgICBtX3JlZmVyZW5jZXMuYWRkKGNlbGwpOworICAgIGlmIChjZWxsKQor
ICAgICAgICBtX3JlZmVyZW5jZXMuYWRkKGNlbGwpOworfQorCit2b2lkIERlc2lyZWRXZWFrUmVm
ZXJlbmNlczo6YWRkTGF6aWx5KEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICBhZGRMYXppbHkodmFsdWUuYXNDZWxsKCkpOwogfQogCiBib29sIERlc2ly
ZWRXZWFrUmVmZXJlbmNlczo6Y29udGFpbnMoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShy
ZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IAogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKU1Zh
bHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIApAQCAtNDgsNiArNDksNyBAQCBw
dWJsaWM6CiAgICAgfkRlc2lyZWRXZWFrUmVmZXJlbmNlcygpOwogCiAgICAgdm9pZCBhZGRMYXpp
bHkoSlNDZWxsKik7CisgICAgdm9pZCBhZGRMYXppbHkoSlNWYWx1ZSk7CiAgICAgYm9vbCBjb250
YWlucyhKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
ODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU3LDggKzI1Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QKICAgICBpZiAobm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewog
ICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRz
W2ldLCBjb250ZXh0KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLmNh
c2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQo
ZGF0YS5jYXNlc1tpXSwgY29udGV4dCkpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQ
dXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9
IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CkBAIC01MzAsNiArNTMwLDggQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBpZiAodmFsdWUtPnBv
aW50c1RvSGVhcCgpKQogICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5Db250ZXh0KCp2
YWx1ZSwgJm15Q29udGV4dCksICJcbiIpOwogICAgIH0KKworICAgIG91dC5wcmludChpbkNvbnRl
eHQod2F0Y2hwb2ludHMoKSwgJm15Q29udGV4dCkpOwogICAgIAogICAgIGlmICghbXlDb250ZXh0
LmlzRW1wdHkoKSkgewogICAgICAgICBteUNvbnRleHQuZHVtcChvdXQpOwpAQCAtODQ4LDYgKzg1
MCwzMCBAQCB2b2lkIEdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhCiAgICAgfQog
fQogCitib29sIEdyYXBoOjp3YXRjaENvbmRpdGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYga2V5KQoreworICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5v
YmplY3QoKSk7CisgICAgaWYgKGtleS5oYXNQcm90b3R5cGUoKSkKKyAgICAgICAgbV9wbGFuLndl
YWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgIGlmIChrZXkuaGFz
UmVxdWlyZWRWYWx1ZSgpKQorICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5
KGtleS5yZXF1aXJlZFZhbHVlKCkpOworICAgIAorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRM
YXppbHkoa2V5KTsKKworICAgIGlmIChrZXkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQ
cmVzZW5jZSkKKyAgICAgICAgbV9zYWZlVG9Mb2FkLmFkZChzdGQ6Om1ha2VfcGFpcihrZXkub2Jq
ZWN0KCksIGtleS5vZmZzZXQoKSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKK3sKKyAgICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJh
c2UsIG9mZnNldCkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNz
Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5
dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTAyMCw4ICsxMDQ2LDEyIEBAIEpT
VmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRy
eUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBp
ZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpCisgICAgaWYg
KHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBJZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBj
b3VsZCBkbyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbgorICAgICAgICAvLyB3YXRjaGluZyB0byBj
b25zdGFudC1mb2xkIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI3MQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwor
ICAgIH0KICAgICAKICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBzdHJ1
Y3R1cmUuc2V0KCksIG9mZnNldCk7CiB9CkBAIC0xMTY3LDE3ICsxMTk3LDkgQEAgdm9pZCBHcmFw
aDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEdldEJ5SWRW
YXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50
LnN0cnVjdHVyZVNldCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBz
ZXQuc2l6ZSgpOyBqLS07KQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihzZXRbal0pOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vIERvbid0IG5lZWQgdG8gbWFyayBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJl
Y2F1c2UgdGhhdCB3b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21w
b3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gbWFyayB0aGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2Ug
TXVsdGlHZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHZh
cmlhbnRzIGRpZCB0aGF0LgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2Fs
bExpbmtTdGF0dXMoKSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IGdldENhc2Uu
c2V0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
UmVhZE9ubHlQb2ludGVyKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSwxNSBAQCBw
dWJsaWM6CiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1f
cGxhbi5pZGVudGlmaWVyczsgfQogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMo
KSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICAKKyAgICAvLyBSZXR1cm5zIGZh
bHNlIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlz
IGlzIGEgUHJlc2VuY2UgY29uZGl0aW9uLAorICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVh
cCB0byBxdWVyeSBpZiB0aGUgY29uZGl0aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0
aGUgR0Mga25vd3MKKyAgICAvLyB3aGF0J3MgZ29pbmcgb24uCisgICAgYm9vbCB3YXRjaENvbmRp
dGlvbihjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gQ2hlY2tzIGlm
IGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2
ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKKyAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3
aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4KKyAgICBib29s
IGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOworICAgIAogICAg
IEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CiAgICAgCkBA
IC04NDQsNiArODUzLDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEs
IDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1
bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAg
IEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5
dGVjb2RlS2lsbHM7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9m
ZnNldD4+IG1fc2FmZVRvTG9hZDsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQ
cmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9u
YXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR011bHRpR2V0
QnlPZmZzZXREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Zyb3plblZh
bHVlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3ZvaWQgR2V0QnlPZmZzZXRNZXRob2Q6OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KG1fa2luZCwgIjoiKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoK
KyAgICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChjb25zdGFu
dCgpLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAg
IG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGcm9t
UHJvdG90eXBlOgorICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCksICJAIiwgcG9pbnRlckR1bXBJ
bkNvbnRleHQocHJvdG90eXBlKCksIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKwordm9pZCBHZXRCeU9mZnNldE1ldGhvZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKwordm9pZCBNdWx0aUdl
dEJ5T2Zmc2V0Q2FzZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250
ZXh0KSwgIjoiLCBpbkNvbnRleHQobV9tZXRob2QsIGNvbnRleHQpKTsKK30KKwordm9pZCBNdWx0
aUdldEJ5T2Zmc2V0Q2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1
bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgR2V0QnlPZmZzZXRNZXRob2Q6OktpbmQg
a2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJp
bnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICBv
dXQucHJpbnQoIkxvYWRGcm9tUHJvdG90eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR011bHRpR2V0QnlPZmZzZXRE
YXRhX2gKKyNkZWZpbmUgREZHTXVsdGlHZXRCeU9mZnNldERhdGFfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgRnJvemVuVmFsdWU7CisKK2NsYXNzIEdldEJ5T2Zmc2V0TWV0aG9kIHsK
K3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBDb25z
dGFudCwKKyAgICAgICAgTG9hZCwKKyAgICAgICAgTG9hZEZyb21Qcm90b3R5cGUKKyAgICB9Owor
ICAgIAorICAgIEdldEJ5T2Zmc2V0TWV0aG9kKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9mZnNldE1ldGhvZCBjb25zdGFu
dChGcm96ZW5WYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0
LnUuY29uc3RhbnQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIEdldEJ5T2Zmc2V0TWV0aG9kIGxvYWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gTG9hZDsKKyAgICAgICAgcmVzdWx0LnUubG9hZC5vZmZzZXQgPSBvZmZzZXQ7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHZXRCeU9m
ZnNldE1ldGhvZCBsb2FkRnJvbVByb3RvdHlwZShGcm96ZW5WYWx1ZSogcHJvdG90eXBlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBMb2FkRnJvbVByb3RvdHlwZTsKKyAgICAgICAg
cmVzdWx0LnUubG9hZC5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgIHJlc3VsdC51Lmxv
YWQub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkOyB9
CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisg
ICAgRnJvemVuVmFsdWUqIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gdS5jb25zdGFudDsKKyAgICB9Cisg
ICAgCisgICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoa2luZCgpID09IExvYWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9h
ZC5wcm90b3R5cGU7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IExvYWQgfHwga2luZCgpID09IExv
YWRGcm9tUHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIHUubG9hZC5vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRl
OgorICAgIHVuaW9uIHsKKyAgICAgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50OworICAgICAgICBz
dHJ1Y3QgeworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHByb3RvdHlwZTsKKyAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBsb2FkOworICAgIH0gdTsKKyAgICBL
aW5kIG1fa2luZDsKK307CisKK2NsYXNzIE11bHRpR2V0QnlPZmZzZXRDYXNlIHsKK3B1YmxpYzoK
KyAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNdWx0
aUdldEJ5T2Zmc2V0Q2FzZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgY29uc3QgR2V0QnlPZmZz
ZXRNZXRob2QmIG1ldGhvZCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV9tZXRo
b2QobWV0aG9kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzZXQoKSB7
IHJldHVybiBtX3NldDsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXQ7IH0KKyAgICBjb25zdCBHZXRCeU9mZnNldE1ldGhvZCYgbWV0aG9kKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRob2Q7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cnVjdHVyZVNldCBtX3NldDsKKyAgICBHZXRC
eU9mZnNldE1ldGhvZCBtX21ldGhvZDsKK307CisKK3N0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0
YSB7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8TXVsdGlHZXRC
eU9mZnNldENhc2UsIDI+IGNhc2VzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpERkc6OkdldEJ5T2Zmc2V0TWV0aG9kOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR011bHRpR2V0QnlPZmZz
ZXREYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVk
ZSAiREZHRXBvY2guaCIKICNpbmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRG
R011bHRpR2V0QnlPZmZzZXREYXRhLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5j
bHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCkBAIC02NSwx
MSArNjYsNiBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXI7CiB9OwogCi1zdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgewotICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2
YXJpYW50czsKLX07Ci0KIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlcjsKICAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlh
bnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsMTAgKzMyNCwxOCBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRCeU9mZnNldDoK
ICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6
IHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGEoKS5vZmZzZXQ7CisKKyAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgp
ID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkKSB7CisgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtu
b3duQmFzZSA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4o
KSkgeworICAgICAgICAgICAgICAgIGlmIChncmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBv
ZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKICAgICAgICAg
aWYgKHZhbHVlLmlzSW5maW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5vZmZz
ZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgaWYgKCF2YWx1ZVtpXS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMzNyw0MiArMzQ1LDI4IEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OiB7CiAgICAgICAgIC8vIFdlIGNhbid0IGFsd2F5cyBndWFyYW50ZWUgdGhhdCB0aGUg
TXVsdGlHZXRCeU9mZnNldCBpcyBzYWZlIHRvIGV4ZWN1dGUgaWYgaXQKLSAgICAgICAgLy8gY29u
dGFpbnMgbG9hZHMgZnJvbSBwcm90b3R5cGVzLiBXZSBrbm93IHRoYXQgaXQgd29uJ3QgbG9hZCBm
cm9tIHRob3NlIHByb3RvdHlwZXMgaWYKLSAgICAgICAgLy8gd2Ugd2F0Y2ggdGhlIG11dGFiaWxp
dHkgb2YgdGhlIHByb3BlcnRpZXMgYmVpbmcgbG9hZGVkLiBTbywgaGVyZSB3ZSB0cnkgdG8KLSAg
ICAgICAgLy8gY29uc3RhbnQtZm9sZCBwcm90b3R5cGUgbG9hZHMsIGFuZCBpZiB0aGF0IGZhaWxz
LCB3ZSBjbGFpbSB0aGF0IHdlIGNhbm5vdCBob2lzdC4gV2UKLSAgICAgICAgLy8gYWxzbyBrbm93
IHRoYXQgYSBsb2FkIGlzIHNhZmUgdG8gZXhlY3V0ZSBpZiB3ZSBhcmUgd2F0Y2hpbmcgdGhlIHBy
b3RvdHlwZSdzCi0gICAgICAgIC8vIHN0cnVjdHVyZS4KLSAgICAgICAgZm9yIChjb25zdCBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHMpIHsKLSAgICAgICAgICAgIGlmICghdmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBJdCdzIG5vdCBhIHByb3RvdHlwZSBsb2FkLgotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1Zh
bHVlIGJhc2UgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKLSAgICAgICAgICAgIEZyb3plblZh
bHVlKiBmcm96ZW4gPSBncmFwaC5mcmVlemUoYmFzZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUu
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQKLSAgICAgICAg
ICAgICAgICAmJiBmcm96ZW4tPnN0cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpCi0gICAgICAg
ICAgICAgICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldCh2YXJpYW50Lm9m
ZnNldCgpKSkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgd2F0Y2hpbmcgdGhh
dCBpdCdzIHNhZmUgdG8gbG9hZCBmcm9tIHRoaXMuCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3Rh
bnRSZXN1bHQgPSBncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAotICAgICAgICAgICAgICAg
IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFu
dC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAg
ICAgICAgICAgLy8gQ291bGRuJ3QgY29uc3RhbnQtZm9sZCBhIHByb3RvdHlwZSBsb2FkLiBUaGVy
ZWZvcmUsIHdlIHNob3VsZG4ndCBob2lzdAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhl
IHNhZmV0eSBvZiB0aGUgbG9hZCBkZXBlbmRzIG9uIHN0cnVjdHVyZSBjaGVja3Mgb24gdGhlIHBy
b3RvdHlwZSwKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2UncmUgdG9vIGNoZWFwIHRvIHZlcmlm
eSB0aGF0IGhlcmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBj
b250YWlucyBsb2FkcyBmcm9tIHByb3RvdHlwZXMuIElmIHRoZSBsb2FkIHJlcXVpcmVzIGEgY2hl
Y2sgaW4gSVIsIHdoaWNoIGlzIHJhcmUsIHRoZW4KKyAgICAgICAgLy8gd2UgY3VycmVudGx5IGNs
YWltIHRoYXQgd2UgZG9uJ3Qga25vdyBpZiBpdCdzIHNhZmUgdG8gZXhlY3V0ZSBiZWNhdXNlIGZp
bmRpbmcgdGhhdAorICAgICAgICAvLyBjaGVjayBpbiB0aGUgYWJzdHJhY3Qgc3RhdGUgd291bGQg
YmUgaGFyZC4gSWYgdGhlIGxvYWQgcmVxdWlyZXMgd2F0Y2hwb2ludHMsIHdlIGp1c3QKKyAgICAg
ICAgLy8gY2hlY2sgaWYgd2UncmUgbm90IGluIGEgY2xvYmJlcmVkIHN0YXRlIChpLmUuIGluIGJl
dHdlZW4gYSBzaWRlIGVmZmVjdCBhbmQgYW4KKyAgICAgICAgLy8gaW52YWxpZGF0aW9uIHBvaW50
KS4KKyAgICAgICAgZm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuY2FzZXMpIHsKKyAgICAgICAgICAgIEdldEJ5T2Zm
c2V0TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAgICAgICBzd2l0Y2gg
KG1ldGhvZC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Oklu
dmFsaWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkNvbnN0YW50OiAvLyBPSyBiZWNhdXNlIGNvbnN0YW50cyBhcmUgYWx3YXlzIHNhZmUgdG8gZXhl
Y3V0ZS4KKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6IC8vIE9LIGJl
Y2F1c2UgdGhlIE11bHRpR2V0QnlPZmZzZXQgaGFzIGl0cyBvd24gY2hlY2tzIGZvciBsb2FkaW5n
IGZyb20gc2VsZi4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0
QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOgorICAgICAgICAgICAgICAgIC8vIE9u
bHkgT0sgaWYgdGhlIHN0YXRlIGlzbid0IGNsb2JiZXJlZC4gVGhhdCdzIGFsbW9zdCBhbHdheXMg
dGhlIGNhc2UuCisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSgpICE9IFN0cnVjdHVyZXNBcmVXYXRjaGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFncmFwaC5pc1NhZmVUb0xvYWQobWV0aG9kLnBy
b3RvdHlwZSgpLT5jYXN0PEpTT2JqZWN0Kj4oKSwgbWV0aG9kLm9mZnNldCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwg
ZWl0aGVyOgotICAgICAgICAgICAgLy8gLSBOb3QgbG9hZCBmcm9tIHRoZSBwcm90b3R5cGUgYmVj
YXVzZSBjb25zdGFudCBmb2xkaW5nIHdpbGwgc3VjY2VlZCBpbiB0aGUKLSAgICAgICAgICAgIC8v
ICAgYmFja2VuZCwgb3IKLSAgICAgICAgICAgIC8vIC0gRW1pdCBpbnZhbGlkIGNvZGUgdGhhdCBm
YWlscyB3YXRjaHBvaW50IGNoZWNrcy4gVGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlCi0gICAgICAg
ICAgICAvLyAgIHByb3BlcnR5IGJlY29tZXMgbXV0YWJsZSBhZnRlciB0aGlzIHBvaW50LCBzaW5j
ZSB3ZSBhbHJlYWR5IHNldCB0aGUgd2F0Y2hwb2ludAotICAgICAgICAgICAgLy8gICBhYm92ZS4g
VGhpcyBjYXNlIGlzIE9LIHNpbmNlIHRoZSBjb2RlIHdpbGwgZmFpbCB3YXRjaHBvaW50IGNoZWNr
cyBhbmQgbmV2ZXIKLSAgICAgICAgICAgIC8vICAgZ2V0IGluc3RhbGxlZC4KICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4Niw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJp
YW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlcyh2YXJpYW50LnN0cnVj
dHVyZVNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0
Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tT
dHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byB3YXRjaCB0aGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlP
ZmZzZXQgaWYgYW55IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMg
ZGlkIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSYgZ2V0Q2FzZSA6IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkuY2FzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0
cnVjdHVyZXMoZ2V0Q2FzZS5zZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MzcsMjQgKzM4MzcsMjQgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0g
bV9ub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgIGlmIChkYXRhLnZhcmlh
bnRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBjcmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRo
IHplcm8gaW5wdXRzLiBMTFZNIGRvZXNuJ3QgbGlrZSB0aGF0LgogICAgICAgICAgICAgdGVybWlu
YXRlKEJhZENhY2hlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXpl
KCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0t
OykKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS5jYXNlcy5zaXpl
KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykK
ICAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRC
eU9mZnNldCBjYXNlICIsIGkpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBmYWlsIikpOwogICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZz
ZXQgY29udGludWF0aW9uIikpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2Us
IDI+IGNhc2VzOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEdl
dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7IGotLTspIHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0
KClbal07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNl
c1tpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgp
OyBqLS07KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNl
LnNldCgpW2pdOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAg
ICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVj
dHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CiAgICAgICAgICAgICB9CkBAIC0zODY1LDI5
ICszODY1LDM2IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQubV9uZXh0QmxvY2s7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ss
IDI+IHJlc3VsdHM7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAx
IDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKKyAgICAgICAg
ICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRh
LmNhc2VzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAg
ICAgICAgICBiYXNlU2V0Lm1lcmdlKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAg
ICAgTFZhbHVlIHJlc3VsdDsKLSAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQ7Ci0g
ICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdGFudFJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKLSAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFzZVN0cnVj
dHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChjb25zdGFudFJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudFJlc3VsdCkpOwotICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAg
ICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29u
c3RhbnQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVl
OjplbmNvZGUobWV0aG9kLmNvbnN0YW50KCktPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRo
b2Q6OkxvYWQ6CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVBy
b3RvdHlwZTogewogICAgICAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUJhc2U7Ci0gICAgICAg
ICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcih2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09
IEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJh
c2UgPSBiYXNlOwotICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5v
ZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcihtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxs
KCkpOworICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgp
KSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9w
ZXJ0eUJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBsb2FkUHJvcGVydHkocHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIs
IHZhcmlhbnQub2Zmc2V0KCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGxvYWRQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRh
LmlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKHJlc3VsdCkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRT
ZWxmQWNjZXNzKAogICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBi
b29sIGNvbXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQ
cm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKKyAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkpCiAgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvcklt
cHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxv
Y2spKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
QEAgLTEzMiw0NyArMTMyLDMzIEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygK
ICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0g
ICAgSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorc3RhdGljIHZvaWQgY2hlY2tPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAogICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAob2JqZWN0LT5zdHJ1
Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNo
cG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2Rl
LCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0g
ICAgICAgICAgICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgotICAgICAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAg
ICAgICAgICAgICBqaXQsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2lu
dCk7Ci0gICAgICAgICAgICBvay5saW5rKCZqaXQpOwotICAgICAgICB9CisgICAgaWYgKGNvbmRp
dGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAg
ICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNo
cG9pbnQoCisgICAgICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaywgY29u
ZGl0aW9uKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgaml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CisKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOworICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hH
UFIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGJyYW5jaFN0cnVjdHVyZShq
aXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgICAgIGJyYW5jaFN0cnVjdHVy
ZSgKKyAgICAgICAgICAgIGppdCwgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc3RydWN0dXJlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKK3N0YXRpYyB2b2lkIGNoZWNrT2JqZWN0
UHJvcGVydHlDb25kaXRpb25zKAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBzZXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
CiAgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgp
KTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3Rv
dHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2Nr
LCBzdHViSW5mbywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgewor
ICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAorICAgICAgICAgICAgY29uZGl0
aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7
CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgdGFyZ2V0KQpAQCAtMjk2LDExICsyODIsMTMgQEAgc3RhdGljIEZ1bmN0
aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcgogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRT
dHViKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCi0g
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2Fk
VGFyZ2V0RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LAotICAgIENvZGVM
b2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJl
bCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCisgICAgRnVuY3Rpb25QdHIg
Y3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2Us
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRh
cmdldEZyb21Qcm94eSwKKyAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCBDb2RlTG9j
YXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWws
CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0KKyAgICBBU1NF
UlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpOworICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNl
R1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKQEAgLTM0Niwz
NyArMzM0LDMxIEBAIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0
dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAg
IGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRp
b25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB2bS0+cmVnaXN0
ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRX
YXRjaHBvaW50KGNvZGVCbG9jaykpOwogCiAgICAgaWYgKHdhdGNocG9pbnRTZXQpCiAgICAgICAg
IHdhdGNocG9pbnRTZXQtPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwog
Ci0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOyAKLSAgICBKU09iamVj
dCogcHJvdG9PYmplY3QgPSAwOwotICAgIGlmIChjaGFpbikgewotICAgICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAgICAgcHJvdG9PYmplY3Qg
PSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAg
ICAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1
cmUoKTsKLSAgICAgICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1
cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICB2bS0+cmVnaXN0
ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRX
YXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29k
ZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMs
IHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAg
ICAgICAgfQotICAgICAgICBBU1NFUlQoIXByb3RvT2JqZWN0IHx8IHByb3RvT2JqZWN0LT5zdHJ1
Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKKyAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0
aW9ucygKKyAgICAgICAgY29uZGl0aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0
LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgeworICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgIGlmIChj
b25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlv
blNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAg
Y3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwg
b2Zmc2V0KTsKICAgICB9CiAgICAgCi0gICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKICAgICBHUFJSZWcgYmFzZUZvckFj
Y2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7
Ci0gICAgICAgIGlmIChjaGFpbikgeworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIg
ZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFy
Z2V0LgogICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCiAgICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJv
eHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBzdHViSml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihhbHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBiYXNlRm9yQWNj
ZXNzR1BSID0gc2NyYXRjaEdQUjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZv
ciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0dXJlIGNoZWNrcyBi
ZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8KQEAgLTYyNSw5ICs2MDcsOCBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWCiAgICAgICAgIGFzT2JqZWN0KGNlbGwp
LT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CiAgICAgfQotICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKTsKICAgICAKLSAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlT
bG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQor
ICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCiAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgcmV0dXJuIEF0dGVtcHRUb0NhY2hlOwpA
QCAtODI1LDIxICs4MDYsMjEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0
QnlJRAogICAgIH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgp
ID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgU3RydWN0dXJlQ2hh
aW4qIHByb3RvdHlwZUNoYWluID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAwOwogICAgIAorICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICBpZiAoc2xvdC5p
c1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICBpZiAo
dHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgICAgIGlm
IChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBl
Q2hhaW4oZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKAot
ICAgICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwg
b2Zmc2V0KTsKLSAgICAgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVBy
b3BlcnR5SGl0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0
dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisKKyAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsK
KworICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBjb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZy
b20oc3R1YkluZm8pOwpAQCAtODUwLDcgKzgzMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlCdWlsZEdldEJ5SUQKICAgICAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lOwogICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhl
Yywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3Rv
dHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCAKKyAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwg
aWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5zbG90
QmFzZSgpLCBvZmZzZXQsIAogICAgICAgICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHks
IHNsb3Qud2F0Y2hwb2ludFNldCgpLCAKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZv
KSksIHN0dWJSb3V0aW5lKTsKQEAgLTg2OSw3ICs4NTAsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgCiAgICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRB
Y2Nlc3MoCiAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNz
VHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwKLSAgICAgICAgcHJvdG90eXBlQ2hhaW4sIGNv
dW50KSk7CisgICAgICAgIGNvbmRpdGlvblNldCkpOwogICAgIAogICAgIHBhdGNoSnVtcFRvR2V0
QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwogICAgIApA
QCAtOTkxLDI2ICs5NzIsMjggQEAgc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAogICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0
dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSom
IHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtp
bmQpCitzdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgRXhlY1N0YXRlKiBl
eGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCisgICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJl
LCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogewogICAgIFByb3Bl
cnR5TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CisgICAgb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIGlmICghb2xkU3RydWN0
dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJ
bmRleChwbmFtZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBwcm9wZXJ0eU9mZnNldDsKICAgICBzdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25j
dXJyZW50bHkob2xkU3RydWN0dXJlLCBpZGVudC5pbXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsK
IAogICAgIGlmICghc3RydWN0dXJlIHx8ICFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCAhc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2Fj
aGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxs
b2MsIGlmIHdlIGRvbid0IGhhdmUKICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQg
aGFwcGVuLgogICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKICAgICAgICAg
JiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKQogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFs
bG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKQEAgLTEwMTgsMTQgKzEwMDEsMTQgQEAgc3RhdGlj
IFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAogICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZSkgPT0gSW52YWxpZFByb3Rv
dHlwZUNoYWluKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIGVtaXRQdXRUcmFuc2l0aW9uU3R1YgorICAgIGlm
IChwdXRLaW5kID09IE5vdERpcmVjdCkgeworICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgICAgICAgICAqdm0sIGV4ZWMt
PmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5p
bXBsKCkpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxh
YmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYg
c3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKQEAgLTEwODEsMTcgKzEwNjQsOCBA
QCBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IAogICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKICAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2soCi0gICAgICAgIG9sZFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMt
PmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICBz
Y3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAKLSAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3Qp
IHsKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVD
aGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5z
aXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAg
ICAgICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBjaGVja09iamVj
dFByb3BlcnR5Q29uZGl0aW9ucygKKyAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUjEpOwogCiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIApAQCAtMTIyNiw3ICsx
MjAwLDcgQEAgc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQQogICAgIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2so
KSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRv
QWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkp
OwogICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKQEAgLTEyNTQsOCArMTIy
OCw4IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAg
ICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUpOwotCi0gICAgcmV0dXJuIG9sZFN0cnVj
dHVyZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQpCkBAIC0xMjc5LDEyICsxMjUzLDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3Qu
aXNDYWNoZWFibGVQdXQoKSkgewogICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpOZXdQcm9wZXJ0eSkgewogCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSA9IGVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVyZShleGVjLCB2bSwg
c3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotICAgICAgICAgICAg
aWYgKCFvbGRTdHJ1Y3R1cmUpCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsK
KyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUs
IGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25T
ZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoCkBAIC0xMjkyLDcgKzEyNjUsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hD
YWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlh
dGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90
eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQ
dXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0
cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAg
fQpAQCAtMTMxMCwyMCArMTI4MywzMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlECiAgICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3Bp
bGwpIHsKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKIAotICAg
ICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOwotICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICBzaXplX3QgY291
bnQgPSAwOwotICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAg
ICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywg
c3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
Y291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
KyAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYg
KHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNl
dCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVBy
b3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwg
c2xvdC5iYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBl
Q2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CisgICAg
ICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0
IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwogICAgICAg
ICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBo
aWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90
KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3Vu
dCwKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xv
dCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNsb3QuYmFzZSgpLAogICAgICAgICAgICAgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9E
b25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLApAQCAtMTMzNCw3ICsxMzE4
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBs
aXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9t
U2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNs
b3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAg
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTM3OCwxNyArMTM2MiwxNiBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgICAgICBpZiAobGlzdC0+
aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwg
Z2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KIAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUgPSBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoZXhlYywg
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0K
LSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlKSAKKyAgICAgICAgICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlOworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywg
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xk
U3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBz
dHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgc3R1YlJvdXRpbmUg
PSBzdHViSW5mby5zdHViUm91dGluZTsKICAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKICAg
ICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAg
ICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAg
ICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwKICAgICAgICAg
ICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICB9IGVsc2UgewpAQCAtMTQyMSwy
MSArMTQwNCwzMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAg
ICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRl
cigpKQogICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7
CiAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IDA7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IDA7
Ci0gICAgICAgIGlmIChiYXNlVmFsdWUgIT0gc2xvdC5iYXNlKCkpIHsKLSAgICAgICAgICAgIGNv
dW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1
cmUsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
Y291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnBy
b3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKKyAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAg
ICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAg
ICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlk
T2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKwog
ICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKICAgICAgICAg
Ym9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZv
cihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0
eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNl
KCksCiAgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAg
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
bGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLApAQCAtMTQ0Niw3ICsxNDQwLDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICBsaXN0LT5hZGRB
Y2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigp
ID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAot
ICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY3VzdG9t
U2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOwpAQCAtMTQ4NSwxMSArMTQ3OSwxNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CiAgICAgCi0gICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKLSAgICBKU1ZhbHVlIGZvdW5kU2xvdEJhc2UgPSB3
YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKTsKLSAgICBzaXplX3QgY291bnQg
PSAhZm91bmRTbG90QmFzZSB8fCBmb3VuZFNsb3RCYXNlICE9IGJhc2UgPyAKLSAgICAgICAgbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBzdHJ1Y3R1cmUsIGZvdW5k
U2xvdEJhc2UsIGlkZW50LCBvZmZzZXRJZ25vcmVkKSA6IDA7Ci0gICAgaWYgKGNvdW50ID09IElu
dmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7CisgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmIChzbG90LnNsb3RCYXNl
KCkgIT0gYmFzZSkgeworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwg
aWRlbnQuaW1wbCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5p
bXBsKCkpOworICAgIH0KKyAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwpAQCAtMTUxNCw3ICsxNTE0LDYgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgCiAgICAgewpAQCAtMTU0NSwxOCArMTU0NCw4IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgICAgIGlmIChzbG90Lndh
dGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLT5hZGQoc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIGN1
cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gYXNP
YmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKLSAgICAgICAg
ICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b3R5cGUtPnN0cnVjdHVyZSgpOwot
ICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IHByb3RvdHlwZSwgcHJvdG9TdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywg
c3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5
RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9p
bnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxv
Y2spKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0K
KyAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCisgICAgICAgICAgICBjb25k
aXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNh
c2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
c3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
CShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotCi0j
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZUNoYWluLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKHByb3Rv
dHlwZSkKLXsKLSAgICBBU1NFUlQobV9wcm90b3R5cGUuaXNOdWxsKCkgfHwgbV9wcm90b3R5cGUu
aXNPYmplY3QoKSk7Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gYXNPYmplY3QocHJvdG90eXBlKS0+c3Ry
dWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1
Y3R1cmUoKSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGN1cnJlbnQpOwotfQotCi1JbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdCkKLSAgICAsIG1fcHJvdG90eXBlKGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2ds
b2JhbE9iamVjdCkpCi17Ci0gICAgaWYgKG1fcHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBhc09iamVjdChtX3Byb3RvdHlw
ZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90
eXBlU3RydWN0dXJlKCkpCi0gICAgICAgIG1fdmVjdG9yLmFwcGVuZChjdXJyZW50KTsKLX0KLQot
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVy
ZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAg
LCBtX3Byb3RvdHlwZShoZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQot
ewotICAgIG1fdmVjdG9yLmFwcGVuZChwcm90b3R5cGVTdHJ1Y3R1cmUpOwotfQotCi1JbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKLSAgICA6IG1fZ2xv
YmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX3Byb3RvdHlwZSho
ZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmplY3QpKQotewotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGNoYWluLT5oZWFkKClbaV07ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBw
ZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWlu
OjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUq
IGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQpCi0gICAgOiBtX2ds
b2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQotICAgICwgbV9wcm90b3R5cGUo
aGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2JqZWN0KSkKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNo
YWluLT5oZWFkKClbaV0uZ2V0KCkpOwotfQotCi1JbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp+SW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpCi17Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUg
PSBtX3Byb3RvdHlwZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1
Y3R1cmUoKSAhPSBtX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgY3VycmVudFByb3RvdHlwZSA9IG1fdmVjdG9yW2ldLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6
bWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZlY3Rv
cltpXSAhPSBjaGFpbi0+aGVhZCgpW2ldLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBpZiAoY2hhaW4tPmhlYWQoKVttX3ZlY3Rvci5zaXplKCldKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQot
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewot
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAg
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgp
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92ZWN0b3JbaV07Ci0gICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEludGVuZGVkU3RydWN0dXJl
Q2hhaW46OnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKLXsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhdChpKS0+dGFr
ZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUpTT2JqZWN0KiBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjp0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFt
X3ZlY3Rvci5pc0VtcHR5KCkpOwotICAgIGlmIChtX3ZlY3Rvci5zaXplKCkgPT0gMSkKLSAgICAg
ICAgcmV0dXJuIGFzT2JqZWN0KG1fcHJvdG90eXBlKTsKLSAgICByZXR1cm4gYXNPYmplY3QobV92
ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0b3JlZFByb3RvdHlwZSgpKTsKLX0KLQotYm9v
bCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpvcGVyYXRvcj09KGNvbnN0IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBtX2dsb2JhbE9iamVjdCA9PSBv
dGhlci5tX2dsb2JhbE9iamVjdAotICAgICAgICAmJiBtX3Byb3RvdHlwZSA9PSBvdGhlci5tX3By
b3RvdHlwZQotICAgICAgICAmJiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsKLX0KLQotdm9p
ZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpnYXRoZXJDaGVja3MoQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVja1ZlY3RvciYgdmVjdG9yKSBjb25zdAotewotICAgIEpTVmFsdWUgY3VycmVudFByb3RvdHlw
ZSA9IG1fcHJvdG90eXBlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsr
aSkgewotICAgICAgICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRQ
cm90b3R5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBhdChpKTsK
LSAgICAgICAgdmVjdG9yLmFwcGVuZChDb25zdGFudFN0cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmpl
Y3QsIGN1cnJlbnRTdHJ1Y3R1cmUpKTsKLSAgICAgICAgY3VycmVudFByb3RvdHlwZSA9IGN1cnJl
bnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2dsb2JhbE9iamVjdCk7Ci0gICAgfQot
fQotCi12b2lkIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1f
Z2xvYmFsT2JqZWN0KTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJm1fcHJv
dG90eXBlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCi0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKCZtX3ZlY3RvcltpXSk7Ci19
Ci0KLXZvaWQgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKLX0KLQotdm9pZCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIihnbG9iYWwgPSAi
LCBSYXdQb2ludGVyKG1fZ2xvYmFsT2JqZWN0KSwgIiwgaGVhZCA9ICIsCi0gICAgICAgIGluQ29u
dGV4dChtX3Byb3RvdHlwZSwgY29udGV4dCksICIsIHZlY3RvciA9IFsiKTsKLSAgICBDb21tYVBy
aW50ZXIgY29tbWE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUo
KTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG1f
dmVjdG9yW2ldLCBjb250ZXh0KSk7Ci0gICAgb3V0LnByaW50KCJdKSIpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMTg3NjA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gK
LSNkZWZpbmUgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCi0KLSNpbmNsdWRlICJDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFzcyBWTTsKLXN0cnVj
dCBEdW1wQ29udGV4dDsKLQotY2xhc3MgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBS
ZWZDb3VudGVkPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHsKLXB1YmxpYzoKLSAgICBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKTsKLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSopOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1
Y3R1cmUpOwotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKTsKLSAgICBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQpOwotICAgIH5JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKCk7Ci0gICAgCi0gICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKLSAgICBib29s
IG1hdGNoZXMoU3RydWN0dXJlQ2hhaW4qKSBjb25zdDsKLSAgICBib29sIG1heUludGVyY2VwdFN0
b3JlVG8oVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgYm9vbCBpc05vcm1hbGl6ZWQoKTsK
LSAgICAKLSAgICBib29sIHRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCk7Ci0g
ICAgCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsg
fQotICAgIAotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgp
OyB9Ci0gICAgU3RydWN0dXJlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVj
dG9yW2luZGV4XTsgfQotICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgIAotICAgIEpTT2JqZWN0KiB0ZXJtaW5hbFBy
b3RvdHlwZSgpIGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmVjdG9yLmxhc3QoKTsgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGdhdGhlckNoZWNr
cyhDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQq
KSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2Jq
ZWN0OwotICAgIEpTVmFsdWUgbV9wcm90b3R5cGU7Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSo+IG1f
dmVjdG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmgJKHJldmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjkzLDcgKzI5Myw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzQ2VsbCgpIGNvbnN0OwogICAgIEpTQ2VsbCogYXNDZWxsKCkgY29uc3Q7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1ZhbGlkQ2FsbGVlKCk7Ci0gICAgICAgIAor
CiAgICAgSlNWYWx1ZSBzdHJ1Y3R1cmVPclVuZGVmaW5lZCgpIGNvbnN0OwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxODc2MDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3MjMsNiArMjcyMywxMyBAQCBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0
YXRlKiBleGVjCiAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKIH0KIAordm9pZCBKU09iamVjdDo6Y29udmVy
dFRvRGljdGlvbmFyeShWTSYgdm0pCit7CisgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKKyAgICBzZXRTdHJ1Y3R1cmUo
CisgICAgICAgIHZtLCBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKSk7Cit9CisKIHZvaWQg
SlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKFZNJiB2bSwgc2l6ZV90IG91
dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKIHsK
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxODc2MDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MjksMTAgKzYyOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJl
YWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3Ry
dWN0dXJlKik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVj
ZXNzYXJ5KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICB2b2lkIGNvbnZlcnRUb0RpY3Rpb25hcnko
Vk0mIHZtKQotICAgIHsKLSAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnRvQ2Fj
aGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSkpKTsKLSAgICB9Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJik7CiAKICAg
ICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KFZNJiB2bSkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODc2MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5NCw0OCArMTk0LDYgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQWRkKENh
bGxGcmFtZSogYwogCiAjZGVmaW5lIEludmFsaWRQcm90b3R5cGVDaGFpbiAoc3RkOjpudW1lcmlj
X2xpbWl0czxzaXplX3Q+OjptYXgoKSkKIAotaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eU9mZnNldCYgc2xvdE9mZnNldCkKLXsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUt
PnZtKCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgCi0gICAgd2hpbGUgKDEpIHsK
LSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIElu
dmFsaWRQcm90b3R5cGVDaGFpbjsKLQotICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8g
PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0gICAgICAgIGlmICh0eXBlSW5mby5oYXNJbXB1cmVH
ZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiAhdHlwZUluZm8ubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dh
dGNocG9pbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFByb3RvdHlwZUNoYWluOwot
ICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9y
TG9va3VwKGNhbGxGcmFtZSk7Ci0KLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgc2xvdEJh
c2UgaW4gdGhlIGJhc2UncyBwcm90b3R5cGUgY2hhaW4sIHRoZW4gdGhlIGJhc2UKLSAgICAgICAg
Ly8gbXVzdCBiZSBhIHByb3h5IGZvciBhbm90aGVyIG9iamVjdC4KLQotICAgICAgICBpZiAodi5p
c051bGwoKSkgewotICAgICAgICAgICAgaWYgKCFzbG90QmFzZSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUHJvdG90eXBlQ2hhaW47Ci0gICAgICAg
IH0KLQotICAgICAgICBKU0NlbGwqIGNlbGwgPSB2LmFzQ2VsbCgpOwotICAgICAgICBzdHJ1Y3R1
cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3Np
bmcgYSBwcm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAotICAgICAg
ICAvLyBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgotICAgICAgICBpZiAo
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0
dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgYXNPYmplY3QoY2VsbCkpOwotICAgICAgICAgICAg
aWYgKHNsb3RCYXNlID09IGNlbGwpCi0gICAgICAgICAgICAgICAgc2xvdE9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICAgICAgfQotICAgICAgICArK2NvdW50
OwotCi0gICAgICAgIGlmIChzbG90QmFzZSA9PSBjZWxsKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgICAgICAKLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KIGlubGluZSBzaXplX3Qgbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW4oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKQEAgLTI1OCwyMyArMjE2
LDYgQEAgaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbihDYQogICAgIH0KIH0K
IAotaW5saW5lIGJvb2wgaXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6ZWQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgZm9yICg7Oykgewot
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgaWYgKHYuaXNOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBzdHJ1Y3R1cmUgPSB2
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3BlcmF0aW9uc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24g
MTg3NjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgOiBtX3Byb3BlcnR5VHlwZShUeXBlVW5zZXQpCiAgICAgICAgICwgbV9vZmZzZXQoaW52
YWxpZE9mZnNldCkKICAgICAgICAgLCBtX3RoaXNWYWx1ZSh0aGlzVmFsdWUpCisgICAgICAgICwg
bV9zbG90QmFzZShudWxscHRyKQogICAgICAgICAsIG1fd2F0Y2hwb2ludFNldChudWxscHRyKQog
ICAgICAgICAsIG1fY2FjaGVhYmlsaXR5KENhY2hpbmdBbGxvd2VkKQogICAgIHsKQEAgLTExNCw3
ICsxMTUsNiBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogc2xvdEJhc2UoKSBjb25zdAogICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlUeXBlICE9IFR5cGVVbnNldCk7CiAgICAgICAg
IHJldHVybiBtX3Nsb3RCYXNlOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxODc2MDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDks
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxMiw3ICs0MTIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgZWxzZQogICAgICAgICBtYXhUcmFuc2l0aW9uTGVu
Z3RoID0gc19tYXhUcmFuc2l0aW9uTGVuZ3RoOwogICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25Db3VudCgpID4gbWF4VHJhbnNpdGlvbkxlbmd0aCkgewotICAgICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUp
OworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKICAgICAgICAgQVNTRVJUKHN0cnVj
dHVyZSAhPSB0cmFuc2l0aW9uKTsKICAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsK
QEAgLTQ4OSwxMSArNDg5LDExIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFu
Z2VUcmEKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0
aW9uYXJ5S2luZCBraW5kKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCwg
RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewog
ICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAK
LSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CisgICAg
U3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsK
IAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7CkBAIC01MDcsOSArNTA3LDkg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaQogICAgIHJldHVybiB0
cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9u
YXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUq
IGRlZmVycmVkKQogewotICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kKTsKKyAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCwgZGVmZXJyZWQpOwog
fQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC03NjEsNiArNzYxLDEwIEBAIHZv
aWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKIFdhdGNocG9pbnRTZXQqIFN0
cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoVk0mIHZtLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFpc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKTsKKworICAgIC8vIEluIHNvbWUgcGxhY2VzIGl0J3MgY29udmVuaWVudCB0byBjYWxs
IHRoaXMgd2l0aCBhbiBpbnZhbGlkIG9mZnNldC4gU28sIHdlIGRvIHRoZSBjaGVjayBoZXJlLgor
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIGFsbG9jYXRlUmFyZURhdGEo
dm0pOwpAQCAtNzgxLDExICs3ODUsNyBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yCiB7CiAgICAgQVNTRVJUKCFpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAg
ICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBnZXQodm0sIHByb3BlcnR5TmFtZSk7Ci0g
ICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KTsK
KyAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIGdldCh2bSwgcHJv
cGVydHlOYW1lKSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5UmVwbGFj
ZW1lbnQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkBAIC0xMTE3LDYgKzExMTcsMTcg
QEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgIAogICAgIGlm
IChtX3Byb3RvdHlwZS5nZXQoKS5pc0NlbGwoKSkKICAgICAgICAgb3V0LnByaW50KCIsIFByb3Rv
OiIsIFJhd1BvaW50ZXIobV9wcm90b3R5cGUuZ2V0KCkuYXNDZWxsKCkpKTsKKworICAgIHN3aXRj
aCAoZGljdGlvbmFyeUtpbmQoKSkgeworICAgIGNhc2UgTm9uZURpY3Rpb25hcnlLaW5kOgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZERpY3Rpb25hcnlLaW5kOgorICAgICAgICBvdXQu
cHJpbnQoIiwgRGljdGlvbmFyeSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVuY2FjaGVk
RGljdGlvbmFyeUtpbmQ6CisgICAgICAgIG91dC5wcmludCgiLCBVbmNhY2hlYWJsZURpY3Rpb25h
cnkiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAogICAgIG91dC5wcmludCgiXSIpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OCw3
ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlU
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlw
ZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9u
YXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJ1Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxs
cHRyKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3Ry
dWN0dXJlKiBzZWFsVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6ZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUq
KTsKQEAgLTE5NCw3ICsxOTQsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkg
Y29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0K
ICAgICBib29sIGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlv
bmFyeUtpbmQoKSA9PSBVbmNhY2hlZERpY3Rpb25hcnlLaW5kOyB9CiAgIAotICAgIGJvb2wgcHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0g
VW5jYWNoZWREaWN0aW9uYXJ5S2luZCAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcoKTsgfQorICAgIGJvb2wgcHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCisgICAg
eworICAgICAgICByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBVbmNhY2hlZERpY3Rpb25hcnlL
aW5kCisgICAgICAgICAgICAmJiAhdHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmco
KQorICAgICAgICAgICAgJiYgISh0eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xv
dCgpICYmICF0eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICAg
ICAgICAgICYmIHR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAg
ICAgICAgICYmIHR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCk7
CisgICAgfQogCiAgICAgLy8gV2UgdXNlIFNsb3dQYXRoIGluIEdldEJ5SWRTdGF0dXMgZm9yIHN0
cnVjdHVyZXMgdGhhdCBtYXkgZ2V0IG5ldyBpbXB1cmUgcHJvcGVydGllcyBsYXRlciB0byBwcmV2
ZW50CiAgICAgLy8gREZHIGZyb20gaW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgc2luY2Ugc3Ry
dWN0dXJlcyBkb24ndCB0cmFuc2l0aW9uIHdoZW4gYSBuZXcgaW1wdXJlIHByb3BlcnR5IGFwcGVh
cnMuCkBAIC0yMDIsNyArMjE0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5
cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCk7CiAgICAgfQotCisgICAgCiAg
ICAgLy8gVHlwZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFT
U0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50
eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CkBAIC01MjgsNyArNTQwLDcgQEAg
cHJpdmF0ZToKICAgICAvLyB0byB1bmxvY2sgaXQuCiAgICAgdm9pZCBmaW5kU3RydWN0dXJlc0Fu
ZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0cnVjdHVyZXMs
IFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2lu
ZCk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50RmlyZSogPSBudWxscHRyKTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVt
b3ZlKFByb3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJl
dmlzaW9uIDE4NzYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzNiw2ICs1MzYsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCiAgICAgdm9pZCByZWdpc3RlcldhdGNocG9p
bnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAg
IAogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRo
IElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0
eShjb25zdCBTdHJpbmcmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0LWZv
bGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay1uZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0
LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay1uZXcuanMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ZvbGQtbXVs
dGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LXdpdGhvdXQtZm9sZGluZy10aGUtc3Ry
dWN0dXJlLWNoZWNrLW5ldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACitmdW5j
dGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisKK2Z1bmN0aW9uIGJhcihvKSB7Cisg
ICAgcmV0dXJuIG8uZzsKK30KKworZnVuY3Rpb24gYmF6KG8sIHAsIHEpIHsKKyAgICB2YXIgcmVz
dWx0ID0gMDsKKyAgICBpZiAoaXNGaW5hbFRpZXIoKSkgeworICAgICAgICBwID0gbzsKKyAgICAg
ICAgcSA9IG87CisgICAgICAgIHJlc3VsdCArPSAxMDAwMDsKKyAgICB9CisgICAgcmVzdWx0ICs9
IGZvbyhwKTsKKyAgICByZXN1bHQgKz0gYmFyKHEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K25vSW5saW5lKGJheik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAg
ICB2YXIgbywgcCwgcTsKKyAgICB2YXIgZXhwZWN0ZWQxOworICAgIHZhciBleHBlY3RlZDI7Cisg
ICAgbyA9IHtmOjEwMCwgZzoxMDF9OworICAgIGV4cGVjdGVkMiA9IDEwMDAwICsgMTAwICsgMTAx
OworICAgIGlmIChpICYgMSkgeworICAgICAgICBwID0ge2U6MSwgZjoyLCBnOjN9OworICAgICAg
ICBxID0ge2U6NCwgZjo1LCBnOjZ9OworICAgICAgICBleHBlY3RlZDEgPSAyICsgNjsKKyAgICB9
IGVsc2UgeworICAgICAgICBwID0ge2Y6NywgZzo4fTsKKyAgICAgICAgcSA9IHtnOjksIGY6MTB9
OworICAgICAgICBleHBlY3RlZDEgPSA3ICsgOTsKKyAgICB9CisgICAgdmFyIHJlc3VsdCA9IGJh
eihvLCBwLCBxKTsKKyAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVkMSAmJiByZXN1bHQgIT0gZXhw
ZWN0ZWQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQgKyAi
IChleHBlY3RlZCAiICsgZXhwZWN0ZWQxICsgIiBvciAiICsgZXhwZWN0ZWQyICsgIikiOworfQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211bHRpLWdldC1ieS1v
ZmZzZXQtc2VsZi1vci1wcm90by5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL211bHRpLWdldC1ieS1vZmZzZXQtc2VsZi1vci1wcm90by5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktZ2V0
LWJ5LW9mZnNldC1zZWxmLW9yLXByb3RvLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUg
QEAKK2Z1bmN0aW9uIGZvbyhvLCBzdGFydCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBvLmY7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIG8gPSB7fTsKK28uZiA9
IDQyOwordmFyIGYgPSB7fTsKK2YuZiA9IDQzOworZi5nID0gNDQ7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkKKyAgICBvLmYgPSBpOworby5mID0gNDI7CisKK2ZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBwOworICAgIGlmIChpICYgMSkKKyAgICAg
ICAgcCA9IG87CisgICAgZWxzZQorICAgICAgICBwID0gT2JqZWN0LmNyZWF0ZShvKTsKKyAgICB2
YXIgcmVzdWx0ID0gZm9vKHApOworICAgIGlmIChyZXN1bHQgIT0gMTAwICogNDIpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHEgPSB7fTsK
K3EuZiA9IDQzOwordmFyIHJlc3VsdCA9IGZvbyhxKTsKK2lmIChyZXN1bHQgIT0gMTAwICogNDMp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2lu
dC1kaWN0aW9uYXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC1kaWN0aW9uYXJ5LmpzCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBsYWNlbWVudC13YXRj
aHBvaW50LWRpY3Rpb25hcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAorZnVu
Y3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28pOworCit2
YXIgcCA9IHtmOjQyfTsKK3ZhciBvID0gT2JqZWN0LmNyZWF0ZShwKTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHBbImkiICsgaV0gPSBpOworICAgIGZvciAodmFyIGog
PSAwOyBqIDwgMTAwOyArK2opIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICAg
ICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIHJlc3VsdDsKKyAgICB9Cit9CisKKy8vIE1ha2UgcCBhIG5vbi1kaWN0aW9uYXJ5Lgor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHZhciB0bXAgPSBvLmY7Cit9CisK
K3AuZiA9IDQzOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0gNDMpCisgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVwbGFjZW1lbnQtd2F0Y2hwb2ludC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGxhY2Vt
ZW50LXdhdGNocG9pbnQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3JlcGxhY2VtZW50LXdhdGNocG9pbnQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMiBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitu
b0lubGluZShmb28pOworCit2YXIgcCA9IHtmOjQyfTsKK3ZhciBvID0gT2JqZWN0LmNyZWF0ZShw
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHBbImkiICsgaV0gPSBp
OworICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTAwOyArK2opIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGZvbyhvKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9Cit9CisKK3AuZiA9IDQzOwor
dmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0gNDMpCisgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8t
Y2hhbmdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvdW5kZWZpbmVkLWFjY2Vzcy1kaWN0aW9uYXJ5LXRoZW4tcHJvdG8tY2hhbmdlLmpzCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy91bmRlZmluZWQt
YWNjZXNzLWRpY3Rpb25hcnktdGhlbi1wcm90by1jaGFuZ2UuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNyBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciBwID0ge307CisgICAgdmFy
IG8gPSB7fTsKKyAgICBvLl9fcHJvdG9fXyA9IHA7CisgICAgdmFyIHJlc3VsdDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCA9IG8uZjsKKyAgICAg
ICAgaWYgKGkgPT0gNTApCisgICAgICAgICAgICBwLmYgPSA0MjsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSA0MikKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdW5kZWZpbmVkLWFjY2Vzcy10aGVuLXByb3RvLWNo
YW5nZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3VuZGVmaW5lZC1hY2Nlc3MtdGhlbi1wcm90by1jaGFuZ2UuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3VuZGVmaW5lZC1hY2Nlc3MtdGhlbi1w
cm90by1jaGFuZ2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorZnVuY3Rpb24g
Zm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28pOworCit2YXIgcCA9
IHt9OwordmFyIG8gPSBPYmplY3QuY3JlYXRlKHApOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQgIT09
IHZvaWQgMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGluIGxvb3A6ICIgKyBy
ZXN1bHQ7Cit9CisKK3AuZiA9IDQyOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQg
IT09IDQyKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxODc2ODEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNS0wNy0zMSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBhZGFwdGl2ZSBzdHJ1
Y3R1cmUgd2F0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NjkyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICoganMvcmVncmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5n
LXN0cnVjdHVyZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2xv
YmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUuaHRtbDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90
eXBlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wcm90b3R5cGUt
YWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmct
c3RydWN0dXJlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5q
czogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3VuZGVmaW5lZC1wcm9wZXJ0eS1hY2Nlc3MuanM6CisgICAgICAgIChmb28pOgorICAgICAg
ICAoYmFyKToKKyAgICAgICAgKGJheik6CisKIDIwMTUtMDctMzEgIFNhYW0gYmFyYXRpICA8c2Fh
bWJhcmF0aTFAZ21haWwuY29tPgogCiAgICAgICAgIEVTNiBjbGFzcyBzeW50YXggc2hvdWxkIHVz
ZSBibG9jayBzY29waW5nCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC1vYmpl
Y3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0
YXRpbmctc3RydWN0dXJlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9n
bG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZQorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0aW5nLXN0cnVjdHVy
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLW9iamVj
dC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1z
dHJ1Y3R1cmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nbG9iYWwtb2JqZWN0LWFjY2Vz
cy13aXRoLW11dGF0aW5nLXN0cnVjdHVyZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRh
dGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1h
Y2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRp
bmctcHJvdG90eXBlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mt
d2l0aC1tdXRhdGluZy1wcm90b3R5cGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHJvdG90eXBlLWFjY2Vzcy13
aXRoLW11dGF0aW5nLXByb3RvdHlwZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3Byb3Rv
dHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2xv
YmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2xvYmFsLW9iamVjdC1hY2Nl
c3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nbG9iYWwtb2JqZWN0LWFjY2Vzcy13aXRoLW11dGF0
aW5nLXN0cnVjdHVyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitmdW5jdGlv
biBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IGY7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
bm9JbmxpbmUoZm9vKTsKKworZiA9IDQyOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgdGhpc1siaSIgKyBpXSA9IGk7CisgICAgdmFyIHJlc3VsdCA9IGZvbygpOworICAg
IGlmIChyZXN1bHQgIT0gNDIgKiAxMDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIHJlc3VsdDsKK30KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWFjY2Vz
cy13aXRoLW11dGF0aW5nLXByb3RvdHlwZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3Byb3RvdHlwZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1w
cm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorZnVuY3Rpb24gZm9v
KG8pIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsg
KytpKQorICAgICAgICByZXN1bHQgKz0gby5mOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25v
SW5saW5lKGZvbyk7CisKK3ZhciBwID0ge2Y6NDJ9OwordmFyIG8gPSBPYmplY3QuY3JlYXRlKHAp
OworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICBwWyJpIiArIGldID0g
aTsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQgIT0gNDIgKiAxMDAp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3VuZGVmaW5lZC1wcm9wZXJ0eS1h
Y2Nlc3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvdW5kZWZpbmVkLXByb3BlcnR5LWFjY2Vzcy5qcwkocmV2aXNpb24gMTg3NjA1KQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvdW5kZWZpbmVkLXByb3BlcnR5LWFjY2Vz
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEsNyArMTEsNyBAQCBmdW5jdGlvbiBmb28oKSB7CiB9
CiByZXN1bHQgPSBmb28oKTsKIGlmIChyZXN1bHQgIT0gdW5kZWZpbmVkKQotICAgIHRocm93ICJC
YWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDog
IiArIHJlc3VsdCk7CiAKIC8vIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBhIGNhY2hlZCBwcm9wZXJ0
eSBsb29rdXAgbWlzcyBkb2Vzbid0IGNvbnRpbnVlIHRvIGZpcmUgd2hlbiB0aGUgcHJvcGVydHkg
c3VkZGVubHkgYXBwZWFycyBvbiB0aGUgb2JqZWN0LgogCkBAIC0yNiw3ICsyNiw3IEBAIGZ1bmN0
aW9uIGJhcigpIHsKIH0KIHZhciByZXN1bHQgPSBiYXIoKTsKIGlmIChyZXN1bHQgIT0gMSkKLSAg
ICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB0aHJvdyBuZXcgRXJyb3IoIkJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogc29tZUdsb2JhbCA9IHVuZGVmaW5lZDsKIAogLy8gVGhp
cyB0ZXN0IGNoZWNrcyB0aGF0IGEgY2FjaGVkIHByb3BlcnR5IGxvb2t1cCBtaXNzIGRvZXNuJ3Qg
Y29udGludWUgdG8gZmlyZSB3aGVuIHRoZSBwcm9wZXJ0eSBzdWRkZW5seSBhcHBlYXJzIG9uIHRo
ZSBvYmplY3QncyBwcm90b3R5cGUuCkBAIC00NCw1ICs0NCw1IEBAIGZ1bmN0aW9uIGJheigpIHsK
IH0KIHZhciByZXN1bHQgPSBiYXooKTsKIGlmIChyZXN1bHQgIT0gMikKLSAgICB0aHJvdyAiQmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1bHQ6ICIg
KyByZXN1bHQpOwogCg==
</data>
<flag name="review"
          id="283186"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>